diff --git a/src/layers/news/model.test.mjs b/src/layers/news/model.test.mjs index b5f3eaba7..e603a1cd2 100644 --- a/src/layers/news/model.test.mjs +++ b/src/layers/news/model.test.mjs @@ -600,3 +600,17 @@ test('the hotspots answer carries the window it was counted over', () => { null, ); }); + +test('a checked severity keeps saying who set it', () => { + const page = normalizeFeedPayload({ + reports: ['label', 'model', 'guess'].map((by, i) => ({ + ...report(`r${i}`, '2026-10-28T09:00:00Z'), + severity: 2, + severityBy: by, + })), + }); + assert.deepEqual( + page.reports.map((r) => r.severityBy), + ['label', 'model', 'rules'], + ); +}); diff --git a/src/layers/news/records.js b/src/layers/news/records.js index e573f9ac9..afedc1337 100644 --- a/src/layers/news/records.js +++ b/src/layers/news/records.js @@ -253,7 +253,9 @@ function normalizeReport(raw) { ? raw.relevance : 'related', severity: severity(raw.severity), - severityBy: raw.severityBy === 'model' ? 'model' : 'rules', + severityBy: ['model', 'label'].includes(raw.severityBy) + ? raw.severityBy + : 'rules', claim: raw.claim && typeof raw.claim === 'object' ? { by: text(raw.claim.by, 80) } diff --git a/src/layers/news/source.js b/src/layers/news/source.js index 8c739584b..be1df6846 100644 --- a/src/layers/news/source.js +++ b/src/layers/news/source.js @@ -13,7 +13,7 @@ const msg = (text) => text; const MAX_BYTES = 4 * 1024 * 1024; const BASE_PATH = '/api/news'; // The outline geometry version the client draws (disputed areas included). -const OUTLINE_VERSION = '3'; +const OUTLINE_VERSION = '4'; /** The three read routes the news layer calls, for a host's path allowlist. */ export const NEWS_API_PATHS = Object.freeze([ diff --git a/src/layers/news/source.test.mjs b/src/layers/news/source.test.mjs index c99be800c..4024b88f4 100644 --- a/src/layers/news/source.test.mjs +++ b/src/layers/news/source.test.mjs @@ -58,8 +58,8 @@ test('reads validated hotspots, feed and outlines from the same-origin routes', [ '/api/news/hotspots', '/api/news/feed?hotspot=all&limit=60&today=1', - '/api/news/outline?hotspot=ua&v=3', - '/api/news/outline?country=SD&v=3', + '/api/news/outline?hotspot=ua&v=4', + '/api/news/outline?country=SD&v=4', ], ); for (const { url, init } of calls) { @@ -166,7 +166,7 @@ test('the host allowlist admits the client routes and refuses anything else', () '/api/news/air-alerts', '/api/news/outline?hotspot=ua', '/api/news/outline?hotspot=ua&v=2', - '/api/news/outline?country=ukraine&v=3', + '/api/news/outline?country=ukraine&v=4', ]) assert.equal(allowed(path), false, path); });