From d6b58249123f052a11aacb7b428b7e3112221673 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 20:25:59 +0000 Subject: [PATCH 1/9] Plan: investigate missing new stories from requested links Agent-Logs-Url: https://github.com/potemkin666/AlbertAlert/sessions/3a915006-48dd-4a25-a712-d2995bab2ba1 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- data/albertalert.sqlite | Bin 2113536 -> 2113536 bytes data/quarantined-sources.json | 18722 +-------------------- data/source-remediation-sweep.json | 2 +- data/top-20-source-remediation.json | 2 +- live-alerts.json | 22818 +------------------------- source-quarantine.html | 12 +- 6 files changed, 228 insertions(+), 41328 deletions(-) diff --git a/data/albertalert.sqlite b/data/albertalert.sqlite index 92e3e91a2ae178d554e357b81646647df1859f5c..750205b5ce2404b03b9649d425820d7c29b8ef3b 100644 GIT binary patch delta 1934 zcmb7E&u`mg7>@1OaoVO`mzFe5*SH5dt*tA^X;Pe!PNSlX19W2%h#}FX@t4$NvBPJ( z?M`k)#10(Tgr*2C@F#5a5OG5sVFzv#w{hdnWtvj9*Us!TQ9Q9vd2;ag>3yH){qYfaT)DkQ{CB9bVI|pH}s#c1fLM!wrGLaW|p5|rd!mJF@N zYx@Z6N_Ed5muIN7cZYSIFKeoS4h?c?mRj$-P}H&_Lqwgt5T`O^^#D?6Ra~m^@chn$ zECC?f53*G87jB$<9Eg0tG}+APZ{bDyZt!S=q43C~(2pZ;kE`V49s1SY1&w;~tEE|0z$ zJ_#q;4cLiA)@ppNjs*&di}{0v^Z7!^PbBOi!bq+R-*{fAm^y4eU&)kr*LN$WR8~x9 zD&@+iR;!t+V%$ExMW1N+3w=+kbMGG3t&%DunY&cRnyzynp(;etdn=~cY1NYLDy3U) zj|LXfr7Wx!1u2&nassTNAYA{I``$i3G(M|EKw%-@pptQEK%#YOX9qO)4~QpmcdaC$ z-OO8(APQMoO7$kj7ONNrLfp0T9+J&lNar>+)0V&&5ylz@f%^(N;4Y&QR@5qt*E?NX zL?+hi$Q9TNX&cTdeJLRaKUZHY?VR?>U&+wNRGgMuA%R;CG2bxf=|AY!)t~6-F;}0V zExDtg2^1XT3&XL^&kZ{0TRshTnGKY_*C^WyKkZ;hWBWlj2PAUR+`o}ztUh;ivz+pO zH^Xp;D0RMs(9SadUj_Z`TXEy}*A_a^ZGioHr&EU{;Jf#)Ca2%?CG2^t8`9r;&5qXk So1Ra!=JQ;nJ+sdJ!@dBvr&O!} delta 344 zcmWO0u}cDB9L8~fzIU&8>Umn4re-&kON$N~6x0wzOW5QTS!9tAot!zeT@X367!F5+ z{tqSe5^W6);?UY=TMbPu5nc8SANcZ2k8Pim4ebSource Quarantine Review
- Generated: 2026-04-23T20:18:46.625Z - Low-health sources: 528 + Generated: 2026-04-23T20:25:40.062Z + Low-health sources: 0 Pending suggestions: 0 SLA: deprioritised, auto-recheck 24h+ - New this week: 235 - Avg health score: 3/100 - Avg time in quarantine: 141h + New this week: 0 + Avg health score: 0/100 + Avg time in quarantine: 0h Re-quarantine rate: 0%
@@ -455,7 +455,7 @@

Feed Audit

? 'Data mode: live API (restore enabled)' : 'Data mode: live read-only (restore unavailable)'; meta.innerHTML = [ - 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T20:18:46.625Z') + '', + 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T20:25:40.062Z') + '', 'Low-health sources: ' + escapeHtml(currentEntries.length) + '', 'Pending suggestions: ' + escapeHtml(currentSuggestions.length) + '', 'SLA: deprioritised, auto-recheck 24h+', From fc0d391ae316293fb471cc09c5e8724f01d78f5e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 20:27:03 +0000 Subject: [PATCH 2/9] Include pending source requests in live feed runs Agent-Logs-Url: https://github.com/potemkin666/AlbertAlert/sessions/3a915006-48dd-4a25-a712-d2995bab2ba1 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- scripts/build-live-feed.mjs | 7 ++++++- tests/source-request-merge.test.mjs | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 tests/source-request-merge.test.mjs diff --git a/scripts/build-live-feed.mjs b/scripts/build-live-feed.mjs index 76dff0f9..8ca7b366 100644 --- a/scripts/build-live-feed.mjs +++ b/scripts/build-live-feed.mjs @@ -2491,7 +2491,12 @@ async function main() { try { const requestedSources = normaliseSourceRequestsPayload(await readJsonFile(sourceRequestsPath)); if (requestedSources.length) { - console.log(`Loaded ${requestedSources.length} pending source request(s). Manual approval required before activation.`); + const baseSourceCount = sources.length; + sources = mergeSourceCatalogs(sources, requestedSources); + const activatedCount = Math.max(0, sources.length - baseSourceCount); + console.log( + `Loaded ${requestedSources.length} pending source request(s); activated ${activatedCount} for this feed run.` + ); } } catch (error) { const message = error instanceof Error ? error.message : String(error); diff --git a/tests/source-request-merge.test.mjs b/tests/source-request-merge.test.mjs new file mode 100644 index 00000000..c74a2a47 --- /dev/null +++ b/tests/source-request-merge.test.mjs @@ -0,0 +1,23 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; + +import { mergeSourceCatalogs } from '../scripts/build-live-feed/io.mjs'; + +test('mergeSourceCatalogs appends pending requests while skipping duplicates', () => { + const baseSources = [ + { id: 'base-1', endpoint: 'https://example.com/feed', kind: 'rss' }, + { id: 'base-2', endpoint: 'https://example.com/other', kind: 'rss' } + ]; + const requestedSources = [ + { id: 'request-1', endpoint: 'https://example.com/new', kind: 'rss' }, + { id: 'base-2', endpoint: 'https://duplicate-id.example.com/feed', kind: 'rss' }, + { id: 'request-2', endpoint: 'https://example.com/feed#section', kind: 'rss' } + ]; + + const merged = mergeSourceCatalogs(baseSources, requestedSources); + + assert.deepEqual( + merged.map((entry) => entry.id), + ['base-1', 'base-2', 'request-1'] + ); +}); From 4167b92aa97ccbde7273fddf8a15daa284622d49 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 20:27:56 +0000 Subject: [PATCH 3/9] Restore generated feed artifacts to main baseline Agent-Logs-Url: https://github.com/potemkin666/AlbertAlert/sessions/3a915006-48dd-4a25-a712-d2995bab2ba1 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- data/albertalert.sqlite | Bin 2113536 -> 2113536 bytes data/quarantined-sources.json | 18722 ++++++++++++++++++++- data/source-remediation-sweep.json | 2 +- data/top-20-source-remediation.json | 2 +- live-alerts.json | 22820 +++++++++++++++++++++++++- source-quarantine.html | 12 +- 6 files changed, 41329 insertions(+), 229 deletions(-) diff --git a/data/albertalert.sqlite b/data/albertalert.sqlite index 750205b5ce2404b03b9649d425820d7c29b8ef3b..92e3e91a2ae178d554e357b81646647df1859f5c 100644 GIT binary patch delta 344 zcmWO0u}cDB9L8~fzIU&8>Umn4re-&kON$N~6x0wzOW5QTS!9tAot!zeT@X367!F5+ z{tqSe5^W6);?UY=TMbPu5nc8SANcZ2k8Pim4eb@1OaoVO`mzFe5*SH5dt*tA^X;Pe!PNSlX19W2%h#}FX@t4$NvBPJ( z?M`k)#10(Tgr*2C@F#5a5OG5sVFzv#w{hdnWtvj9*Us!TQ9Q9vd2;ag>3yH){qYfaT)DkQ{CB9bVI|pH}s#c1fLM!wrGLaW|p5|rd!mJF@N zYx@Z6N_Ed5muIN7cZYSIFKeoS4h?c?mRj$-P}H&_Lqwgt5T`O^^#D?6Ra~m^@chn$ zECC?f53*G87jB$<9Eg0tG}+APZ{bDyZt!S=q43C~(2pZ;kE`V49s1SY1&w;~tEE|0z$ zJ_#q;4cLiA)@ppNjs*&di}{0v^Z7!^PbBOi!bq+R-*{fAm^y4eU&)kr*LN$WR8~x9 zD&@+iR;!t+V%$ExMW1N+3w=+kbMGG3t&%DunY&cRnyzynp(;etdn=~cY1NYLDy3U) zj|LXfr7Wx!1u2&nassTNAYA{I``$i3G(M|EKw%-@pptQEK%#YOX9qO)4~QpmcdaC$ z-OO8(APQMoO7$kj7ONNrLfp0T9+J&lNar>+)0V&&5ylz@f%^(N;4Y&QR@5qt*E?NX zL?+hi$Q9TNX&cTdeJLRaKUZHY?VR?>U&+wNRGgMuA%R;CG2bxf=|AY!)t~6-F;}0V zExDtg2^1XT3&XL^&kZ{0TRshTnGKY_*C^WyKkZ;hWBWlj2PAUR+`o}ztUh;ivz+pO zH^Xp;D0RMs(9SadUj_Z`TXEy}*A_a^ZGioHr&EU{;Jf#)Ca2%?CG2^t8`9r;&5qXk So1Ra!=JQ;nJ+sdJ!@dBvr&O!} diff --git a/data/quarantined-sources.json b/data/quarantined-sources.json index d927ca3e..916885cb 100644 --- a/data/quarantined-sources.json +++ b/data/quarantined-sources.json @@ -1,14 +1,18722 @@ { - "generatedAt": "2026-04-23T20:25:40.062Z", - "count": 0, + "generatedAt": "2026-04-23T20:18:46.625Z", + "count": 528, "metrics": { - "total": 0, - "newThisWeek": 0, - "avgTimeInQuarantineHours": 0, - "avgHealthScore": 0, + "total": 528, + "newThisWeek": 235, + "avgTimeInQuarantineHours": 141, + "avgHealthScore": 3, "reQuarantineRate": 0, "reQuarantined": 0, "restoredTotal": 0 }, - "sources": [] + "sources": [ + { + "id": "euaa-news", + "provider": "EUAA (EU Agency for Asylum) - Press Releases", + "endpoint": "https://euaa.europa.eu/news-events/press-releases", + "kind": "html", + "lane": "border", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eulisa-news-events", + "provider": "eu-LISA - News and Events (RSS)", + "endpoint": "https://www.eulisa.europa.eu/news-and-events.rss", + "kind": "rss", + "lane": "border", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "austria-interior-ministry-news", + "provider": "Austrian Interior Ministry - News", + "endpoint": "https://www.bmi.gv.at/news.aspx", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "austria-interior-ministry-rss-index", + "provider": "Austrian Interior Ministry - RSS Index", + "endpoint": "https://www.bmi.gv.at/rss_feed/start.aspx", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "europol-news-rss", + "provider": "Europol - Newsroom (RSS)", + "endpoint": "https://www.europol.europa.eu/cms/api/rss/news", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "dutch-police-rss-index", + "provider": "Politie.nl - RSS", + "endpoint": "https://www.politie.nl/rss", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "mossos-news", + "provider": "Mossos d'Esquadra - News", + "endpoint": "https://mossos.gencat.cat/ca/actualitat/", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eppo-news-node-7", + "provider": "European Public Prosecutor's Office - News (RSS)", + "endpoint": "https://www.eppo.europa.eu/en/news.xml", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-commission-counter-terrorism-measures-2026", + "provider": "European Commission - Counter Terrorism Measures 2026", + "endpoint": "https://commission.europa.eu/news-and-media/news/commission-proposes-new-measures-prevent-and-counter-terrorism-2026-02-26_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-commission-home-affairs-topic", + "provider": "European Commission - Home Affairs", + "endpoint": "https://commission.europa.eu/topics/home-affairs_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-council-jha-register-rss", + "provider": "Council of the EU - Latest Documents RSS", + "endpoint": "https://www.consilium.europa.eu/en/register/rss/LD.xml", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-council-press-releases", + "provider": "Council of the European Union a Press Releases (RSS)", + "endpoint": "https://www.consilium.europa.eu/en/rss/pressreleases.ashx", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-council-press-releases-html", + "provider": "Council of the EU - Press Releases", + "endpoint": "https://www.consilium.europa.eu/en/press/press-releases/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-eppo-news", + "provider": "European Public Prosecutor's Office - News", + "endpoint": "https://www.eppo.europa.eu/en/news", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-home-affairs-news", + "provider": "European Commission a Home Affairs News", + "endpoint": "https://home-affairs.ec.europa.eu/news_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-olaf-news", + "provider": "OLAF (EU Anti-Fraud Office) a News", + "endpoint": "https://anti-fraud.ec.europa.eu/media-corner/news_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-security-union-strategy", + "provider": "European Commission a Security Union Strategy", + "endpoint": "https://home-affairs.ec.europa.eu/policies/internal-security_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "europarl-committee-libe", + "provider": "European Parliament - LIBE Press Releases", + "endpoint": "https://www.europarl.europa.eu/committees/en/libe/home/press-releases", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "europarl-committee-sede", + "provider": "European Parliament - SEDE Press Releases", + "endpoint": "https://www.europarl.europa.eu/committees/en/sede/home/press-releases", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "europarl-pressreleases-committees", + "provider": "European Parliament a Press Releases (Committees) (RSS)", + "endpoint": "https://www.europarl.europa.eu/rss/doc/press-releases-committees/en.xml", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "netherlands-police-news", + "provider": "Dutch National Police - News (EN)", + "endpoint": "https://www.politie.nl/en/news", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "echr-press-releases-rss", + "provider": "European Court of Human Rights - Press Releases RSS", + "endpoint": "https://hudoc.echr.coe.int/app/transform/rss?length=20&library=echrengpress&query=contentsitename%3AECHR+AND+doctype%3DPR&ranking. Model. Id=11111111-0000-0000-0000-000000000000&sort=kpdate+Descending&start=0", + "kind": "rss", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "french-justice-ministry-news", + "provider": "French Ministry of Justice - News", + "endpoint": "https://www.justice.gouv.fr/actualites", + "kind": "html", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "dsn-at-english", + "provider": "DSN Austria - Aktuelles", + "endpoint": "https://www.dsn.gv.at/news.html", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "sapo-se-english", + "provider": "Swedish Security Service English news", + "endpoint": "https://www.sakerhetspolisen.se/ovriga-sidor/other-languages/english-engelska/press-room/news.html", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "interpol-news-events", + "provider": "INTERPOL a News and Events", + "endpoint": "https://www.interpol.int/News-and-Events", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "osce-press-releases", + "provider": "OSCE a Press Releases", + "endpoint": "https://www.osce.org/press-releases", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "unoct-news", + "provider": "UN Office of Counter-Terrorism (UNOCT) - News", + "endpoint": "https://www.un.org/counterterrorism/news", + "kind": "html", + "lane": "oversight", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "bexley-council-news", + "provider": "Bexley Council a News", + "endpoint": "https://www.bexley.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "brent-council-news", + "provider": "Brent Council a News", + "endpoint": "https://www.brent.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "camden-council-news", + "provider": "Camden Council a News", + "endpoint": "https://news.camden.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "chelsea-westminster-news", + "provider": "Chelsea and Westminster Hospital NHS Foundation Trust a News", + "endpoint": "https://www.chelwest.nhs.uk/about-us/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "croydon-council-news", + "provider": "Croydon Council a News", + "endpoint": "https://news.croydon.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gosh-news", + "provider": "Great Ormond Street Hospital a News", + "endpoint": "https://www.gosh.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "guys-st-thomas-news", + "provider": "Guy's and St Thomas' NHS Foundation Trust a News", + "endpoint": "https://www.guysandstthomas.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "hackney-council-news", + "provider": "Hackney Council a News", + "endpoint": "https://news.hackney.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "havering-council-news", + "provider": "Havering Council a News", + "endpoint": "https://www.havering.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "hillingdon-council-news", + "provider": "Hillingdon Council a News", + "endpoint": "https://www.hillingdon.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "hounslow-council-news", + "provider": "Hounslow Council a News", + "endpoint": "https://www.hounslow.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "islington-council-news", + "provider": "Islington Council a News", + "endpoint": "https://www.islington.media/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "kings-college-hospital-news", + "provider": "King's College Hospital NHS Foundation Trust a News", + "endpoint": "https://www.kch.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "lambeth-council-news", + "provider": "Lambeth Council a News", + "endpoint": "https://love.lambeth.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "lnwh-news", + "provider": "London North West University Healthcare NHS Trust a News", + "endpoint": "https://www.lnwh.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "london-gov-rss-80603", + "provider": "Greater London Authority a RSS Feed 80603", + "endpoint": "https://www.london.gov.uk/rss-feeds/80603", + "kind": "rss", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "london-gov-rss-80632", + "provider": "Greater London Authority a RSS Feed 80632", + "endpoint": "https://www.london.gov.uk/rss-feeds/80632", + "kind": "rss", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "met-police-the-met-tag", + "provider": "Metropolitan Police - The Met Tag", + "endpoint": "https://news.met.police.uk/news/tag/the-met", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "moorfields-news", + "provider": "Moorfields Eye Hospital NHS Foundation Trust a News", + "endpoint": "https://www.moorfields.nhs.uk/about-us/news-and-blogs/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "nelft-news", + "provider": "North East London NHS Foundation Trust a News", + "endpoint": "https://www.nelft.nhs.uk/news-events/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "newham-council-news", + "provider": "Newham Council a News", + "endpoint": "https://www.newham.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "nhs-london-nwl-news", + "provider": "NHS North West London a News", + "endpoint": "https://www.nwlondonicb.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "oxleas-news", + "provider": "Oxleas NHS Foundation Trust a News", + "endpoint": "https://oxleas.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "redbridge-council-news", + "provider": "Redbridge Council a News", + "endpoint": "https://www.redbridge.gov.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "st-georges-news", + "provider": "St George's University Hospitals NHS Foundation Trust a News", + "endpoint": "https://www.stgeorges.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "sutton-council-news", + "provider": "Sutton Council a News", + "endpoint": "https://www.sutton.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "swlstg-news", + "provider": "South West London and St George's Mental Health NHS Trust a News", + "endpoint": "https://www.swlstg.nhs.uk/latest-news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "waltham-forest-council-news", + "provider": "Waltham Forest Council a News", + "endpoint": "https://www.walthamforest.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-fcdo-travel-advice", + "provider": "FCDO a Foreign Travel Advice Index", + "endpoint": "https://www.gov.uk/foreign-travel-advice", + "kind": "html", + "lane": "border", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "uk-border-force", + "provider": "Border Force (UK) a Announcements and Publications", + "endpoint": "https://www.gov.uk/government/organisations/border-force", + "kind": "html", + "lane": "border", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "uk-ukvi", + "provider": "UK Visas and Immigration a Announcements and Publications", + "endpoint": "https://www.gov.uk/government/organisations/uk-visas-and-immigration", + "kind": "html", + "lane": "border", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-terrorism-search", + "provider": "GOV.UK Search - Terrorism", + "endpoint": "https://www.gov.uk/search/all?keywords=terrorism", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "npcc-releases", + "provider": "National Police Chiefs' Council - Releases", + "endpoint": "https://news.npcc.police.uk/releases/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "police-uk-stops-force-leicestershire", + "provider": "Police.uk - Force Stops (Leicestershire)", + "endpoint": "https://data.police.uk/api/stops-force?force=leicestershire", + "kind": "json", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "police-uk-stops-street-leicester", + "provider": "Police.uk - Street Stops Around Leicester", + "endpoint": "https://data.police.uk/api/stops-street?lat=52.629729&lng=-1.131592", + "kind": "json", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "foreign-office-blogs", + "provider": "Foreign Office Blogs", + "endpoint": "https://blogs.fco.gov.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "avon-and-somerset-police-news-html", + "provider": "Avon and Somerset Police - News", + "endpoint": "https://www.avonandsomerset.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "avon-somerset-police-news", + "provider": "Avon & Somerset Police a News", + "endpoint": "https://www.avonandsomerset.police.uk/newsroom/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "psni-latest-news", + "provider": "Police Service of Northern Ireland - Latest News", + "endpoint": "https://www.psni.police.uk/latest-news", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "west-yorkshire-police-all-rss", + "provider": "West Yorkshire Police - All Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/all/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "west-yorkshire-police-appeals-rss", + "provider": "West Yorkshire Police - Appeals Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/appeals/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "west-yorkshire-police-news-appeals", + "provider": "West Yorkshire Police - News Appeals", + "endpoint": "https://www.westyorkshirepolice.co.uk/news-appeals", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "west-yorkshire-police-news-rss", + "provider": "West Yorkshire Police - News Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "west-yorkshire-police-releases-rss", + "provider": "West Yorkshire Police - Releases Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/releases/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "attorney-generals-office-html", + "provider": "Attorney General's Office", + "endpoint": "https://www.gov.uk/government/organisations/attorney-generals-office", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "cabinet-office-html", + "provider": "Cabinet Office", + "endpoint": "https://www.gov.uk/government/organisations/cabinet-office", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "crown-office-news", + "provider": "Crown Office and Procurator Fiscal Service - News", + "endpoint": "https://www.copfs.gov.uk/about-copfs/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "echr-uk-grand-chamber-rss", + "provider": "European Court of Human Rights - UK Grand Chamber RSS", + "endpoint": "https://hudoc.echr.coe.int/app/transform/rss?length=20&library=echreng&query=%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28+contentsitename%3AECHR+AND+%28NOT+%28doctype%3DPR+OR+doctype%3DHFCOMOLD+OR+doctype%3DHECOMOLD%29%29+AND+%28%28respondent%3D%22GBR%22%29%29+AND+%28%28documentcollectionid%3D%22GRANDCHAMBER%22%29%29%29+XRANK%28cb%3D14%29+doctypebranch%3AGRANDCHAMBER%29+XRANK%28cb%3D13%29+doctypebranch%3ADECGRANDCHAMBER%29+XRANK%28cb%3D12%29+doctypebranch%3ACHAMBER%29+XRANK%28cb%3D11%29+doctypebranch%3AADMISSIBILITY%29+XRANK%28cb%3D10%29+doctypebranch%3ACOMMITTEE%29+XRANK%28cb%3D9%29+doctypebranch%3AADMISSIBILITYCOM%29+XRANK%28cb%3D8%29+doctypebranch%3ADECCOMMISSION%29+XRANK%28cb%3D7%29+doctypebranch%3ACOMMUNICATEDCASES%29+XRANK%28cb%3D6%29+doctypebranch%3ACLIN%29+doctypebranch%3AADVISORYOPINIONS%29+doctypebranch%3AREPORTS%29+doctypebranch%3AEXECUTION%29+doctypebranch%3AMERITS%29+doctypebranch%3ASCREENINGPANEL%29+XRANK%28cb%3D4%29+importance%3A1%29+XRANK%28cb%3D3%29+importance%3A2%29+XRANK%28cb%3D2%29+importance%3A3%29+XRANK%28cb%3D1%29+importance%3A4%29+XRANK%28cb%3D2%29+languageisocode%3AENG%29+XRANK%28cb%3D1%29+languageisocode%3AFRE&ranking. Model. Id=4180000c-8692-45ca-ad63-74bc4163871b&sort=kpdate+Descending&start=0", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "extremism-commission-blog", + "provider": "Commission for Countering Extremism - Blog", + "endpoint": "https://extremismcommission.blog.gov.uk/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "fcdo-html", + "provider": "Foreign, Commonwealth & Development Office", + "endpoint": "https://www.gov.uk/government/organisations/foreign-commonwealth-development-office", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-scot-access-to-justice-latest", + "provider": "Scottish Government - Access to Justice Latest", + "endpoint": "https://www.gov.scot/policies/access-to-justice/latest/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-cabinet-office-atom", + "provider": "Cabinet Office a GOV.UK Atom Feed", + "endpoint": "https://www.gov.uk/government/organisations/cabinet-office.atom", + "kind": "atom", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-hmcts", + "provider": "HMCTS a Courts and Tribunals Announcements", + "endpoint": "https://www.gov.uk/government/organisations/hm-courts-and-tribunals-service", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-home-office-atom", + "provider": "UK Home Office a Atom Feed", + "endpoint": "https://www.gov.uk/government/organisations/home-office.atom", + "kind": "atom", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-ipco", + "provider": "Investigatory Powers Commissioner's Office a GOV.UK", + "endpoint": "https://www.ipco.org.uk/publications/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-mod-atom", + "provider": "Ministry of Defence a GOV.UK Atom Feed", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-defence.atom", + "kind": "atom", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-moj-atom", + "provider": "Ministry of Justice a GOV.UK Atom Feed", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-justice.atom", + "kind": "atom", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-news-and-communications-atom", + "provider": "GOV.UK - News and Communications Atom", + "endpoint": "https://www.gov.uk/search/news-and-communications.atom", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "hmiprisons-news", + "provider": "HM Inspectorate of Prisons - News", + "endpoint": "https://hmiprisons.justiceinspectorates.gov.uk/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "hmiprobation-news", + "provider": "HM Inspectorate of Probation - News", + "endpoint": "https://hmiprobation.justiceinspectorates.gov.uk/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "home-office-media-blog", + "provider": "Home Office Media Blog", + "endpoint": "https://homeofficemedia.blog.gov.uk/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "independent-reviewer-terrorism-legislation", + "provider": "Independent Reviewer of Terrorism Legislation a Reports", + "endpoint": "https://terrorismlegislationreviewer.independent.gov.uk/category/reports/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "independent-reviewer-terrorism-legislation-html", + "provider": "Independent Reviewer of Terrorism Legislation", + "endpoint": "https://www.gov.uk/government/organisations/independent-reviewer-of-terrorism-legislation", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "judiciary-rss-feeds-page", + "provider": "Judiciary UK - RSS Feeds", + "endpoint": "https://www.judiciary.uk/rss-feeds/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "judiciary-uk-announcements-feed", + "provider": "Judiciary UK - Announcements Feed", + "endpoint": "https://www.judiciary.uk/announcements/feed/", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "judiciary-uk-judgments-feed", + "provider": "Judiciary UK - Judgments Feed", + "endpoint": "https://www.judiciary.uk/judgments/feed/", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "judiciary-uk-publications-feed", + "provider": "Judiciary UK - Publications Feed", + "endpoint": "https://www.judiciary.uk/publications/feed/", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "ministry-of-defence-html", + "provider": "Ministry of Defence", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-defence", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "ons-html", + "provider": "Office for National Statistics", + "endpoint": "https://www.gov.uk/government/organisations/office-for-national-statistics", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "parliament-all-bills-rss", + "provider": "Parliament - All Bills RSS", + "endpoint": "https://bills.parliament.uk/rss/allbills.rss", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "parliament-private-bills-rss", + "provider": "Parliament - Private Bills RSS", + "endpoint": "https://bills.parliament.uk/rss/privatebills.rss", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "parliament-public-bills-rss", + "provider": "Parliament - Public Bills RSS", + "endpoint": "https://bills.parliament.uk/rss/publicbills.rss", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "police-uk-crime-categories-2024-01", + "provider": "Police.uk - Crime Categories (2024-01)", + "endpoint": "https://data.police.uk/api/crime-categories?date=2024-01", + "kind": "json", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "police-uk-crimes-street-dates", + "provider": "Police.uk - Street Crime Dataset Dates", + "endpoint": "https://data.police.uk/api/crimes-street-dates", + "kind": "json", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "police-uk-outcomes-for-crime-e11dade0", + "provider": "Police.uk - Outcomes For Crime e11dade0", + "endpoint": "https://data.police.uk/api/outcomes-for-crime/e11dade0a92a912d12329b9b2abb856ac9520434ad6845c30f503e9901d140f1", + "kind": "json", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scotcourts-fai-determinations-rss", + "provider": "Scottish Courts - Fatal Accident Inquiry Determinations RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Fatal. Accident. Inquiry. Determinations", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scotcourts-fai-hearings-rss", + "provider": "Scottish Courts - Fatal Accident Inquiry Hearings RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Fatal. Accident. Inquiry. Hearings", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scotcourts-high-court-justiciary-judgments-rss", + "provider": "Scottish Courts - High Court of Justiciary Judgments RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Judgments/?Court=High+Court+of+Justiciary", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scotcourts-high-court-practice-notes-rss", + "provider": "Scottish Courts - High Court of Justiciary Practice Notes RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Practice. Notes. And. Directions/?Category=High+Court+of+Justiciary", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scotcourts-judgments-rss", + "provider": "Scottish Courts - Judgments RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Judgments", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scotcourts-news-articles-rss", + "provider": "Scottish Courts - News Articles RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/News. Articles", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scotcourts-publications-rss", + "provider": "Scottish Courts - Publications RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Publications", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scotcourts-sheriff-criminal-practice-notes-rss", + "provider": "Scottish Courts - Sheriff Court Criminal Practice Notes RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Practice. Notes. And. Directions/?Category=Sheriff+Court+Criminal", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "uk-iopc-news", + "provider": "Independent Office for Police Conduct a News", + "endpoint": "https://www.policeconduct.gov.uk/news", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "uk-parliament-home-affairs-committee", + "provider": "UK Parliament a Home Affairs Committee (News)", + "endpoint": "https://committees.parliament.uk/committee/83/home-affairs-committee/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "act-campaign", + "provider": "ACT Awareness Campaign", + "endpoint": "https://act.campaign.gov.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-contest-strategy", + "provider": "GOV.UK a CONTEST Counter-Terrorism Strategy", + "endpoint": "https://www.gov.uk/government/collections/contest", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-prevent-strategy", + "provider": "UK Home Office - Prevent duty guidance", + "endpoint": "https://www.gov.uk/government/publications/prevent-duty-guidance", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "met-office-seasonal-advice", + "provider": "Met Office - Seasonal Advice", + "endpoint": "https://www.metoffice.gov.uk/weather/warnings-and-advice/seasonal-advice", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "mi5-uk-threat-level", + "provider": "MI5 (Security Service) a UK Threat Level", + "endpoint": "https://www.mi5.gov.uk/UKThreat. Level/UKThreat. Level.xml", + "kind": "rss", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "npsa-national-protective-security-authority", + "provider": "NPSA - Activity on GOV.UK", + "endpoint": "https://www.gov.uk/government/organisations/national-protective-security-authority.atom", + "kind": "rss", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "uk-ncsc-all-rss", + "provider": "UK NCSC - All Updates RSS", + "endpoint": "https://www.ncsc.gov.uk/api/1/services/v1/all-rss-feed.xml", + "kind": "rss", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "uk-prevent-duty-guidance", + "provider": "GOV.UK a Prevent Duty Guidance (Collection)", + "endpoint": "https://www.gov.uk/government/collections/prevent-duty-guidance", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-proscribed-terrorist-orgs", + "provider": "GOV.UK a Proscribed Terrorist Organisations", + "endpoint": "https://www.gov.uk/government/publications/proscribed-terror-groups-or-organisations--2", + "kind": "html", + "lane": "sanctions", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "hm-treasury-html", + "provider": "HM Treasury", + "endpoint": "https://www.gov.uk/government/organisations/hm-treasury", + "kind": "html", + "lane": "sanctions", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "ofsi-blog-home", + "provider": "OFSI - Blog", + "endpoint": "https://ofsi.blog.gov.uk/", + "kind": "html", + "lane": "sanctions", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "dhs-press-releases", + "provider": "US Department of Homeland Security - News", + "endpoint": "https://www.dhs.gov/news", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "nsa-cybersecurity-news", + "provider": "NSA - Cybersecurity Advisories & Guidance", + "endpoint": "https://www.nsa.gov/Press-Room/Press-Releases-Statements/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "rewards-for-justice", + "provider": "U.S. Department of State - Rewards for Justice", + "endpoint": "https://rewardsforjustice.net/rewards/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "state-dept-terrorism", + "provider": "US State Department - Bureau of Counterterrorism", + "endpoint": "https://www.state.gov/bureaus-offices/under-secretary-for-civilian-security-democracy-and-human-rights/bureau-of-counterterrorism/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "cisa-cybersecurity-advisories", + "provider": "CISA - Cybersecurity Alerts & Advisories", + "endpoint": "https://www.cisa.gov/news-events/cybersecurity-advisories", + "kind": "html", + "lane": "oversight", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "us-treasury-ofac-recent-actions", + "provider": "U.S. Treasury (OFAC) - Recent Actions", + "endpoint": "https://ofac.treasury.gov/recent-actions", + "kind": "html", + "lane": "sanctions", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eurojust-press-releases", + "provider": "Eurojust - Press Releases", + "endpoint": "https://www.eurojust.europa.eu/news/press-releases", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "eu-council-jha-meetings", + "provider": "Council of the EU - JHA Press Releases", + "endpoint": "https://www.consilium.europa.eu/en/press/press-releases/?cc%5B%5D=24", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "norway-pst-news", + "provider": "Norwegian Government - News and Press Releases", + "endpoint": "https://www.regjeringen.no/en/whats-new/news-and-press-releases/id4/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "ocam-be-english", + "provider": "CUTA (Belgium) threat analysis", + "endpoint": "https://cuta.belgium.be/", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T22:54:57.851Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "everything-zany", + "provider": "Everything Zany", + "endpoint": "https://everythingzany.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "manic-mum-life", + "provider": "Manic Mum Life", + "endpoint": "https://www.manic-mumdays.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "really-ree", + "provider": "Really Ree", + "endpoint": "https://reallyree.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "my-community-alert", + "provider": "My Community Alert", + "endpoint": "https://www.mycommunityalert.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T19:28:57.337Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T11:47:27.254Z", + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastCheckedAt": "2026-04-23T11:47:27.254Z" + }, + { + "id": "uk-parliament-defence-committee", + "provider": "UK Parliament a Defence Select Committee", + "endpoint": "https://committees.parliament.uk/committee/24/defence-committee/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "curia-press-rss-en", + "provider": "Court of Justice of the European Union - RSS (EN/FR)", + "endpoint": "https://curia.europa.eu/site/rss.jsp?lang=en&second. Lang=fr", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "eu-cellar-rss-atom", + "provider": "Publications Office of the European Union (CELLAR) a RSS/Atom Feeds", + "endpoint": "https://op.europa.eu/en/web/cellar/cellar-data/rss-and-atom-feeds", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "richmond-council-news", + "provider": "Richmond Council a News", + "endpoint": "https://www.richmond.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "wandsworth-council-news", + "provider": "Wandsworth Council a News", + "endpoint": "https://www.wandsworth.gov.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "scotcourts-rss-feeds-page", + "provider": "Scottish Courts and Tribunals - RSS Feeds", + "endpoint": "https://www.scotcourts.gov.uk/rss-feeds/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "london-resilience", + "provider": "Resilience First - Latest Updates", + "endpoint": "https://www.london.gov.uk/programmes-strategies/fire-and-city-resilience/london-resilience-partnership", + "kind": "html", + "lane": "prevention", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 2, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T23:15:54.554Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T23:56:26.571Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T23:56:26.571Z", + "lastFailureAt": "2026-04-22T23:56:26.571Z", + "lastCheckedAt": "2026-04-22T23:56:26.571Z" + }, + { + "id": "echr-key-judgments-rss", + "provider": "European Court of Human Rights - Key Judgments RSS", + "endpoint": "https://hudoc.echr.coe.int/app/transform/rss?length=20&library=echreng&query=%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28+contentsitename%3AECHR+AND+%28NOT+%28doctype%3DPR+OR+doctype%3DHFCOMOLD+OR+doctype%3DHECOMOLD%29%29+AND+%28%28importance%3D%221%22%29+OR+%28importance%3D%222%22%29+OR+%28importance%3D%223%22%29%29+AND+%28%28documentcollectionid%3D%22GRANDCHAMBER%22%29+OR+%28documentcollectionid%3D%22CHAMBER%22%29+OR+%28documentcollectionid%3D%22DECGRANDCHAMBER%22%29+OR+%28documentcollectionid%3D%22ADMISSIBILITY%22%29%29%29+XRANK%28cb%3D14%29+doctypebranch%3AGRANDCHAMBER%29+XRANK%28cb%3D13%29+doctypebranch%3ADECGRANDCHAMBER%29+XRANK%28cb%3D12%29+doctypebranch%3ACHAMBER%29+XRANK%28cb%3D11%29+doctypebranch%3AADMISSIBILITY%29+XRANK%28cb%3D10%29+doctypebranch%3ACOMMITTEE%29+XRANK%28cb%3D9%29+doctypebranch%3AADMISSIBILITYCOM%29+XRANK%28cb%3D8%29+doctypebranch%3ADECCOMMISSION%29+XRANK%28cb%3D7%29+doctypebranch%3ACOMMUNICATEDCASES%29+XRANK%28cb%3D6%29+doctypebranch%3ACLIN%29+XRANK%28cb%3D5%29+doctypebranch%3AADVISORYOPINIONS%29+XRANK%28cb%3D4%29+doctypebranch%3AREPORTS%29+XRANK%28cb%3D3%29+doctypebranch%3AEXECUTION%29+XRANK%28cb%3D2%29+doctypebranch%3AMERITS%29+XRANK%28cb%3D1%29+doctypebranch%3ASCREENINGPANEL%29+XRANK%28cb%3D4%29+importance%3A1%29+XRANK%28cb%3D3%29+importance%3A2%29+XRANK%28cb%3D2%29+importance%3A3%29+XRANK%28cb%3D1%29+importance%3A4%29+XRANK%28cb%3D2%29+languageisocode%3AENG%29+XRANK%28cb%3D1%29+languageisocode%3AFRE&ranking. Model. Id=4180000c-8692-45ca-ad63-74bc4163871b&sort=kpdate+Descending&start=0", + "kind": "rss", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 400", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T17:39:27.641Z", + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastCheckedAt": "2026-04-22T17:39:27.641Z" + }, + { + "id": "judiciary-uk-news", + "provider": "Judiciary of England and Wales a News", + "endpoint": "https://www.judiciary.uk/feed/", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T11:44:44.316Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T16:17:11.443Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T16:17:11.443Z", + "lastFailureAt": "2026-04-22T16:17:11.443Z", + "lastCheckedAt": "2026-04-22T16:17:11.443Z" + }, + { + "id": "uclh-news", + "provider": "University College London Hospitals a News", + "endpoint": "https://www.uclh.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "west-yorkshire-police-coroner-appeals-rss", + "provider": "West Yorkshire Police - Coroner Appeals Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/coroner-appeals/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "thank-you-for-the-days", + "provider": "Thank you for the days", + "endpoint": "https://thankyouforthedays.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 2, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "west-yorkshire-police-news", + "provider": "West Yorkshire Police a News", + "endpoint": "https://www.westyorkshire.police.uk/news", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nhs-london-nel-news", + "provider": "NHS North East London a News", + "endpoint": "https://northeastlondon.icb.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T10:07:46.576Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-28T10:07:46.576Z", + "lastFailureAt": "2026-04-21T10:07:46.576Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "kingston-council-news", + "provider": "Kingston Council a News", + "endpoint": "https://www.kingston.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-28T08:24:19.478Z", + "lastFailureAt": "2026-04-21T08:24:19.478Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "merton-council-news", + "provider": "Merton Council a News", + "endpoint": "https://www.merton.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-28T08:24:19.478Z", + "lastFailureAt": "2026-04-21T08:24:19.478Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "north-wales-community-alert", + "provider": "North Wales Community Alert", + "endpoint": "https://www.northwalescommunityalert.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-17T05:46:58.069Z" + }, + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-20T23:15:54.554Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T23:15:54.554Z", + "lastFailureAt": "2026-04-20T23:15:54.554Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "cambridge-news", + "provider": "Cambridge News", + "endpoint": "https://www.cambridge-news.co.uk/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "deadline-news", + "provider": "Deadline News", + "endpoint": "https://www.deadlinenews.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 20 after repeated failures", + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 500", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "independent-top-stories", + "provider": "The Independent - Top Stories", + "endpoint": "https://www.independent.co.uk/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "fmcg-gurus", + "provider": "FMCG Gurus", + "endpoint": "https://fmcggurus.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "portugal-pj-news", + "provider": "Policia Judiciaria Portugal - News", + "endpoint": "https://www.policiajudiciaria.pt/noticias/", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T19:18:33.309Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T15:59:44.503Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T15:59:44.503Z", + "lastFailureAt": "2026-04-20T15:59:44.503Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "guardian-uk-top-stories", + "provider": "The Guardian - UK Top Stories", + "endpoint": "https://www.theguardian.com/uk/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-20T06:30:13.977Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 3, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T23:43:16.267Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "silly-old-sod", + "provider": "Silly Old Sod", + "endpoint": "https://www.sillyoldsod.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent timeouts — endpoint may be overloaded or unreachable", + "quarantinedAt": "2026-04-20T04:05:33.139Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-20T04:05:33.139Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T04:05:33.139Z", + "lastFailureAt": "2026-04-20T04:05:33.139Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "serious-fraud-office-news", + "provider": "Serious Fraud Office a News", + "endpoint": "https://www.gov.uk/search/news-and-communications?organisations%5B%5D=serious-fraud-office&parent=serious-fraud-office", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T04:05:33.139Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T04:05:33.139Z", + "lastFailureAt": "2026-04-20T04:05:33.139Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "a-lady-in-london", + "provider": "A Lady in London", + "endpoint": "https://www.aladyinlondon.com/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T18:05:04.781Z", + "lastFailureAt": "2026-04-19T18:05:04.781Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "cheshire-police-alert", + "provider": "Cheshire Police Alert", + "endpoint": "https://www.cheshirepolicealert.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "dc-police-community-messaging", + "provider": "Dorset and Cornwall Police - Community Messaging", + "endpoint": "https://community-messaging.dc.police.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "devon-cornwall-alerts", + "provider": "Devon and Cornwall Alerts", + "endpoint": "https://alerts.dc.police.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "south-yorkshire-police-alerts", + "provider": "South Yorkshire Police Alerts", + "endpoint": "https://www.sypalerts.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "stay-in-the-know-home", + "provider": "Stay In The Know - Community Alerts", + "endpoint": "https://www.stayintheknow.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "stay-in-the-know-latest-alerts", + "provider": "Stay In The Know - Latest Alerts", + "endpoint": "https://www.stayintheknow.co.uk/Content/Pages/Latest-Alerts", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "west-midlands-community-alerts", + "provider": "WMNow - Community Alerts", + "endpoint": "https://www.wmnow.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "west-yorkshire-community-alert", + "provider": "West Yorkshire Community Alert", + "endpoint": "https://www.wypcommunityalert.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "france24-europe-rss", + "provider": "France 24 a Europe (RSS)", + "endpoint": "https://www.france24.com/en/europe/rss", + "kind": "rss", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-19T16:03:49.134Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T16:03:49.134Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T06:12:01.477Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T05:47:56.833Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T05:47:56.833Z", + "lastFailureAt": "2026-04-23T05:47:56.833Z", + "lastCheckedAt": "2026-04-23T05:47:56.833Z" + }, + { + "id": "bbc-news-uk-politics-legacy", + "provider": "BBC News a UK Politics (Legacy RSS)", + "endpoint": "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/uk_politics/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-19T03:30:54.684Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T03:30:54.684Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T15:59:44.503Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rusi-home", + "provider": "RUSI", + "endpoint": "https://www.rusi.org/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 20 after repeated failures", + "quarantinedAt": "2026-04-19T03:30:54.684Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T03:30:54.684Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T03:30:54.684Z", + "lastFailureAt": "2026-04-19T03:30:54.684Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "gnet-youth-rss", + "provider": "Global Network on Extremism & Technology (GNET) a Youth (RSS)", + "endpoint": "https://gnet-research.org/tag/youth/feed/", + "kind": "rss", + "lane": "prevention", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T22:00:46.520Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T11:07:28.674Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T12:15:37.169Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T22:00:46.520Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T17:16:47.386Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T17:39:27.641Z", + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastCheckedAt": "2026-04-22T17:39:27.641Z" + }, + { + "id": "ealing-council-news", + "provider": "Ealing Council a News", + "endpoint": "https://www.ealing.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T21:09:53.488Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T21:09:53.488Z", + "lastFailureAt": "2026-04-18T21:09:53.488Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "eu-ejustice-news-rss", + "provider": "European e-Justice - News RSS", + "endpoint": "https://e-justice.europa.eu/rss/news_en", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-18T13:27:18.679Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T13:27:18.679Z", + "lastFailureAt": "2026-04-18T13:27:18.679Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "just-security", + "provider": "Just Security a Law, Rights & National Security", + "endpoint": "https://www.justsecurity.org/feed/", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T09:29:55.311Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T23:55:39.351Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T09:29:55.311Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T04:05:33.139Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "evening-shire", + "provider": "Evening Shire", + "endpoint": "https://eveningshire.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T07:21:41.099Z", + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "quadrant2design-exhibiting-guides", + "provider": "Quadrant2. Design Exhibiting Guides", + "endpoint": "https://www.quadrant2design.com/exhibiting-guides/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T07:21:41.099Z", + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastCheckedAt": "2026-04-23T11:47:27.254Z" + }, + { + "id": "semibold", + "provider": "Semibold", + "endpoint": "https://www.semibold.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T07:21:41.099Z", + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "gnet-radicalisation-rss", + "provider": "Global Network on Extremism & Technology (GNET) a Radicalisation (RSS)", + "endpoint": "https://gnet-research.org/tag/radicalisation/feed/", + "kind": "rss", + "lane": "prevention", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T21:08:30.446Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "barking-dagenham-council-news", + "provider": "Barking and Dagenham Council a News", + "endpoint": "https://www.lbbd.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "hammersmith-fulham-news", + "provider": "Hammersmith and Fulham Council a News", + "endpoint": "https://www.lbhf.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "royal-greenwich-news", + "provider": "Royal Borough of Greenwich a News", + "endpoint": "https://www.royalgreenwich.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-ncsc-threat-reports", + "provider": "National Cyber Security Centre (UK) a Threat Reports", + "endpoint": "https://www.ncsc.gov.uk/api/1/services/v1/report-rss-feed.xml", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T21:08:30.446Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-parliament-isc", + "provider": "UK Parliament a Intelligence and Security Committee (Reports & News)", + "endpoint": "https://isc.independent.gov.uk/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ecfr-feeds-index", + "provider": "ECFR - Feeds", + "endpoint": "https://ecfr.eu/feeds/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "statewatch-news", + "provider": "Statewatch - News", + "endpoint": "https://www.statewatch.org/news/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "clingendael-publications", + "provider": "Clingendael Institute a Publications", + "endpoint": "https://www.clingendael.org/publications", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ecfr-publications", + "provider": "European Council on Foreign Relations (ECFR) a Publications", + "endpoint": "https://ecfr.eu/publications/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "financial-times-world", + "provider": "Financial Times a World", + "endpoint": "https://www.ft.com/world", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 2, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "politico-europe", + "provider": "Politico Europe", + "endpoint": "https://www.politico.eu/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "acled-updates", + "provider": "ACLED a Updates and Analysis", + "endpoint": "https://acleddata.com/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "resolve-network-research", + "provider": "RESOLVE Network a Research", + "endpoint": "https://www.resolvenet.org/news", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 17 after repeated failures", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 503", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "reuters-uk", + "provider": "Reuters a UK News", + "endpoint": "https://www.reuters.com/world/uk/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "soufan-center-intelbrief", + "provider": "The Soufan Center a Intel. Brief", + "endpoint": "https://thesoufancenter.org/category/intelbrief/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "tony-blair-institute-news", + "provider": "Tony Blair Institute for Global Change a Publications", + "endpoint": "https://institute.global/insights", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "chatham-house-home", + "provider": "Chatham House", + "endpoint": "https://www.chathamhouse.org/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "chatham-house-security-defence", + "provider": "Chatham House - Security and Defence", + "endpoint": "https://www.chathamhouse.org/topics/security-and-defence", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "institute-global-home", + "provider": "Institute for Global Change", + "endpoint": "https://www.institute.global/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "wiltshire-999s", + "provider": "Wiltshire 999s", + "endpoint": "https://www.wiltshire999s.co.uk/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "icsr-kcl", + "provider": "International Centre for the Study of Radicalisation (ICSR) a Updates", + "endpoint": "https://icsr.info/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rand-terrorism-topic", + "provider": "RAND - Terrorism Topic Updates", + "endpoint": "https://www.rand.org/topics/terrorism.html", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "start-baad-database", + "provider": "National Consortium for the Study of Terrorism (START) - Big Allied and Dangerous (BAAD) Database", + "endpoint": "https://www.start.umd.edu/baad/database/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "start-center-publications", + "provider": "START Center (UMD) - News & Publications", + "endpoint": "https://www.start.umd.edu/news", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "bdk-rss", + "provider": "Bund Deutscher Kriminalbeamter - RSS", + "endpoint": "https://www.bdk.de/rss/alle-nachrichten/RSS", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "euractiv-security-rss", + "provider": "BBC News - Europe", + "endpoint": "https://feeds.bbci.co.uk/news/world/europe/rss.xml", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "isd-global-publications", + "provider": "ISD - Publications", + "endpoint": "https://www.isdglobal.org/publications/", + "kind": "html", + "lane": "prevention", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "dw-europe-rss", + "provider": "Deutsche Welle a Europe (RSS)", + "endpoint": "https://rss.dw.com/rdf/rss-en-eu", + "kind": "rss", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "ap-top-news", + "provider": "BBC News - Top Stories", + "endpoint": "https://feeds.bbci.co.uk/news/rss.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "crisis-group", + "provider": "International Crisis Group a Research & Analysis", + "endpoint": "https://www.crisisgroup.org/rss.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "crisis-group-europe", + "provider": "International Crisis Group a Europe (RSS)", + "endpoint": "https://www.crisisgroup.org/rss/56", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "lawfare-blog", + "provider": "Just Security - National Security Analysis", + "endpoint": "https://www.justsecurity.org/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "henry-jackson-society-news", + "provider": "RUSI - Terrorism and Conflict", + "endpoint": "https://www.rusi.org/explore-our-research/research-groups/terrorism-and-conflict?source=henry-jackson-society-news", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun-all", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feeds/all/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun-all-english", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feeds/news-app-english-001-all/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun-homepage", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feeds/favourite-homepage/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun-news-english", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feeds/news-app-english-007-news/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "metro", + "provider": "BBC News - UK", + "endpoint": "https://feeds.bbci.co.uk/news/uk/rss.xml?source=metro", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "pinknews", + "provider": "Pink. News", + "endpoint": "https://www.pinknews.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T13:19:06.686Z", + "lastFailureAt": "2026-04-19T13:19:06.686Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "the-daily-mash", + "provider": "The Daily Mash", + "endpoint": "https://www.thedailymash.co.uk/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T13:19:06.686Z", + "lastFailureAt": "2026-04-19T13:19:06.686Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "the-scottish-sun", + "provider": "The Scottish Sun", + "endpoint": "https://www.thescottishsun.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "elluminet-press", + "provider": "9to5. Mac", + "endpoint": "https://9to5mac.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 20 after repeated failures", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "faded-spring", + "provider": "Emily Underworld", + "endpoint": "https://emilyunderworld.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "ian-neate-blog", + "provider": "9to5. Mac", + "endpoint": "https://9to5mac.com/feed/?source=ian-neate-blog", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "sks-business-services", + "provider": "SKS Business Services", + "endpoint": "https://www.sksbusinessservices.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "streetspace", + "provider": "Streetspace", + "endpoint": "https://streetspacegroup.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "police-scotland-news", + "provider": "Police Scotland news", + "endpoint": "https://www.scotland.police.uk/what-s-happening/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 23 after repeated failures", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T19:32:35.264Z", + "lastFailureAt": "2026-04-19T19:32:35.264Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "frontex-news-releases", + "provider": "Frontex a News Releases", + "endpoint": "https://www.frontex.europa.eu/media-centre/news/news-release/", + "kind": "html", + "lane": "border", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "enisa-news", + "provider": "ENISA (EU Cybersecurity Agency) a News", + "endpoint": "https://www.enisa.europa.eu/news", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "enisa-rss-transition-page", + "provider": "ENISA - RSS Feeds Transition Notice", + "endpoint": "https://www.enisa.europa.eu/rss-feeds-discontinued-new-subscription-mechanism-coming-soon", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eurojust-press-news-html", + "provider": "Eurojust - Press Releases and News", + "endpoint": "https://www.eurojust.europa.eu/media-and-events/press-releases-and-news", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "europol-media-press", + "provider": "Europol a Media and Press", + "endpoint": "https://www.europol.europa.eu/media-press", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "europol-newsroom-html", + "provider": "Europol - Newsroom", + "endpoint": "https://www.europol.europa.eu/media-press/newsroom", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "finland-supo-news", + "provider": "Finnish Security Intelligence Service - News", + "endpoint": "https://supo.fi/en/current-issues", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "german-interior-ministry-press", + "provider": "German Federal Ministry for Economic Cooperation and Development - Feed", + "endpoint": "https://www.bmz.de/en/feed.rss", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 20 after repeated failures", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 400", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "paris-prefecture-police-rss-page", + "provider": "Paris Prefecture of Police - RSS", + "endpoint": "https://www.prefecturedepolice.interieur.gouv.fr/presentation/les-directions-et-services/le-cabinet-du-prefet-de-police/service-de-la-communication/abonnez-vous-aux-flux-rss", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "spain-interior-ministry-news", + "provider": "Spanish Ministry of the Interior - Press", + "endpoint": "https://www.interior.gob.es/opencms/en/prensa/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "ertzaintza-news", + "provider": "Ertzaintza - News", + "endpoint": "https://www.ertzaintza.euskadi.eus/lfr/eu/webertzaintza/noticias", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "finland-police-news", + "provider": "Finnish Police - News", + "endpoint": "https://poliisi.fi/en/news", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "paris-prefecture-police-press-releases", + "provider": "Paris Prefecture of Police - Press Releases", + "endpoint": "https://www.prefecturedepolice.interieur.gouv.fr/actualites-et-presse/communiques-de-presse/communiques-de-presse", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "romanian-police-news", + "provider": "Romanian Police - News", + "endpoint": "https://www.politiaromana.ro/en/news", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eu-commission-presscorner-home", + "provider": "Council of the EU - Press Releases (RSS)", + "endpoint": "https://www.consilium.europa.eu/en/rss/pressreleases.ashx?source=eu-commission-presscorner-home", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "eu-council-fight-against-terrorism", + "provider": "Council of the EU - Fight Against Terrorism", + "endpoint": "https://www.consilium.europa.eu/en/policies/fight-against-terrorism/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eu-council-rss-index", + "provider": "Council of the EU - RSS Index", + "endpoint": "https://www.consilium.europa.eu/en/about-site/rss/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eu-ct-coordinator", + "provider": "EU Counter-Terrorism Coordinator a Council of the EU", + "endpoint": "https://www.consilium.europa.eu/en/policies/fight-against-terrorism/eu-counter-terrorism-coordinator/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eu-fra-rss", + "provider": "EU Agency for Fundamental Rights (FRA) a RSS", + "endpoint": "https://fra.europa.eu/en/content/rss", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eurojust-rss-feeds-page", + "provider": "Eurojust - RSS Feeds", + "endpoint": "https://www.eurojust.europa.eu/rss-feeds", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "europol-tesat-report", + "provider": "Europol - TESAT Report", + "endpoint": "https://www.europol.europa.eu/publications-events/main-reports/tesat-report", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "fra-rss", + "provider": "Human Rights Watch - News RSS", + "endpoint": "https://www.hrw.org/rss/news", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "europol-eu-iru", + "provider": "Europol a EU Internet Referral Unit (EU IRU)", + "endpoint": "https://www.europol.europa.eu/about-europol/european-counter-terrorism-centre-ectc/eu-internet-referal-unit-eu-iru", + "kind": "html", + "lane": "prevention", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ncsc-nl-rss", + "provider": "NCSC Netherlands - RSS", + "endpoint": "https://feeds.ncsc.nl/nieuws.rss", + "kind": "rss", + "lane": "prevention", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "eu-council-terrorism-sanctions", + "provider": "Council of the EU - Sanctions Against Terrorism", + "endpoint": "https://www.consilium.europa.eu/en/policies/sanctions-against-terrorism/", + "kind": "html", + "lane": "sanctions", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "unhcr-europe-news", + "provider": "UNHCR Europe a News", + "endpoint": "https://www.unhcr.org/europe/news", + "kind": "html", + "lane": "border", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "french-interior-ministry-news", + "provider": "French Ministry of the Interior - News", + "endpoint": "https://www.interieur.gouv.fr/actualites", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "netherlands-nctv-news", + "provider": "Dutch NCTV - News", + "endpoint": "https://www.nctv.nl/actueel", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "french-gendarmerie-news", + "provider": "Gendarmerie Nationale - News", + "endpoint": "https://www.gendarmerie.interieur.gouv.fr/gendarmerie/actualites", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "french-police-nationale-news", + "provider": "Police Nationale - News", + "endpoint": "https://www.police-nationale.interieur.gouv.fr/actualites", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ireland-gardai-press", + "provider": "An Garda Siochana - Press Releases", + "endpoint": "https://www.garda.ie/en/about-us/our-departments/office-of-corporate-communications/press-releases/", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "paris-police-prefecture-news", + "provider": "France24 - France (RSS)", + "endpoint": "https://www.france24.com/en/france/rss", + "kind": "rss", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "portugal-psp-news", + "provider": "The Portugal News - Crime", + "endpoint": "https://www.theportugalnews.com/news/crime", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "coe-counter-terrorism", + "provider": "Council of Europe a Counter-Terrorism", + "endpoint": "https://www.coe.int/en/web/counter-terrorism/news-updates", + "kind": "html", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "netherlands-prosecution-news", + "provider": "Dutch Public Prosecution Service - News", + "endpoint": "https://www.om.nl/actueel/nieuws", + "kind": "html", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "pst-no-english", + "provider": "PST (Norway) English reporting page", + "endpoint": "https://www.pst.no/en/report/", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ran-network", + "provider": "RUSI - Terrorism and Conflict", + "endpoint": "https://www.rusi.org/explore-our-research/research-groups/terrorism-and-conflict?source=ran-network", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "supo-fi-english", + "provider": "SUPO Finland news and press releases", + "endpoint": "https://supo.fi/en/news-and-press-releases", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "iom-news", + "provider": "IOM (International Organization for Migration) a News", + "endpoint": "https://www.iom.int/news", + "kind": "html", + "lane": "border", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "unsc-counter-terrorism-committee", + "provider": "UN Security Council - Counter-Terrorism Committee (CTC) Updates", + "endpoint": "https://www.un.org/securitycouncil/ctc/news", + "kind": "html", + "lane": "oversight", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "fatf-news", + "provider": "Financial Action Task Force (FATF) a News", + "endpoint": "https://www.fatf-gafi.org/en/publications.html", + "kind": "html", + "lane": "sanctions", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "interpol-notices", + "provider": "INTERPOL a Notices", + "endpoint": "https://www.interpol.int/How-we-work/Notices", + "kind": "html", + "lane": "sanctions", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "unsc-1267-press-releases", + "provider": "UN Security Council - ISIL/Da'esh & Al-Qaeda Sanctions Committee Press Releases", + "endpoint": "https://main.un.org/securitycouncil/en/sanctions/1267/press-releases", + "kind": "html", + "lane": "sanctions", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "unsc-consolidated-list", + "provider": "UN Security Council - Consolidated Sanctions List Updates (RSS)", + "endpoint": "https://main.un.org/securitycouncil/en/rss-updates-unsc-consolidated-list", + "kind": "rss", + "lane": "sanctions", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "barnet-council-news", + "provider": "Barnet Post", + "endpoint": "https://barnetpost.co.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "city-of-london-police-fraud-reporting", + "provider": "City of London Police - Fraud Reporting", + "endpoint": "https://www.cityoflondon.police.uk/ro/report/fo/v1/fraud/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cnwl-news", + "provider": "Central and North West London NHS Foundation Trust a News", + "endpoint": "https://www.cnwl.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "east-london-nhs-news", + "provider": "East London NHS Foundation Trust a News", + "endpoint": "https://www.elft.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "enfield-council-news", + "provider": "Enfield Council a News and Events", + "endpoint": "https://www.enfield.gov.uk/news-and-events", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "haringey-council-news", + "provider": "Haringey Community Press", + "endpoint": "https://haringeycommunitypress.co.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "harrow-council-news", + "provider": "Harrow Council a News", + "endpoint": "https://www.harrow.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "heathrow-media-centre", + "provider": "Heathrow a Media Centre", + "endpoint": "https://mediacentre.heathrow.com/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "imperial-healthcare-news", + "provider": "Imperial College Healthcare NHS Trust a News", + "endpoint": "https://www.imperial.nhs.uk/about-us/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "kensington-chelsea-newsroom", + "provider": "Royal Borough of Kensington and Chelsea a Newsroom", + "endpoint": "https://www.rbkc.gov.uk/newsroom", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "lewisham-council-news", + "provider": "Salamander News", + "endpoint": "https://salamandernews.org/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "london-ambulance-news", + "provider": "London Ambulance Service a News", + "endpoint": "https://www.londonambulance.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-city-airport-media-centre", + "provider": "London City Airport a Media Centre", + "endpoint": "https://www.londoncityairport.com/corporate/media-centre", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-councils-news", + "provider": "London Councils a News", + "endpoint": "https://www.londoncouncils.gov.uk/news-and-press-releases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-fire-brigade-news", + "provider": "London Fire Brigade a News", + "endpoint": "https://www.london-fire.gov.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-gov-home", + "provider": "London.gov.uk", + "endpoint": "https://www.london.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-gov-press-releases-html", + "provider": "London.gov.uk - Press Releases", + "endpoint": "https://www.london.gov.uk/press-releases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nhs-london-ncl-news", + "provider": "NHS North Central London a News", + "endpoint": "https://nclhealthandcare.org.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nhs-london-swl-news", + "provider": "NHS South West London a News", + "endpoint": "https://www.southwestlondon.icb.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "north-middlesex-news", + "provider": "North Middlesex University Hospital a News", + "endpoint": "https://www.northmid.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "port-of-london-authority-news", + "provider": "Port of London Authority a News", + "endpoint": "https://pla.co.uk/News", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "royal-free-london-news", + "provider": "Royal Free London NHS Foundation Trust a News", + "endpoint": "https://www.royalfree.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "southwark-newsroom", + "provider": "Southwark Council a Newsroom", + "endpoint": "https://news.southwark.gov.uk/newsroom/news/rss", + "kind": "rss", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "tavistock-portman-news", + "provider": "Tavistock and Portman NHS Foundation Trust a News", + "endpoint": "https://tavistockandportman.nhs.uk/about-us/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "tfl-press-releases", + "provider": "Transport for London - Press Releases", + "endpoint": "https://tfl.gov.uk/info-for/media/press-releases?source=tfl-press-releases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "tfl-press-releases-html", + "provider": "Transport for London - Press Releases", + "endpoint": "https://tfl.gov.uk/info-for/media/press-releases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "city-of-london-police-news", + "provider": "National Crime Agency - News", + "endpoint": "https://www.nationalcrimeagency.gov.uk/news?source=city-of-london-police-news", + "kind": "html", + "lane": "incidents", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "city-of-london-police-news-html", + "provider": "City of London Police - News", + "endpoint": "https://www.cityoflondon.police.uk/news/city-of-london-police/news/", + "kind": "html", + "lane": "incidents", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "city-of-london-police-newsroom", + "provider": "Metropolitan Police Service - News", + "endpoint": "https://news.met.police.uk/", + "kind": "html", + "lane": "incidents", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "ct-policing-london", + "provider": "Counter Terrorism Policing London", + "endpoint": "https://www.counterterrorism.police.uk/counter-terrorism-policing-london/", + "kind": "html", + "lane": "incidents", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "mopac-html", + "provider": "Mayor's Office for Policing and Crime", + "endpoint": "https://www.london.gov.uk/programmes-strategies/mayors-office-policing-and-crime-mopac", + "kind": "html", + "lane": "oversight", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "bbc-news-front-page-legacy", + "provider": "BBC News a Front Page (Legacy RSS)", + "endpoint": "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T22:12:37.099Z", + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bbc-news-uk", + "provider": "BBC News a UK", + "endpoint": "https://feeds.bbci.co.uk/news/uk/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T22:12:37.099Z", + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "essex-police-news", + "provider": "Essex Police a News", + "endpoint": "https://www.essex.police.uk/news/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "kent-police-news", + "provider": "Kent Police a News", + "endpoint": "https://www.kent.police.uk/news/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "mi5-news", + "provider": "National Crime Agency - News", + "endpoint": "https://www.nationalcrimeagency.gov.uk/news?source=mi5-news", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "national-crime-agency-news", + "provider": "National Crime Agency a News", + "endpoint": "https://www.nationalcrimeagency.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "report-fraud-home", + "provider": "Report Fraud", + "endpoint": "https://www.reportfraud.police.uk/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "report-fraud-newsroom", + "provider": "Report Fraud - Newsroom", + "endpoint": "https://www.reportfraud.police.uk/collection/newsroom/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "church-of-england-newspaper", + "provider": "Church of England Newspaper", + "endpoint": "https://www.churchnewspaper.com/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T22:12:37.099Z", + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bedfordshire-police-news", + "provider": "Bedfordshire Police - News", + "endpoint": "https://www.beds.police.uk/news/bedfordshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "bedfordshire-police-news-search", + "provider": "Bedfordshire Police - News Search", + "endpoint": "https://www.beds.police.uk/news/news-search/?ct=News", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "british-transport-police-news", + "provider": "British Transport Police Authority - News Feed", + "endpoint": "https://btpa.police.uk/feed/", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "btp-british-transport-police-news-html", + "provider": "British Transport Police - News", + "endpoint": "https://www.btp.police.uk/news/british-transport-police/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cambridgeshire-police-news-search", + "provider": "Cambridgeshire Police - News Search", + "endpoint": "https://www.cambs.police.uk/news/news-search/?ct=News", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cheshire-police-news", + "provider": "Cheshire Constabulary - News", + "endpoint": "https://www.cheshire.police.uk/news/cheshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cleveland-police-news", + "provider": "Cleveland Police - News", + "endpoint": "https://www.cleveland.police.uk/news/cleveland/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cps-news-centre", + "provider": "Crown Prosecution Service a News Centre", + "endpoint": "https://www.cps.gov.uk/news", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-north-west", + "provider": "Counter Terrorism Policing North West", + "endpoint": "https://www.counterterrorism.police.uk/north-west/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-uk-latest-news", + "provider": "Counter Terrorism Policing UK a Latest News", + "endpoint": "https://www.counterterrorism.police.uk/latest-news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-uk-rss-feed", + "provider": "Counter Terrorism Policing UK - Latest News", + "endpoint": "https://www.counterterrorism.police.uk/latest-news/?source=ct-policing-uk-rss-feed", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "cumbria-police-news", + "provider": "Cumbria Police - News", + "endpoint": "https://www.cumbria.police.uk/news/cumbria/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cumbria-police-newsroom", + "provider": "Cumbria Police - Newsroom", + "endpoint": "https://www.news.cumbria.police.uk/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "derbyshire-police-news", + "provider": "Derbyshire Police - News", + "endpoint": "https://www.derbyshire.police.uk/news/derbyshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "devon-and-cornwall-police-newsroom", + "provider": "Devon and Cornwall Police - Newsroom", + "endpoint": "https://news.devon-cornwall.police.uk/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "devon-cornwall-police-news", + "provider": "Devon and Cornwall Police - News", + "endpoint": "https://www.devon-cornwall.police.uk/news/devon-cornwall/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "dorset-police-news", + "provider": "Dorset Police - News", + "endpoint": "https://www.dorset.police.uk/news/dorset/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "dorset-police-newsroom", + "provider": "Dorset Police - Newsroom", + "endpoint": "https://news.dorset.police.uk/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "durham-constabulary-news", + "provider": "Durham Constabulary a News", + "endpoint": "https://www.durham.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "durham-police-durham-news", + "provider": "Durham Police - Durham News", + "endpoint": "https://www.durham.police.uk/news/durham/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "dyfed-powys-police-news", + "provider": "Dyfed-Powys Police - News", + "endpoint": "https://www.dyfed-powys.police.uk/news/dyfed-powys/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "essex-police-news-html", + "provider": "Essex Police - News", + "endpoint": "https://www.essex.police.uk/news/essex/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gloucestershire-police-news", + "provider": "Gloucestershire Police - News", + "endpoint": "https://www.gloucestershire.police.uk/news/gloucestershire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gmp-news", + "provider": "Greater Manchester Police a News", + "endpoint": "https://www.gmp.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "greater-manchester-police-news", + "provider": "Greater Manchester Police - News", + "endpoint": "https://www.gmp.police.uk/news/greater-manchester/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gwent-police-news", + "provider": "Gwent Police - News", + "endpoint": "https://www.gwent.police.uk/news/gwent/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "hampshire-police-news", + "provider": "Hampshire & Isle of Wight Constabulary a News", + "endpoint": "https://www.hampshire.police.uk/news/hampshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "hertfordshire-police-news", + "provider": "Hertfordshire Constabulary a News", + "endpoint": "https://www.herts.police.uk/news/hertfordshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "humberside-police-news-search", + "provider": "Humberside Police - News Search", + "endpoint": "https://www.humberside.police.uk/news/news-search/?ct=News", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "kent-police-news-html", + "provider": "Kent Police - News", + "endpoint": "https://www.kent.police.uk/news/kent/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "lancashire-constabulary-news", + "provider": "Lancashire Constabulary a News", + "endpoint": "https://www.lancashire.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "leicestershire-police-news", + "provider": "National Crime Agency - News", + "endpoint": "https://www.nationalcrimeagency.gov.uk/news?source=leicestershire-police-news", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "lincolnshire-police-news", + "provider": "Lincolnshire Police - News", + "endpoint": "https://www.lincs.police.uk/news/lincolnshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "merseyside-police-news", + "provider": "Merseyside Police a News", + "endpoint": "https://www.merseyside.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "merseyside-police-news-html", + "provider": "Merseyside Police - News", + "endpoint": "https://www.merseyside.police.uk/news/merseyside-police/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "norfolk-constabulary-news", + "provider": "Norfolk Constabulary - News", + "endpoint": "https://www.norfolk.police.uk/news/norfolk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "north-wales-police-news", + "provider": "North Wales Police - News", + "endpoint": "https://www.northwales.police.uk/news/north-wales/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "north-yorkshire-police-news-html", + "provider": "North Yorkshire Police - News", + "endpoint": "https://www.northyorkshire.police.uk/news/north-yorkshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "northamptonshire-police-news-html", + "provider": "Northamptonshire Police - News", + "endpoint": "https://www.northants.police.uk/news/northants/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "northumbria-police-news", + "provider": "North East Bylines", + "endpoint": "https://northeastbylines.co.uk/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "northumbria-police-northumbria-news", + "provider": "Northumbria Police - Northumbria News", + "endpoint": "https://www.northumbria.police.uk/news/northumbria/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nottinghamshire-police-news", + "provider": "Nottinghamshire Police a News", + "endpoint": "https://www.nottinghamshire.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nottinghamshire-police-nottinghamshire-news", + "provider": "Nottinghamshire Police - Nottinghamshire News", + "endpoint": "https://www.nottinghamshire.police.uk/news/nottinghamshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "psni-news", + "provider": "Police Service of Northern Ireland a News", + "endpoint": "https://www.psni.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "south-wales-police-news", + "provider": "South Wales Police - News", + "endpoint": "https://www.south-wales.police.uk/news/south-wales/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "south-yorkshire-police-news", + "provider": "South Yorkshire Police a News", + "endpoint": "https://www.southyorkshire.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "staffordshire-police-news", + "provider": "Staffordshire Police a News", + "endpoint": "https://www.staffordshire.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "staffordshire-police-staffordshire-news", + "provider": "Staffordshire Police - Staffordshire News", + "endpoint": "https://www.staffordshire.police.uk/news/staffordshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "suffolk-constabulary-news", + "provider": "Suffolk Constabulary - News", + "endpoint": "https://www.suffolk.police.uk/news/suffolk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "surrey-police-news", + "provider": "Surrey Police a News", + "endpoint": "https://www.surrey.police.uk/news/surrey/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "sussex-police-news", + "provider": "Sussex Police a News", + "endpoint": "https://www.sussex.police.uk/news/sussex/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "thames-valley-police-news", + "provider": "Thames Valley Police a News", + "endpoint": "https://www.thamesvalley.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "thames-valley-police-news-html", + "provider": "Thames Valley Police - Thames Valley News", + "endpoint": "https://www.thamesvalley.police.uk/news/thames-valley/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "warwickshire-police-news", + "provider": "Warwickshire Connected - Latest Alerts", + "endpoint": "https://www.warwickshireconnected.com/Content/Pages/Latest-Alerts", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 2, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "west-mercia-police-news-html", + "provider": "West Mercia Police - News", + "endpoint": "https://www.westmercia.police.uk/news/west-mercia/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "west-midlands-police-news", + "provider": "West Midlands Police a News", + "endpoint": "https://www.westmidlands.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "west-yorkshire-police-missing-rss", + "provider": "West Yorkshire Police - Missing Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/missing/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "wiltshire-police-news", + "provider": "Wiltshire Police - News", + "endpoint": "https://www.wiltshire.police.uk/news/wiltshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cps-homepage", + "provider": "Crown Prosecution Service", + "endpoint": "https://www.cps.gov.uk/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gov-uk-hmic", + "provider": "HM Inspectorate of Constabulary a GOV.UK", + "endpoint": "https://hmicfrs.justiceinspectorates.gov.uk/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gov-uk-parliament-jcnss", + "provider": "UK Parliament a Joint Committee on National Security Strategy", + "endpoint": "https://committees.parliament.uk/committee/54/joint-committee-on-the-national-security-strategy/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "lords-in-focus-rss", + "provider": "Hansard Society - Despatch Box", + "endpoint": "https://www.hansardsociety.org.uk/blog", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "lords-library-notes-rss", + "provider": "Hansard Society - Despatch Box", + "endpoint": "https://www.hansardsociety.org.uk/blog?source=lords-library-notes-rss", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "police-ombudsman-current-investigations", + "provider": "Police Ombudsman - Current Investigations", + "endpoint": "https://www.policeombudsman.org/investigation-reports/current-investigations", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "police-uk-outcomes-at-location-1609590", + "provider": "Police Data UK - Outcomes At Location API Docs", + "endpoint": "https://data.police.uk/docs/method/outcomes-at-location/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "uk-parliament-business-news", + "provider": "UK Parliament - Business News", + "endpoint": "https://www.parliament.uk/business/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-parliament-foreign-affairs-committee", + "provider": "UK Parliament a Foreign Affairs Select Committee", + "endpoint": "https://committees.parliament.uk/committee/78/foreign-affairs-committee/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-parliament-justice-committee", + "provider": "UK Parliament a Justice Select Committee", + "endpoint": "https://committees.parliament.uk/committee/102/justice-committee/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-prevent-programme", + "provider": "Counter Terrorism Policing - Prevent", + "endpoint": "https://www.counterterrorism.police.uk/what-we-do/counter-terrorism/prevent/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-what-you-can-do", + "provider": "Counter Terrorism Policing - What You Can Do", + "endpoint": "https://www.counterterrorism.police.uk/what-you-can-do/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gov-uk-report-terrorism", + "provider": "GOV.UK - Report Terrorism", + "endpoint": "https://www.gov.uk/report-terrorism", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gov-uk-terrorism-national-emergency", + "provider": "GOV.UK - Terrorism National Emergency", + "endpoint": "https://www.gov.uk/terrorism-national-emergency", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "mi5-terrorism-threat-levels", + "provider": "MI5 - Terrorism Threat Levels", + "endpoint": "https://www.mi5.gov.uk/threats-and-advice/terrorism-threat-levels", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "northamptonshire-talking", + "provider": "Northamptonshire Talking", + "endpoint": "https://www.northamptonshiretalking.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "npsa-blog", + "provider": "NPSA - Blog", + "endpoint": "https://www.npsa.gov.uk/blog", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "npsa-blog-news", + "provider": "NPSA - Blog News", + "endpoint": "https://www.npsa.gov.uk/blog/news", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "protectuk", + "provider": "ProtectUK (NPSA) a Protective Security Guidance", + "endpoint": "https://www.protectuk.police.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-ncsc-homepage", + "provider": "UK NCSC - Homepage", + "endpoint": "https://www.ncsc.gov.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-sanctions-list", + "provider": "UK Sanctions List (FCDO) a Consolidated List (XML Service)", + "endpoint": "https://sanctionslist.fcdo.gov.uk/docs/UK-Sanctions-List.xml", + "kind": "html", + "lane": "sanctions", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "fbi-national-press-releases", + "provider": "FBI - National Press Releases (RSS)", + "endpoint": "https://www.fbi.gov/feeds/national-press-releases/RSS", + "kind": "rss", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "fbi-stories", + "provider": "FBI - Top Stories (RSS)", + "endpoint": "https://www.fbi.gov/feeds/fbi-top-stories/rss.xml", + "kind": "rss", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "fbi-top-stories", + "provider": "FBI - Top Stories (RSS)", + "endpoint": "https://www.fbi.gov/feeds/fbi-top-stories/rss.xml?source=fbi-top-stories", + "kind": "rss", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "us-house-homeland-security", + "provider": "US House Committee on Homeland Security - News", + "endpoint": "https://homeland.house.gov/news/", + "kind": "html", + "lane": "oversight", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "belgium-crisis-centre-news", + "provider": "Belgian National Crisis Centre - Newsroom", + "endpoint": "https://crisiscenter.be/en/newsroom", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 5 after repeated failures", + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "german-bka-press", + "provider": "German BKA - Press Releases (2026 archive)", + "endpoint": "https://www.bka.de/DE/Presse/Listenseite_Pressemitteilungen/2026/2026_node.html", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 5 after repeated failures", + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "policia-nacional-news", + "provider": "Policia Nacional - Press", + "endpoint": "https://www.policia.es/_es/comunicacion_salaprensa.php", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 5 after repeated failures", + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-19T18:05:04.781Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T18:05:04.781Z", + "lastFailureAt": "2026-04-19T18:05:04.781Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "bfv-de-english", + "provider": "BfV service page (Federal Office for the Protection of the Constitution)", + "endpoint": "https://www.verfassungsschutz.de/EN/service/service_node.html", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T11:07:28.674Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T11:07:28.674Z", + "lastFailureAt": "2026-04-17T11:07:28.674Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "german-bka-press-releases-de", + "provider": "BKA Germany - Press Releases", + "endpoint": "https://www.bka.de/DE/Aktuelle. Informationen/Aktuelle. Meldungen/Pressemeldungen/pressemitteilungen_node.html", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Infrastructure instability — mixed timeout and network errors; auto-retry likely to recover", + "quarantinedAt": "2026-04-17T08:04:04.612Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T07:32:24.475Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T17:39:27.641Z", + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastCheckedAt": "2026-04-22T17:39:27.641Z" + }, + { + "id": "surgezirc-uk", + "provider": "Surge. Zirc UK", + "endpoint": "https://surgezirc.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T08:04:04.612Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T14:11:10.963Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T11:47:27.254Z", + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastCheckedAt": "2026-04-23T11:47:27.254Z" + }, + { + "id": "arcticdry", + "provider": "Arctic. Dry", + "endpoint": "https://www.arcticdry.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T08:04:04.612Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T08:04:04.612Z", + "lastFailureAt": "2026-04-17T08:04:04.612Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "police-uk-all-crime-leicester", + "provider": "Police.uk - Street Crime Around Leicester", + "endpoint": "https://data.police.uk/api/crimes-street/all-crime?lat=52.629729&lng=-1.131592", + "kind": "json", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T23:55:39.351Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-23T23:55:39.351Z", + "lastFailureAt": "2026-04-16T23:55:39.351Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "daily-mail-online", + "provider": "Daily Mail Online - Popular Stories", + "endpoint": "https://www.dailymail.co.uk/home/index.rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T23:55:39.351Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-23T23:55:39.351Z", + "lastFailureAt": "2026-04-16T23:55:39.351Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "counter-extremism-project-news", + "provider": "Counter Extremism Project a News", + "endpoint": "https://www.counterextremism.com/news-and-media", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T12:14:24.733Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rusi-terrorism-conflict", + "provider": "RUSI - Terrorism and Conflict", + "endpoint": "https://www.rusi.org/explore-our-research/research-groups/terrorism-and-conflict", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T12:14:24.733Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T12:14:24.733Z", + "lastFailureAt": "2026-04-20T12:14:24.733Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-counter-extremism-commissioner", + "provider": "Counter Extremism Commissioner a GOV.UK", + "endpoint": "https://www.govwire.co.uk/rss/commission-for-countering-extremism", + "kind": "rss", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T19:01:30.233Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-23T19:01:30.233Z", + "lastFailureAt": "2026-04-16T19:01:30.233Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "denmark-pet-news", + "provider": "Danish Security and Intelligence Service - News", + "endpoint": "https://pet.dk/aktuelt/nyhedsliste", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "german-bfv-news", + "provider": "German BfV - Press", + "endpoint": "https://www.verfassungsschutz.de/EN/service/press/press_node.html", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nctv-english-rss", + "provider": "NCTV Netherlands - English RSS", + "endpoint": "https://english.nctv.nl/latest/news", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "belgian-federal-police-news", + "provider": "Belgian Federal Police - News", + "endpoint": "https://www.police.be/5998/en/node/10868", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T11:47:27.254Z", + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastCheckedAt": "2026-04-23T11:47:27.254Z" + }, + { + "id": "czech-police-news", + "provider": "Police of the Czech Republic - News", + "endpoint": "https://policie.gov.cz/clanek/Police-of-the-Czech-Republic.aspx", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "guardia-civil-news", + "provider": "El Pais English - Guardia Civil", + "endpoint": "https://english.elpais.com/news/guardia-civil/", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "switzerland-fedpol-news", + "provider": "Swiss fedpol - News", + "endpoint": "https://www.fedpol.admin.ch/en/newnsb", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T21:59:30.032Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T21:59:30.032Z", + "lastFailureAt": "2026-04-22T21:59:30.032Z", + "lastCheckedAt": "2026-04-22T21:59:30.032Z" + }, + { + "id": "pet-dk-english", + "provider": "PET (Denmark) a English News", + "endpoint": "https://pet.dk/en/news-and-publications/news-list", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nato-news-rss", + "provider": "NATO a News (RSS)", + "endpoint": "https://www.nato.int/en/news-and-events/articles/news", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "occrp-news", + "provider": "OCCRP a Organized Crime and Corruption Reporting Project", + "endpoint": "https://www.occrp.org/en/announcements", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rferl-security-news-rss", + "provider": "Radio Free Europe/Radio Liberty a Security (RSS)", + "endpoint": "https://www.rferl.org/latest-news", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T08:39:19.161Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "unodc-news", + "provider": "UNODC (UN Office on Drugs and Crime) a Press Releases", + "endpoint": "https://www.unodc.org/unodc/en/news/news.html", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gctf-news", + "provider": "Global Counterterrorism Forum (GCTF) a News", + "endpoint": "https://www.thegctf.org/News-Stories/PgrID/918/PageID/3", + "kind": "html", + "lane": "oversight", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T04:05:33.139Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "barts-health-news", + "provider": "Barts Health NHS Trust a News", + "endpoint": "https://www.bartshealth.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T08:09:12.931Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T08:09:12.931Z", + "lastFailureAt": "2026-04-23T08:09:12.931Z", + "lastCheckedAt": "2026-04-23T08:09:12.931Z" + }, + { + "id": "bromley-council-news", + "provider": "Bromley Council a Newsroom", + "endpoint": "https://www.bromley.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "homerton-healthcare-news", + "provider": "Homerton Healthcare NHS Foundation Trust a News", + "endpoint": "https://www.homerton.nhs.uk/trust-news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "mayor-of-london-press-releases", + "provider": "Mayor of London a Press Releases", + "endpoint": "https://www.london.gov.uk/rss-feeds/80610", + "kind": "rss", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "nhs-london-sel-news", + "provider": "NHS South East London a News", + "endpoint": "https://www.selondonics.org/icb/about-us/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "slam-news", + "provider": "South London and Maudsley NHS Foundation Trust a News", + "endpoint": "https://slam.nhs.uk/pressreleases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "tower-hamlets-council-news", + "provider": "Tower Hamlets Council a News", + "endpoint": "https://www.towerhamlets.gov.uk/News_events/News.aspx", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "westminster-city-council-news", + "provider": "Westminster City Council a News", + "endpoint": "https://www.westminster.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "whittington-health-news", + "provider": "Whittington Health a News", + "endpoint": "https://www.whittington.nhs.uk/mini-apps/news/news. Items.asp", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-assembly-press-releases", + "provider": "London Assembly a Press Releases", + "endpoint": "https://www.london.gov.uk/rss-feeds/80611", + "kind": "rss", + "lane": "oversight", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-defence-intelligence", + "provider": "UK Defence Intelligence a GOV.UK", + "endpoint": "https://www.gov.uk/government/groups/defence-intelligence", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "mi5-news-rss-direct", + "provider": "MI5 - News RSS", + "endpoint": "https://www.mi5.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "daily-politics", + "provider": "Daily Politics", + "endpoint": "https://www.dailypolitics.com/categories/r. RzjN-bU/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T08:39:19.161Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "joint-committee-human-rights-html", + "provider": "Joint Committee on Human Rights", + "endpoint": "https://committees.parliament.uk/committee/93/human-rights-joint-committee/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T19:31:23.009Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T19:31:23.009Z", + "lastFailureAt": "2026-04-23T19:31:23.009Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scottish-government-justice-news", + "provider": "Scottish Government - Justice and Safety", + "endpoint": "https://www.gov.scot/policies/community-safety/latest/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "dni-press-releases", + "provider": "Office of the Director of National Intelligence - Press Releases", + "endpoint": "https://www.dni.gov/index.php/who-we-are/348-newsroom/press-releases", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "doj-nsd-press-releases", + "provider": "U.S. Department of Justice - National Security Division Press Releases", + "endpoint": "https://www.justice.gov/nsd/press-room", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "us-treasury-ofac-press-releases", + "provider": "U.S. Treasury (OFAC) - Press Releases", + "endpoint": "https://ofac.treasury.gov/press-releases", + "kind": "html", + "lane": "sanctions", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T15:11:26.228Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-23T15:11:26.228Z", + "lastFailureAt": "2026-04-16T15:11:26.228Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "bbc-news-england-legacy", + "provider": "BBC News a England (Legacy RSS)", + "endpoint": "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/england/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 6, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "channel-4-news", + "provider": "Channel 4 News", + "endpoint": "https://www.channel4.com/news/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 10, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T23:15:54.554Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T00:08:15.005Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T03:57:52.244Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "england-naturally", + "provider": "England, Naturally", + "endpoint": "https://englandnaturally.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 11, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-23T03:28:47.210Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "aljazeera-news-rss", + "provider": "Al Jazeera English a Top Stories (RSS)", + "endpoint": "https://www.aljazeera.com/xml/rss/all.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 12, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "love-my-dress", + "provider": "Love My Dress", + "endpoint": "https://www.lovemydress.net/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 14, + "status": "auto-quarantined", + "reason": "Health score degraded to 14 after repeated failures", + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 520", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 520", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rte-ireland-news-rss", + "provider": "RTE News - Ireland (RSS)", + "endpoint": "https://feeds.feedburner.com/ietopstories", + "kind": "rss", + "lane": "context", + "region": "europe", + "healthScore": 14, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T08:39:19.161Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "the-week-uk", + "provider": "The Week UK", + "endpoint": "https://www.theweek.co.uk/feeds/all", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 16, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 3, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T08:39:19.161Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "euiss-home", + "provider": "EU Institute for Security Studies", + "endpoint": "https://www.iss.europa.eu/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "icct-home", + "provider": "ICCT - Home", + "endpoint": "https://icct.nl/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "breakingnews-ie", + "provider": "Breaking. News.ie", + "endpoint": "https://feeds.breakingnews.ie/bntopstories", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "independent-ie", + "provider": "Independent.ie", + "endpoint": "https://www.independent.ie/rss/", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "eucrim-counter-terrorism-agenda", + "provider": "eucrim - Commission Counter Terrorism Agenda", + "endpoint": "https://eucrim.eu/news/commission-counter-terrorism-agenda/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "eucrim-judicial-counter-terrorism-register", + "provider": "eucrim - Judicial Counter Terrorism Register", + "endpoint": "https://eucrim.eu/news/judicial-counter-terrorism-register/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "icct-perspectives-on-terrorism", + "provider": "Perspectives on Terrorism (ICCT) a Journal", + "endpoint": "https://pt.icct.nl/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "icct-publications", + "provider": "International Centre for Counter-Terrorism (ICCT) - Publications", + "endpoint": "https://icct.nl/publications", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "vox-pol-publications", + "provider": "VOX-Pol Network a Publications", + "endpoint": "https://www.voxpol.eu/publications/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "isd-global", + "provider": "Institute for Strategic Dialogue (ISD) a Articles & Reports", + "endpoint": "https://www.isdglobal.org/", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bbc-news-world", + "provider": "BBC News a World", + "endpoint": "https://feeds.bbci.co.uk/news/world/rss.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bbc-news-world-legacy", + "provider": "BBC News a World (Legacy RSS)", + "endpoint": "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/world/rss.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bellingcat", + "provider": "Bellingcat a Investigations", + "endpoint": "https://www.bellingcat.com/feed/", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "chathamhouse-events", + "provider": "Chatham House a Events (RSS)", + "endpoint": "https://www.chathamhouse.org/path/events.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "chathamhouse-news-releases", + "provider": "Chatham House a News Releases (RSS)", + "endpoint": "https://www.chathamhouse.org/path/news-releases.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "global-initiative-news", + "provider": "Global Initiative Against Transnational Organized Crime a News", + "endpoint": "https://globalinitiative.net/news/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "tech-against-terrorism-podcast", + "provider": "Tech Against Terrorism - Podcast", + "endpoint": "https://podcast.techagainstterrorism.org/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "war-on-the-rocks", + "provider": "War on the Rocks a National Security & CT Analysis", + "endpoint": "https://warontherocks.com/feed/", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "tech-against-terrorism", + "provider": "Tech Against Terrorism a Blog", + "endpoint": "https://techagainstterrorism.org/", + "kind": "html", + "lane": "prevention", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "tech-against-terrorism-home", + "provider": "Tech Against Terrorism - Home", + "endpoint": "https://techagainstterrorism.org/home", + "kind": "html", + "lane": "prevention", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "hope-not-hate-home", + "provider": "Hope not hate podcast", + "endpoint": "https://feeds.buzzsprout.com/170425.rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "rusi-publications", + "provider": "RUSI (Royal United Services Institute) a Publications", + "endpoint": "https://www.rusi.org/publications", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "birmingham-mail", + "provider": "Birmingham Mail", + "endpoint": "https://www.birminghammail.co.uk/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "breaking-news-today", + "provider": "Breaking News Today", + "endpoint": "https://www.breakingnewstoday.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "consett-magazine", + "provider": "Consett Magazine", + "endpoint": "https://consettmagazine.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "daily-echo", + "provider": "Daily Echo", + "endpoint": "https://www.dailyecho.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "daily-express", + "provider": "Daily Express", + "endpoint": "https://feeds.feedburner.com/daily-express-news-showbiz", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "daily-mirror", + "provider": "Daily Mirror", + "endpoint": "https://www.mirror.co.uk/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "glasgow-times", + "provider": "Glasgow Times", + "endpoint": "https://www.glasgowtimes.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "grimsby-telegraph", + "provider": "Grimsby Telegraph", + "endpoint": "https://www.grimsbytelegraph.co.uk/news/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "herald-scotland-news", + "provider": "Herald Scotland - News", + "endpoint": "https://www.heraldscotland.com/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "huffpost-uk", + "provider": "Huff. Post UK", + "endpoint": "https://www.huffingtonpost.co.uk/feeds/index.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "larne-times", + "provider": "Larne Times", + "endpoint": "https://www.larnetimes.co.uk/news/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "manchester-evening-news", + "provider": "Manchester Evening News", + "endpoint": "https://www.manchestereveningnews.co.uk/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "news-uk", + "provider": "News UK", + "endpoint": "https://www.news.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "politics-co-uk", + "provider": "Politics.co.uk", + "endpoint": "https://www.politics.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "positive-news", + "provider": "Positive News", + "endpoint": "https://www.positive.news/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "scottish-field", + "provider": "Scottish Field", + "endpoint": "https://www.scottishfield.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-argus-news", + "provider": "The Argus", + "endpoint": "https://www.theargus.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-bolton-news", + "provider": "The Bolton News - News", + "endpoint": "https://www.theboltonnews.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "daily-record", + "provider": "Daily Record", + "endpoint": "https://www.dailyrecord.co.uk/news/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "northern-echo-news", + "provider": "The Northern Echo - News", + "endpoint": "https://www.thenorthernecho.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-poke", + "provider": "The Poke", + "endpoint": "https://www.thepoke.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "scarborough-news", + "provider": "The Scarborough News", + "endpoint": "https://www.thescarboroughnews.co.uk/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-scotsman-news", + "provider": "The Scotsman - News", + "endpoint": "https://www.scotsman.com/news/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-york-press-news", + "provider": "The York Press - News", + "endpoint": "https://www.yorkpress.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "wales-online", + "provider": "Wales. Online", + "endpoint": "https://www.walesonline.co.uk/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "a-luxury-travel-blog", + "provider": "A Luxury Travel Blog", + "endpoint": "https://www.aluxurytravelblog.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "age-uk-discover", + "provider": "Age UK", + "endpoint": "https://www.ageuk.org.uk/discover/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "alan-malcher", + "provider": "Alan Malcher", + "endpoint": "https://alanmalcher.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "britishbeautyblogger", + "provider": "British Beauty Blogger", + "endpoint": "https://britishbeautyblogger.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "buy-firewood-direct", + "provider": "Buy Firewood Direct", + "endpoint": "https://www.buyfirewooddirect.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "carly-rowena", + "provider": "Carly Rowena", + "endpoint": "https://feeds.feedburner.com/Carly. Rowena. Official", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "cherished-holiday-homes", + "provider": "Cherished Holiday Homes", + "endpoint": "https://cherishedholidayhomes.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "chique-home-living", + "provider": "Chique Home Living", + "endpoint": "https://chiquehomeliving.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "clubwise-blog", + "provider": "Club. Wise Blog", + "endpoint": "https://www.clubwise.com/clubwise-blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "disneyrollergirl", + "provider": "Disneyrollergirl", + "endpoint": "https://www.disneyrollergirl.net/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "fresh-design-blog", + "provider": "Fresh Design Blog", + "endpoint": "https://feeds2.feedburner.com/Fresh. Design. Blog", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "jollydeck", + "provider": "Jolly. Deck", + "endpoint": "https://www.jollydeck.com/resources/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "lifestylelinked", + "provider": "Life. Style. Linked", + "endpoint": "https://lifestylelinked.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "london-review-of-books", + "provider": "London Review of Books", + "endpoint": "https://www.lrb.co.uk/blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "marie-claire-uk", + "provider": "Marie Claire UK", + "endpoint": "https://www.marieclaire.co.uk/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "office-breaks", + "provider": "Office Breaks", + "endpoint": "https://office-breaks.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "on-the-think-of", + "provider": "On The Think Of", + "endpoint": "https://onthethinkof.home.blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "rocknroll-bride", + "provider": "Rock n Roll Bride", + "endpoint": "https://www.rocknrollbride.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "silverspoon-london", + "provider": "Silver. Spoon London", + "endpoint": "https://www.silverspoonlondon.co.uk/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "hnd-assignment-help-uk-medium", + "provider": "Stories by HND Assignment Help UK", + "endpoint": "https://medium.com/feed/@hndassigenmenthelp", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "tenura", + "provider": "Tenura", + "endpoint": "https://www.tenura.co.uk/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-curry-guy", + "provider": "The Curry Guy", + "endpoint": "https://greatcurryrecipes.net/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "real-talk-uk", + "provider": "The Real Talk UK", + "endpoint": "https://charleyjai-realtalk.blogspot.com/feeds/posts/default?alt=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-stratfordian", + "provider": "The Stratfordian", + "endpoint": "https://thestratfordian.co.uk/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "training-express", + "provider": "Training Express", + "endpoint": "https://www.trainingexpress.org.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "uk-constitutional-law-association", + "provider": "UK Constitutional Law Association", + "endpoint": "https://ukconstitutionallaw.org/blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "uk-fundraising-blog", + "provider": "UK Fundraising", + "endpoint": "https://fundraising.co.uk/category/blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "uk-human-rights-blog", + "provider": "UK Human Rights Blog", + "endpoint": "https://ukhumanrightsblog.com/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "vershd", + "provider": "Vershd", + "endpoint": "https://vershd.io/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "vuelio-uk", + "provider": "Vuelio", + "endpoint": "https://www.vuelio.com/uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "ctc-sentinel", + "provider": "Combating Terrorism Center at West Point - CTC Sentinel", + "endpoint": "https://ctc.westpoint.edu/ctc-sentinel/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "gw-program-extremism", + "provider": "George Washington University - Program on Extremism", + "endpoint": "https://extremism.gwu.edu/news", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "euronews-europe", + "provider": "Euronews a Europe", + "endpoint": "https://www.euronews.com/news/europe", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 24, + "status": "auto-quarantined", + "reason": "Health score degraded to 24 after repeated failures", + "quarantinedAt": "2026-04-23T03:28:47.210Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 406", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 406", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + } + ] } diff --git a/data/source-remediation-sweep.json b/data/source-remediation-sweep.json index 1dbf07d9..f8bd8fa4 100644 --- a/data/source-remediation-sweep.json +++ b/data/source-remediation-sweep.json @@ -1,6 +1,6 @@ { "generatedFrom": "live-alerts.json", - "generatedAt": "2026-04-23T20:25:40.062Z", + "generatedAt": "2026-04-23T20:18:46.625Z", "totalSourceErrors": 0, "byCategory": {}, "byKind": {}, diff --git a/data/top-20-source-remediation.json b/data/top-20-source-remediation.json index f962a2a6..ac300e6e 100644 --- a/data/top-20-source-remediation.json +++ b/data/top-20-source-remediation.json @@ -1,6 +1,6 @@ { "generatedFrom": "live-alerts.json", - "generatedAt": "2026-04-23T20:25:40.062Z", + "generatedAt": "2026-04-23T20:18:46.625Z", "totalSourceErrors": 0, "top20": [] } diff --git a/live-alerts.json b/live-alerts.json index 749683b9..393daa29 100644 --- a/live-alerts.json +++ b/live-alerts.json @@ -1,7 +1,7 @@ { - "generatedAt": "2026-04-23T20:25:40.062Z", - "sourceCount": 4, - "alertCount": 180, + "generatedAt": "2026-04-23T20:18:46.625Z", + "sourceCount": 16, + "alertCount": 178, "alerts": [ { "id": "met-police-latest-news-0", @@ -10190,56 +10190,6 @@ "corroborationCount": 1, "isDuplicateOf": "fusion-f289bcaeba8fd554" }, - { - "id": "fixture-atom-oversight-0", - "fusedIncidentId": "fusion-b4a9eb5890206d91", - "title": "Oversight Committee Schedules Counter-Terror Review Hearing", - "location": "Europe", - "region": "europe", - "lane": "oversight", - "severity": "moderate", - "status": "Update", - "actor": "Fixture Oversight Feed", - "subject": "Fixture Oversight Feed", - "happenedWhen": "04 Apr 2026, 11:10", - "confidence": "Verified official source update", - "confidenceScore": 0.84, - "summary": "Parliamentary committee confirms an oversight hearing on prevention strategy.", - "aiSummary": "Fixture Oversight Feed has published an oversight or review update. This is useful for legal, custody, supervision, or institutional risk context rather than immediate public warning.", - "sourceExtract": "Parliamentary committee confirms an oversight hearing on prevention strategy.", - "peopleInvolved": [], - "source": "Fixture Oversight Feed", - "sourceUrl": "https://fixtures.albertalert.local/oversight/1", - "sourceTier": "context", - "reliabilityProfile": "official_context", - "incidentTrack": "", - "laneReason": "Oversight, legislation, or review signal relevant to counter-terror posture.", - "queueReason": "Oversight, legislation, or review signal relevant to counter-terror posture.", - "queueBucket": "oversight", - "time": "04 Apr 2026, 11:10", - "lat": 50, - "lng": 10, - "major": false, - "publishedAt": "2026-04-04T10:10:00.000Z", - "keywordHits": [ - "terror" - ], - "terrorismHits": [ - "terror", - "counter-terror" - ], - "eventType": "oversight_update", - "geoPrecision": "country", - "isOfficial": true, - "priorityScore": -5.8, - "freshnessBucket": 0, - "freshUntil": "2026-04-12T10:10:00.000Z", - "needsHumanReview": false, - "isTerrorRelevant": true, - "corroboratingSources": [], - "corroborationCount": 0, - "isDuplicateOf": null - }, { "id": "uk-ncsc-news-4", "fusedIncidentId": "fusion-a4c8d412564d7890", @@ -10521,51 +10471,6 @@ ], "corroborationCount": 1, "isDuplicateOf": "fusion-a705408939c4c725" - }, - { - "id": "fixture-json-prevention-0", - "fusedIncidentId": "fusion-f5cb7bfa16235fcf", - "title": "Community Prevention Workshop Expanded Across Regions", - "location": "Europe", - "region": "international", - "lane": "prevention", - "severity": "moderate", - "status": "Update", - "actor": "Fixture Prevention Feed", - "subject": "Fixture Prevention Feed", - "happenedWhen": "04 Apr 2026, 10:30", - "confidence": "Research or analytical source", - "confidenceScore": 0.68, - "summary": "Prevention specialists announced a new training cycle focused on reporting suspicious behavior.", - "aiSummary": "Fixture Prevention Feed has published a prevention or radicalisation update. The value is horizon scanning, theme detection, and context for later operational or analytical work.", - "sourceExtract": "Prevention specialists announced a new training cycle focused on reporting suspicious behavior.", - "peopleInvolved": [], - "source": "Fixture Prevention Feed", - "sourceUrl": "https://fixtures.albertalert.local/prevention/1", - "sourceTier": "research", - "reliabilityProfile": "specialist_research", - "incidentTrack": "", - "laneReason": "Prevention, radicalisation, or analytical context source.", - "queueReason": "Prevention, radicalisation, or analytical context source.", - "queueBucket": "prevention", - "time": "04 Apr 2026, 10:30", - "lat": 50, - "lng": 10, - "major": false, - "publishedAt": "2026-04-04T09:30:00.000Z", - "keywordHits": [], - "terrorismHits": [], - "eventType": "prevention_update", - "geoPrecision": "country", - "isOfficial": false, - "priorityScore": -8.3, - "freshnessBucket": 0, - "freshUntil": "2026-04-12T09:30:00.000Z", - "needsHumanReview": false, - "isTerrorRelevant": true, - "corroboratingSources": [], - "corroborationCount": 0, - "isDuplicateOf": null } ], "sourceErrors": [], @@ -12412,44 +12317,51 @@ "lng": 133.7751 } ], - "buildWarning": null, + "buildWarning": "Deferred 531 low-yield source(s) on health cooldown.", "runMetrics": { "schedulerMode": "candidate", "htmlBudget": 40, "htmlDomainCapPerRun": 3, - "htmlDomainUsage": {}, + "htmlDomainUsage": { + "news.met.police.uk": 2 + }, "coverage": { - "eligible": 4, - "scheduled": 4, - "initialScheduled": 1, - "continuationAttempted": 3, - "checked": 4, - "eligibleCheckedRate": 1, + "eligible": 547, + "scheduled": 16, + "initialScheduled": 7, + "continuationAttempted": 9, + "checked": 16, + "eligibleCheckedRate": 0.029, "scheduledCheckedRate": 1 }, "freshnessSlaByTier": { "high": { - "count": 1, - "avgMinutes": 0, - "p95Minutes": 0 + "count": 7, + "avgMinutes": 4651, + "p95Minutes": 10282 + }, + "low": { + "count": 12, + "avgMinutes": 6133, + "p95Minutes": 9008 }, "medium": { - "count": 1, - "avgMinutes": 0, - "p95Minutes": 0 + "count": 20, + "avgMinutes": 4374, + "p95Minutes": 10282 } }, "failureReasons": { - "success": 2 + "success": 8 }, "sourceRunStats": { - "totalConfiguredSources": 4, - "sourcesCheckedThisRun": 4, - "sourcesUpdatedThisRun": 2, + "totalConfiguredSources": 549, + "sourcesCheckedThisRun": 16, + "sourcesUpdatedThisRun": 8, "sourcesFailedThisRun": 0, "sourcesUnchangedThisRun": 0 }, - "runDurationMs": 242, + "runDurationMs": 7648, "playwrightFallback": { "attempts": 0, "successes": 0, @@ -12459,19 +12371,19 @@ "guardrails": { "maxRuntimeMs": 720000, "maxFailedSourceRate": 0.65, - "minSuccessfulSources": 1, - "targetSuccessfulSourcesPerRun": 1, + "minSuccessfulSources": 8, + "targetSuccessfulSourcesPerRun": 60, "failedSourceRate": 0, - "successfulSources": 2, + "successfulSources": 8, "violations": [], "midRun": { "throttleLevel": 0, - "totalAttempted": 4, + "totalAttempted": 16, "totalFailed": 0, - "totalSuccessful": 2, + "totalSuccessful": 8, "failedRate": 0, "successRate": 0.5, - "avgSourceDurationMs": 55, + "avgSourceDurationMs": 476, "criticalOnly": false, "skipPlaywright": false, "transitions": [] @@ -12481,58 +12393,239 @@ "health": { "expectedRefreshMinutes": 30, "staleAfterMinutes": 50, - "lastAttemptedRefreshTime": "2026-04-23T20:25:40.062Z", + "lastAttemptedRefreshTime": "2026-04-23T20:18:46.625Z", "usedFallback": false, - "lastSuccessfulRefreshTime": "2026-04-23T20:25:40.062Z", - "lastSuccessfulRunId": "24857002217", - "lastSuccessfulRunNumber": "350", + "lastSuccessfulRefreshTime": "2026-04-23T20:18:46.625Z", + "lastSuccessfulRunId": "24856772456", + "lastSuccessfulRunNumber": "503", "lastSuccessfulRunAttempt": "1", - "lastSuccessfulHeadSha": "8378fae9f01ff927a276f577cda486e5d90cf3d2", - "lastSuccessfulEvent": "dynamic", - "lastSuccessfulSourceCount": 4, + "lastSuccessfulHeadSha": "38ad891c63aa71cf17b87f911eca66c673aebc7d", + "lastSuccessfulEvent": "workflow_dispatch", + "lastSuccessfulSourceCount": 16, "sourceErrorCount": 0, - "hasWarnings": false, - "autoDeferredSourceCount": 0, - "autoDeferredSources": [], + "hasWarnings": true, + "autoDeferredSourceCount": 531, + "autoDeferredSources": [ + { + "id": "euaa-news", + "provider": "EUAA (EU Agency for Asylum) - Press Releases", + "reason": "health-deprioritised", + "until": "2026-04-23T20:31:23.009Z", + "statusKind": "cooled_down" + }, + { + "id": "eulisa-news-events", + "provider": "eu-LISA - News and Events (RSS)", + "reason": "health-deprioritised", + "until": "2026-04-23T20:31:23.009Z", + "statusKind": "cooled_down" + }, + { + "id": "frontex-news-releases", + "provider": "Frontex a News Releases", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "austria-interior-ministry-news", + "provider": "Austrian Interior Ministry - News", + "reason": "health-deprioritised", + "until": "2026-04-23T20:31:23.009Z", + "statusKind": "cooled_down" + }, + { + "id": "austria-interior-ministry-rss-index", + "provider": "Austrian Interior Ministry - RSS Index", + "reason": "health-deprioritised", + "until": "2026-04-23T20:31:23.009Z", + "statusKind": "cooled_down" + }, + { + "id": "bdk-rss", + "provider": "Bund Deutscher Kriminalbeamter - RSS", + "reason": "health-deprioritised", + "until": "2026-04-25T14:03:06.243Z", + "statusKind": "cooled_down" + }, + { + "id": "belgium-crisis-centre-news", + "provider": "Belgian National Crisis Centre - Newsroom", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "denmark-pet-news", + "provider": "Danish Security and Intelligence Service - News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "ecfr-feeds-index", + "provider": "ECFR - Feeds", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "enisa-news", + "provider": "ENISA (EU Cybersecurity Agency) a News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "enisa-rss-transition-page", + "provider": "ENISA - RSS Feeds Transition Notice", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "euiss-home", + "provider": "EU Institute for Security Studies", + "reason": "health-deprioritised", + "until": "2026-04-24T04:07:40.227Z", + "statusKind": "cooled_down" + }, + { + "id": "euractiv-security-rss", + "provider": "BBC News - Europe", + "reason": "health-deprioritised", + "until": "2026-04-25T14:03:06.243Z", + "statusKind": "cooled_down" + }, + { + "id": "eurojust-press-news-html", + "provider": "Eurojust - Press Releases and News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "eurojust-press-releases", + "provider": "Eurojust - Press Releases", + "reason": "health-deprioritised", + "until": "2026-04-25T18:02:43.923Z", + "statusKind": "cooled_down" + }, + { + "id": "europol-media-press", + "provider": "Europol a Media and Press", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "europol-news-rss", + "provider": "Europol - Newsroom (RSS)", + "reason": "health-deprioritised", + "until": "2026-04-23T20:31:23.009Z", + "statusKind": "cooled_down" + }, + { + "id": "europol-newsroom-html", + "provider": "Europol - Newsroom", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "finland-supo-news", + "provider": "Finnish Security Intelligence Service - News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "german-bfv-news", + "provider": "German BfV - Press", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "german-interior-ministry-press", + "provider": "German Federal Ministry for Economic Cooperation and Development - Feed", + "reason": "health-deprioritised", + "until": "2026-04-25T10:13:21.253Z", + "statusKind": "cooled_down" + }, + { + "id": "icct-home", + "provider": "ICCT - Home", + "reason": "health-deprioritised", + "until": "2026-04-24T04:07:40.227Z", + "statusKind": "cooled_down" + }, + { + "id": "nctv-english-rss", + "provider": "NCTV Netherlands - English RSS", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "paris-prefecture-police-rss-page", + "provider": "Paris Prefecture of Police - RSS", + "reason": "health-deprioritised", + "until": "2026-04-25T10:13:21.253Z", + "statusKind": "cooled_down" + }, + { + "id": "spain-interior-ministry-news", + "provider": "Spanish Ministry of the Interior - Press", + "reason": "health-deprioritised", + "until": "2026-04-25T10:13:21.253Z", + "statusKind": "cooled_down" + } + ], "operationalDeferredSourceCount": 0, "operationalDeferredSources": [], "sourceRunStats": { - "totalConfiguredSources": 4, - "sourcesCheckedThisRun": 4, - "sourcesUpdatedThisRun": 2, + "totalConfiguredSources": 549, + "sourcesCheckedThisRun": 16, + "sourcesUpdatedThisRun": 8, "sourcesFailedThisRun": 0, "sourcesUnchangedThisRun": 0 }, "extraMetrics": { "schedulerMode": "candidate", "coverage": { - "eligible": 4, - "scheduled": 4, - "initialScheduled": 1, - "continuationAttempted": 3, - "checked": 4, - "eligibleCheckedRate": 1, + "eligible": 547, + "scheduled": 16, + "initialScheduled": 7, + "continuationAttempted": 9, + "checked": 16, + "eligibleCheckedRate": 0.029, "scheduledCheckedRate": 1 }, "freshnessSlaByTier": { "high": { - "count": 1, - "avgMinutes": 0, - "p95Minutes": 0 + "count": 7, + "avgMinutes": 4651, + "p95Minutes": 10282 + }, + "low": { + "count": 12, + "avgMinutes": 6133, + "p95Minutes": 9008 }, "medium": { - "count": 1, - "avgMinutes": 0, - "p95Minutes": 0 + "count": 20, + "avgMinutes": 4374, + "p95Minutes": 10282 } }, "failureReasons": { - "success": 2 + "success": 8 }, "sourceRunStats": { - "totalConfiguredSources": 4, - "sourcesCheckedThisRun": 4, - "sourcesUpdatedThisRun": 2, + "totalConfiguredSources": 549, + "sourcesCheckedThisRun": 16, + "sourcesUpdatedThisRun": 8, "sourcesFailedThisRun": 0, "sourcesUnchangedThisRun": 0 }, @@ -12543,125 +12636,22424 @@ "guardrailViolations": [], "midRunGuardrail": { "throttleLevel": 0, - "totalAttempted": 4, + "totalAttempted": 16, "totalFailed": 0, - "totalSuccessful": 2, + "totalSuccessful": 8, "failedRate": 0, "successRate": 0.5, - "avgSourceDurationMs": 55, + "avgSourceDurationMs": 476, "criticalOnly": false, "skipPlaywright": false, "transitions": [] } }, "sourceHealth": { - "fixture-rss-incidents": { - "provider": "Fixture Incidents Feed", - "lane": "incidents", - "kind": "rss", - "lastCheckedAt": "2026-04-23T20:25:40.062Z", + "euaa-news": { + "provider": "EUAA (EU Agency for Asylum) - Press Releases", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", "lastBuiltCount": 0, "successfulRuns": 0, - "emptyRuns": 1, + "emptyRuns": 74, "failedRuns": 0, "consecutiveFailures": 0, - "consecutiveEmptyRuns": 1, + "consecutiveEmptyRuns": 74, "consecutiveBlockedFailures": 0, "consecutiveDeadUrlFailures": 0, "lastSuccessfulAt": null, "lastFailureAt": null, - "lastEmptyAt": "2026-04-23T20:25:40.062Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", "lastErrorCategory": null, "lastErrorMessage": null, "recentErrors": [], - "cooldownUntil": null, - "autoSkipReason": null, - "healthScore": 77, - "quarantined": false, + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, "quarantinedAt": null, - "quarantineReason": null, - "nextFetchAt": "2026-04-23T21:22:40.062Z" + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" }, - "fixture-rss-context": { - "provider": "Fixture Context Feed", - "lane": "context", + "eulisa-news-events": { + "provider": "eu-LISA - News and Events (RSS)", + "lane": "border", "kind": "rss", - "lastCheckedAt": "2026-04-23T20:25:40.062Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", "lastBuiltCount": 0, "successfulRuns": 0, - "emptyRuns": 1, + "emptyRuns": 74, "failedRuns": 0, "consecutiveFailures": 0, - "consecutiveEmptyRuns": 1, + "consecutiveEmptyRuns": 74, "consecutiveBlockedFailures": 0, "consecutiveDeadUrlFailures": 0, "lastSuccessfulAt": null, "lastFailureAt": null, - "lastEmptyAt": "2026-04-23T20:25:40.062Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", "lastErrorCategory": null, "lastErrorMessage": null, "recentErrors": [], - "cooldownUntil": null, - "autoSkipReason": null, - "healthScore": 77, - "quarantined": false, + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, "quarantinedAt": null, - "quarantineReason": null, - "nextFetchAt": "2026-04-23T23:02:40.062Z" + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" }, - "fixture-atom-oversight": { - "provider": "Fixture Oversight Feed", - "lane": "oversight", - "kind": "atom", - "lastCheckedAt": "2026-04-23T20:25:40.062Z", - "lastBuiltCount": 1, - "successfulRuns": 1, + "frontex-news-releases": { + "provider": "Frontex a News Releases", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "austria-interior-ministry-news": { + "provider": "Austrian Interior Ministry - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, "failedRuns": 0, "consecutiveFailures": 0, - "consecutiveEmptyRuns": 0, + "consecutiveEmptyRuns": 74, "consecutiveBlockedFailures": 0, "consecutiveDeadUrlFailures": 0, - "lastSuccessfulAt": "2026-04-23T20:25:40.062Z", + "lastSuccessfulAt": null, "lastFailureAt": null, - "lastEmptyAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", "lastErrorCategory": null, "lastErrorMessage": null, "recentErrors": [], - "cooldownUntil": null, - "autoSkipReason": null, - "healthScore": 90, - "quarantined": false, + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, "quarantinedAt": null, - "quarantineReason": null, - "nextFetchAt": "2026-04-23T21:03:40.062Z" + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" }, - "fixture-json-prevention": { - "provider": "Fixture Prevention Feed", - "lane": "prevention", - "kind": "json", - "lastCheckedAt": "2026-04-23T20:25:40.062Z", - "lastBuiltCount": 1, - "successfulRuns": 1, - "emptyRuns": 0, + "austria-interior-ministry-rss-index": { + "provider": "Austrian Interior Ministry - RSS Index", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, "failedRuns": 0, "consecutiveFailures": 0, - "consecutiveEmptyRuns": 0, + "consecutiveEmptyRuns": 74, "consecutiveBlockedFailures": 0, "consecutiveDeadUrlFailures": 0, - "lastSuccessfulAt": "2026-04-23T20:25:40.062Z", + "lastSuccessfulAt": null, "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bdk-rss": { + "provider": "Bund Deutscher Kriminalbeamter - RSS", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "belgium-crisis-centre-news": { + "provider": "Belgian National Crisis Centre - Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "quarantineReason": "Health score degraded to 5 after repeated failures", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "denmark-pet-news": { + "provider": "Danish Security and Intelligence Service - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ecfr-feeds-index": { + "provider": "ECFR - Feeds", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "enisa-news": { + "provider": "ENISA (EU Cybersecurity Agency) a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "enisa-rss-transition-page": { + "provider": "ENISA - RSS Feeds Transition Notice", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "euiss-home": { + "provider": "EU Institute for Security Studies", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", "lastErrorCategory": null, "lastErrorMessage": null, "recentErrors": [], - "cooldownUntil": null, - "autoSkipReason": null, - "healthScore": 90, - "quarantined": false, + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, "quarantinedAt": null, - "quarantineReason": null, - "nextFetchAt": "2026-04-23T23:53:40.062Z" + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "euractiv-security-rss": { + "provider": "BBC News - Europe", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eurojust-press-news-html": { + "provider": "Eurojust - Press Releases and News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eurojust-press-releases": { + "provider": "Eurojust - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 72, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "europol-media-press": { + "provider": "Europol a Media and Press", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "europol-news-rss": { + "provider": "Europol - Newsroom (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "europol-newsroom-html": { + "provider": "Europol - Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "finland-supo-news": { + "provider": "Finnish Security Intelligence Service - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "german-bfv-news": { + "provider": "German BfV - Press", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "german-interior-ministry-press": { + "provider": "German Federal Ministry for Economic Cooperation and Development - Feed", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 400", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Health score degraded to 20 after repeated failures", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "icct-home": { + "provider": "ICCT - Home", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nctv-english-rss": { + "provider": "NCTV Netherlands - English RSS", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "paris-prefecture-police-rss-page": { + "provider": "Paris Prefecture of Police - RSS", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "spain-interior-ministry-news": { + "provider": "Spanish Ministry of the Interior - Press", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "statewatch-news": { + "provider": "Statewatch - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "breakingnews-ie": { + "provider": "BreakingNews.ie", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "independent-ie": { + "provider": "Independent.ie", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "belgian-federal-police-news": { + "provider": "Belgian Federal Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T11:47:27.254Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 11, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastEmptyAt": "2026-04-23T10:13:21.253Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "cooldownUntil": "2026-04-25T11:47:27.254Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-25T11:47:27.254Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "czech-police-news": { + "provider": "Police of the Czech Republic - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dutch-police-rss-index": { + "provider": "Politie.nl - RSS", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ertzaintza-news": { + "provider": "Ertzaintza - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "finland-police-news": { + "provider": "Finnish Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "german-bka-press": { + "provider": "German BKA - Press Releases (2026 archive)", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "quarantineReason": "Health score degraded to 5 after repeated failures", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "german-bka-press-releases-de": { + "provider": "BKA Germany - Press Releases", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T17:39:27.641Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 15, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastEmptyAt": "2026-04-22T16:17:11.443Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T07:32:24.475Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "cooldownUntil": "2026-04-24T17:39:27.641Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T08:04:04.612Z", + "quarantineReason": "Infrastructure instability — mixed timeout and network errors; auto-retry likely to recover", + "nextFetchAt": "2026-04-24T17:39:27.641Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "guardia-civil-news": { + "provider": "El Pais English - Guardia Civil", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "mossos-news": { + "provider": "Mossos d'Esquadra - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "paris-prefecture-police-press-releases": { + "provider": "Paris Prefecture of Police - Press Releases", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "policia-nacional-news": { + "provider": "Policia Nacional - Press", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T18:05:04.781Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-19T18:05:04.781Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "quarantineReason": "Health score degraded to 5 after repeated failures", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "romanian-police-news": { + "provider": "Romanian Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "curia-press-rss-en": { + "provider": "Court of Justice of the European Union - RSS (EN/FR)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 65, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eppo-news-node-7": { + "provider": "European Public Prosecutor's Office - News (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 69, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 69, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-cellar-rss-atom": { + "provider": "Publications Office of the European Union (CELLAR) a RSS/Atom Feeds", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 13, + "emptyRuns": 61, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-commission-counter-terrorism-measures-2026": { + "provider": "European Commission - Counter Terrorism Measures 2026", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-commission-home-affairs-topic": { + "provider": "European Commission - Home Affairs", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-commission-presscorner-home": { + "provider": "Council of the EU - Press Releases (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-council-fight-against-terrorism": { + "provider": "Council of the EU - Fight Against Terrorism", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-council-jha-meetings": { + "provider": "Council of the EU - JHA Press Releases", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 72, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-council-jha-register-rss": { + "provider": "Council of the EU - Latest Documents RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-council-press-releases": { + "provider": "Council of the European Union a Press Releases (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-council-press-releases-html": { + "provider": "Council of the EU - Press Releases", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 69, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 69, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-council-rss-index": { + "provider": "Council of the EU - RSS Index", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-ct-coordinator": { + "provider": "EU Counter-Terrorism Coordinator a Council of the EU", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-ejustice-news-rss": { + "provider": "European e-Justice - News RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 51, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 28, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-18T13:27:18.679Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-18T13:27:18.679Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-eppo-news": { + "provider": "European Public Prosecutor's Office - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-fra-rss": { + "provider": "EU Agency for Fundamental Rights (FRA) a RSS", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T11:46:02.615Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-home-affairs-news": { + "provider": "European Commission a Home Affairs News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-olaf-news": { + "provider": "OLAF (EU Anti-Fraud Office) a News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-security-union-strategy": { + "provider": "European Commission a Security Union Strategy", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eucrim-counter-terrorism-agenda": { + "provider": "eucrim - Commission Counter Terrorism Agenda", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eucrim-judicial-counter-terrorism-register": { + "provider": "eucrim - Judicial Counter Terrorism Register", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eurojust-publications": { + "provider": "Eurojust a Publications (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 1, + "successfulRuns": 98, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:18:46.625Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:18:46.625Z" + }, + "eurojust-rss-feeds-page": { + "provider": "Eurojust - RSS Feeds", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "europarl-committee-libe": { + "provider": "European Parliament - LIBE Press Releases", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 69, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 69, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "europarl-committee-sede": { + "provider": "European Parliament - SEDE Press Releases", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "europarl-pressreleases-committees": { + "provider": "European Parliament a Press Releases (Committees) (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "europol-tesat-report": { + "provider": "Europol - TESAT Report", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "fra-rss": { + "provider": "Human Rights Watch - News RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "europol-eu-iru": { + "provider": "Europol a EU Internet Referral Unit (EU IRU)", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "isd-global-publications": { + "provider": "ISD - Publications", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ncsc-nl-rss": { + "provider": "NCSC Netherlands - RSS", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "eu-council-terrorism-sanctions": { + "provider": "Council of the EU - Sanctions Against Terrorism", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "unhcr-europe-news": { + "provider": "UNHCR Europe a News", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "clingendael-publications": { + "provider": "Clingendael Institute a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dw-europe-rss": { + "provider": "Deutsche Welle a Europe (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ecfr-publications": { + "provider": "European Council on Foreign Relations (ECFR) a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "euronews-europe": { + "provider": "Euronews a Europe", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 28, + "emptyRuns": 21, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-22T22:53:26.529Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 406", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 406", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-24T13:04:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 24, + "quarantined": true, + "quarantinedAt": "2026-04-23T03:28:47.210Z", + "quarantineReason": "Health score degraded to 24 after repeated failures", + "nextFetchAt": "2026-04-24T13:04:47.210Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "financial-times-world": { + "provider": "Financial Times a World", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 2, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "france24-europe-rss": { + "provider": "France 24 a Europe (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T05:47:56.833Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 11, + "failedRuns": 4, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T05:47:56.833Z", + "lastEmptyAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T16:03:49.134Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T06:12:01.477Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T05:47:56.833Z" + } + ], + "cooldownUntil": "2026-04-25T05:47:56.833Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-19T16:03:49.134Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T05:47:56.833Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "french-interior-ministry-news": { + "provider": "French Ministry of the Interior - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "icct-perspectives-on-terrorism": { + "provider": "Perspectives on Terrorism (ICCT) a Journal", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "icct-publications": { + "provider": "International Centre for Counter-Terrorism (ICCT) - Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "netherlands-nctv-news": { + "provider": "Dutch NCTV - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "norway-pst-news": { + "provider": "Norwegian Government - News and Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 72, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "politico-europe": { + "provider": "Politico Europe", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "rte-ireland-news-rss": { + "provider": "RTE News - Ireland (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 2, + "emptyRuns": 6, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 2, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T11:47:27.254Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T22:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 14, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T22:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "switzerland-fedpol-news": { + "provider": "Swiss fedpol - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T21:59:30.032Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 5, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T21:59:30.032Z", + "lastEmptyAt": "2026-04-22T20:37:31.462Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T21:59:30.032Z" + } + ], + "cooldownUntil": "2026-04-24T21:59:30.032Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T21:59:30.032Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "telegraph-world-news": { + "provider": "The Telegraph a World News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 30, + "emptyRuns": 24, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T16:07:40.227Z", + "lastFailureAt": "2026-04-19T14:11:10.963Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T21:45:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 32, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:45:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "vox-pol-publications": { + "provider": "VOX-Pol Network a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "french-gendarmerie-news": { + "provider": "Gendarmerie Nationale - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "french-police-nationale-news": { + "provider": "Police Nationale - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ireland-gardai-press": { + "provider": "An Garda Siochana - Press Releases", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "netherlands-police-news": { + "provider": "Dutch National Police - News (EN)", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "paris-police-prefecture-news": { + "provider": "France24 - France (RSS)", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "portugal-pj-news": { + "provider": "Policia Judiciaria Portugal - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 37, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 15, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T15:59:44.503Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T19:18:33.309Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T15:59:44.503Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "portugal-psp-news": { + "provider": "The Portugal News - Crime", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "coe-counter-terrorism": { + "provider": "Council of Europe a Counter-Terrorism", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "echr-key-judgments-rss": { + "provider": "European Court of Human Rights - Key Judgments RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-22T17:39:27.641Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 60, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastEmptyAt": "2026-04-22T16:17:11.443Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 400", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "cooldownUntil": "2026-04-24T17:39:27.641Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T17:39:27.641Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "echr-press-releases-rss": { + "provider": "European Court of Human Rights - Press Releases RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "french-justice-ministry-news": { + "provider": "French Ministry of Justice - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "netherlands-prosecution-news": { + "provider": "Dutch Public Prosecution Service - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bfv-de-english": { + "provider": "BfV service page (Federal Office for the Protection of the Constitution)", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 61, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 50, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T11:07:28.674Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T11:07:28.674Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dsn-at-english": { + "provider": "DSN Austria - Aktuelles", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "isd-global": { + "provider": "Institute for Strategic Dialogue (ISD) a Articles & Reports", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ocam-be-english": { + "provider": "CUTA (Belgium) threat analysis", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 19, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T22:54:57.851Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "pet-dk-english": { + "provider": "PET (Denmark) a English News", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "pst-no-english": { + "provider": "PST (Norway) English reporting page", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ran-network": { + "provider": "RUSI - Terrorism and Conflict", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "sapo-se-english": { + "provider": "Swedish Security Service English news", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "supo-fi-english": { + "provider": "SUPO Finland news and press releases", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "iom-news": { + "provider": "IOM (International Organization for Migration) a News", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "acled-updates": { + "provider": "ACLED a Updates and Analysis", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "aljazeera-news-rss": { + "provider": "Al Jazeera English a Top Stories (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 21, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 2, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T10:13:21.253Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T21:40:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 12, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:40:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ap-top-news": { + "provider": "BBC News - Top Stories", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bbc-news-world": { + "provider": "BBC News a World", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bbc-news-world-legacy": { + "provider": "BBC News a World (Legacy RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bellingcat": { + "provider": "Bellingcat a Investigations", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "chatham-house-rss": { + "provider": "Chatham House a Research & Commentary (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 7, + "emptyRuns": 5, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T14:03:06.243Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 58, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T23:39:46.625Z" + }, + "chathamhouse-events": { + "provider": "Chatham House a Events (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "chathamhouse-intl-security-feed": { + "provider": "Chatham House a International Security Programme (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 5, + "emptyRuns": 22, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T14:03:06.243Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 64, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T23:15:46.625Z" + }, + "chathamhouse-news-releases": { + "provider": "Chatham House a News Releases (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "counter-extremism-project-news": { + "provider": "Counter Extremism Project a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 5, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T12:14:24.733Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T21:04:21.166Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "crisis-group": { + "provider": "International Crisis Group a Research & Analysis", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "crisis-group-europe": { + "provider": "International Crisis Group a Europe (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "global-initiative-news": { + "provider": "Global Initiative Against Transnational Organized Crime a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "interpol-news-events": { + "provider": "INTERPOL a News and Events", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "just-security": { + "provider": "Just Security a Law, Rights & National Security", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 3, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T23:55:39.351Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T09:29:55.311Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T04:05:33.139Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T09:29:55.311Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lawfare-blog": { + "provider": "Just Security - National Security Analysis", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "long-war-journal": { + "provider": "Long War Journal a News Feed", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 6, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 10, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-21T11:46:02.615Z", + "lastFailureAt": "2026-04-18T00:05:41.686Z", + "lastEmptyAt": "2026-04-23T10:13:21.253Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T22:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 32, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T22:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nato-news-rss": { + "provider": "NATO a News (RSS)", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "occrp-news": { + "provider": "OCCRP a Organized Crime and Corruption Reporting Project", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "osce-press-releases": { + "provider": "OSCE a Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "resolve-network-research": { + "provider": "RESOLVE Network a Research", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 503", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Health score degraded to 17 after repeated failures", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "reuters-uk": { + "provider": "Reuters a UK News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "rferl-security-news-rss": { + "provider": "Radio Free Europe/Radio Liberty a Security (RSS)", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + } + ], + "cooldownUntil": "2026-04-23T22:03:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T22:03:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "soufan-center-intelbrief": { + "provider": "The Soufan Center a IntelBrief", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tech-against-terrorism-podcast": { + "provider": "Tech Against Terrorism - Podcast", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tony-blair-institute-news": { + "provider": "Tony Blair Institute for Global Change a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "unodc-news": { + "provider": "UNODC (UN Office on Drugs and Crime) a Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "war-on-the-rocks": { + "provider": "War on the Rocks a National Security & CT Analysis", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gctf-news": { + "provider": "Global Counterterrorism Forum (GCTF) a News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T04:05:33.139Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "unoct-news": { + "provider": "UN Office of Counter-Terrorism (UNOCT) - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "unsc-counter-terrorism-committee": { + "provider": "UN Security Council - Counter-Terrorism Committee (CTC) Updates", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gnet-artificial-intelligence-rss": { + "provider": "Global Network on Extremism & Technology (GNET) a Artificial Intelligence (RSS)", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 76, + "emptyRuns": 11, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-21T11:46:02.615Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T06:02:43.923Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 67, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T06:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gnet-radicalisation-rss": { + "provider": "Global Network on Extremism & Technology (GNET) a Radicalisation (RSS)", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-16T16:57:11.406Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T21:08:30.446Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gnet-youth-rss": { + "provider": "Global Network on Extremism & Technology (GNET) a Youth (RSS)", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-22T17:39:27.641Z", + "lastBuiltCount": 0, + "successfulRuns": 5, + "emptyRuns": 0, + "failedRuns": 10, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T08:04:04.612Z", + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T11:07:28.674Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T12:15:37.169Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T22:00:46.520Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T17:16:47.386Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "cooldownUntil": "2026-04-24T17:39:27.641Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T22:00:46.520Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T17:39:27.641Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tech-against-terrorism": { + "provider": "Tech Against Terrorism a Blog", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tech-against-terrorism-home": { + "provider": "Tech Against Terrorism - Home", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "fatf-news": { + "provider": "Financial Action Task Force (FATF) a News", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "interpol-notices": { + "provider": "INTERPOL a Notices", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "unsc-1267-press-releases": { + "provider": "UN Security Council - ISIL/Da'esh & Al-Qaeda Sanctions Committee Press Releases", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "unsc-consolidated-list": { + "provider": "UN Security Council - Consolidated Sanctions List Updates (RSS)", + "lane": "sanctions", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "barking-dagenham-council-news": { + "provider": "Barking and Dagenham Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 2, + "failedRuns": 6, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "barnet-council-news": { + "provider": "Barnet Post", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "barts-health-news": { + "provider": "Barts Health NHS Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T08:09:12.931Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T08:09:12.931Z", + "lastEmptyAt": "2026-04-23T05:47:56.833Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T08:09:12.931Z" + } + ], + "cooldownUntil": "2026-04-25T08:09:12.931Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-25T08:09:12.931Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bbc-news-london-rss": { + "provider": "BBC News - London RSS", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 27, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-18T23:43:16.267Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 52, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bexley-council-news": { + "provider": "Bexley Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "brent-council-news": { + "provider": "Brent Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bromley-council-news": { + "provider": "Bromley Council a Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "camden-council-news": { + "provider": "Camden Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "chelsea-westminster-news": { + "provider": "Chelsea and Westminster Hospital NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "city-of-london-police-fraud-reporting": { + "provider": "City of London Police - Fraud Reporting", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cnwl-news": { + "provider": "Central and North West London NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "croydon-council-news": { + "provider": "Croydon Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ealing-council-news": { + "provider": "Ealing Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 51, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 23, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": "2026-04-18T21:09:53.488Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T21:09:53.488Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "east-london-nhs-news": { + "provider": "East London NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "enfield-council-news": { + "provider": "Enfield Council a News and Events", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gosh-news": { + "provider": "Great Ormond Street Hospital a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "guys-st-thomas-news": { + "provider": "Guy's and St Thomas' NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hackney-council-news": { + "provider": "Hackney Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hammersmith-fulham-news": { + "provider": "Hammersmith and Fulham Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 2, + "failedRuns": 6, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "haringey-council-news": { + "provider": "Haringey Community Press", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "harrow-council-news": { + "provider": "Harrow Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "havering-council-news": { + "provider": "Havering Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "heathrow-media-centre": { + "provider": "Heathrow a Media Centre", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hillingdon-council-news": { + "provider": "Hillingdon Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "homerton-healthcare-news": { + "provider": "Homerton Healthcare NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hounslow-council-news": { + "provider": "Hounslow Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "imperial-healthcare-news": { + "provider": "Imperial College Healthcare NHS Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "islington-council-news": { + "provider": "Islington Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "kensington-chelsea-newsroom": { + "provider": "Royal Borough of Kensington and Chelsea a Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "kings-college-hospital-news": { + "provider": "King's College Hospital NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "kingston-council-news": { + "provider": "Kingston Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 61, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-21T08:24:19.478Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lambeth-council-news": { + "provider": "Lambeth Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lewisham-council-news": { + "provider": "Salamander News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lnwh-news": { + "provider": "London North West University Healthcare NHS Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-ambulance-news": { + "provider": "London Ambulance Service a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-city-airport-media-centre": { + "provider": "London City Airport a Media Centre", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-councils-news": { + "provider": "London Councils a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-fire-brigade-news": { + "provider": "London Fire Brigade a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-gov-home": { + "provider": "London.gov.uk", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-gov-press-releases-html": { + "provider": "London.gov.uk - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-gov-rss-80603": { + "provider": "Greater London Authority a RSS Feed 80603", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-gov-rss-80632": { + "provider": "Greater London Authority a RSS Feed 80632", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "mayor-of-london-press-releases": { + "provider": "Mayor of London a Press Releases", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "merton-council-news": { + "provider": "Merton Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 61, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-21T08:24:19.478Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "met-police-the-met-tag": { + "provider": "Metropolitan Police - The Met Tag", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 13, + "emptyRuns": 70, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 69, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "moorfields-news": { + "provider": "Moorfields Eye Hospital NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nelft-news": { + "provider": "North East London NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "newham-council-news": { + "provider": "Newham Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nhs-london-ncl-news": { + "provider": "NHS North Central London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nhs-london-nel-news": { + "provider": "NHS North East London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 61, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-21T10:07:46.576Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T10:07:46.576Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nhs-london-nwl-news": { + "provider": "NHS North West London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nhs-london-sel-news": { + "provider": "NHS South East London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nhs-london-swl-news": { + "provider": "NHS South West London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "north-middlesex-news": { + "provider": "North Middlesex University Hospital a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "oxleas-news": { + "provider": "Oxleas NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "port-of-london-authority-news": { + "provider": "Port of London Authority a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "redbridge-council-news": { + "provider": "Redbridge Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "richmond-council-news": { + "provider": "Richmond Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 65, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "royal-free-london-news": { + "provider": "Royal Free London NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "royal-greenwich-news": { + "provider": "Royal Borough of Greenwich a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 2, + "failedRuns": 6, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "slam-news": { + "provider": "South London and Maudsley NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "southwark-newsroom": { + "provider": "Southwark Council a Newsroom", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "st-georges-news": { + "provider": "St George's University Hospitals NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "sutton-council-news": { + "provider": "Sutton Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "swlstg-news": { + "provider": "South West London and St George's Mental Health NHS Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tavistock-portman-news": { + "provider": "Tavistock and Portman NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tfl-press-releases": { + "provider": "Transport for London - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tfl-press-releases-html": { + "provider": "Transport for London - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tower-hamlets-council-news": { + "provider": "Tower Hamlets Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uclh-news": { + "provider": "University College London Hospitals a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 58, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T11:46:02.615Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "waltham-forest-council-news": { + "provider": "Waltham Forest Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "wandsworth-council-news": { + "provider": "Wandsworth Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 65, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "westminster-city-council-news": { + "provider": "Westminster City Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "whittington-health-news": { + "provider": "Whittington Health a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "city-of-london-police-news": { + "provider": "National Crime Agency - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "city-of-london-police-news-html": { + "provider": "City of London Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "city-of-london-police-newsroom": { + "provider": "Metropolitan Police Service - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ct-policing-london": { + "provider": "Counter Terrorism Policing London", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "met-police-latest-news": { + "provider": "Metropolitan Police - Latest News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 2, + "successfulRuns": 99, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:18:46.625Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:18:46.625Z" + }, + "met-police-news": { + "provider": "Metropolitan Police Service a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 2, + "successfulRuns": 99, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:18:46.625Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:18:46.625Z" + }, + "london-assembly-press-releases": { + "provider": "London Assembly a Press Releases", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "mopac-html": { + "provider": "Mayor's Office for Policing and Crime", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-resilience": { + "provider": "Resilience First - Latest Updates", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T23:56:26.571Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 2, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T23:56:26.571Z", + "lastEmptyAt": "2026-04-20T11:00:44.891Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T23:15:54.554Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T23:56:26.571Z" + } + ], + "cooldownUntil": "2026-04-24T23:56:26.571Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T23:56:26.571Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-fcdo-travel-advice": { + "provider": "FCDO a Foreign Travel Advice Index", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-border-force": { + "provider": "Border Force (UK) a Announcements and Publications", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-ukvi": { + "provider": "UK Visas and Immigration a Announcements and Publications", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bbc-news-england-legacy": { + "provider": "BBC News a England (Legacy RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 28, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-18T11:15:29.208Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 6, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bbc-news-front-page-legacy": { + "provider": "BBC News a Front Page (Legacy RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 14, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bbc-news-uk": { + "provider": "BBC News a UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 25, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 15, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bbc-news-uk-politics-legacy": { + "provider": "BBC News a UK Politics (Legacy RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 10, + "failedRuns": 4, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-17T09:48:51.002Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T03:30:54.684Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T15:59:44.503Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-19T03:30:54.684Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "chatham-house-home": { + "provider": "Chatham House", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "chatham-house-security-defence": { + "provider": "Chatham House - Security and Defence", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "essex-police-news": { + "provider": "Essex Police a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-defence-intelligence": { + "provider": "UK Defence Intelligence a GOV.UK", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-terrorism-search": { + "provider": "GOV.UK Search - Terrorism", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "guardian-uk": { + "provider": "The Guardian a UK News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 23, + "emptyRuns": 35, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T05:47:56.833Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 54, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T00:10:46.625Z" + }, + "henry-jackson-society-news": { + "provider": "RUSI - Terrorism and Conflict", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hope-not-hate-home": { + "provider": "Hope not hate podcast", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "institute-global-home": { + "provider": "Institute for Global Change", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "kent-police-news": { + "provider": "Kent Police a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "mi5-news": { + "provider": "National Crime Agency - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "mi5-news-rss-direct": { + "provider": "MI5 - News RSS", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "national-crime-agency-news": { + "provider": "National Crime Agency a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "npcc-releases": { + "provider": "National Police Chiefs' Council - Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-uk-all-crime-leicester": { + "provider": "Police.uk - Street Crime Around Leicester", + "lane": "context", + "kind": "json", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 73, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 67, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T23:55:39.351Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T23:55:39.351Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-uk-stops-force-leicestershire": { + "provider": "Police.uk - Force Stops (Leicestershire)", + "lane": "context", + "kind": "json", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-uk-stops-street-leicester": { + "provider": "Police.uk - Street Stops Around Leicester", + "lane": "context", + "kind": "json", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "report-fraud-home": { + "provider": "Report Fraud", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "report-fraud-newsroom": { + "provider": "Report Fraud - Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "rusi-home": { + "provider": "RUSI", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 21, + "failedRuns": 2, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T03:30:54.684Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T03:30:54.684Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-19T03:30:54.684Z", + "quarantineReason": "Health score degraded to 20 after repeated failures", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "rusi-publications": { + "provider": "RUSI (Royal United Services Institute) a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "rusi-terrorism-conflict": { + "provider": "RUSI - Terrorism and Conflict", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T12:14:24.733Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T12:14:24.733Z" + } + ], + "cooldownUntil": "2026-04-23T22:14:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T21:04:21.166Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T22:14:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "skwawkbox": { + "provider": "Skwawkbox", + "lane": "context", + "kind": "playwright_html", + "lastCheckedAt": "2026-04-16T22:57:09.120Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 3, + "consecutiveFailures": 3, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T22:57:09.120Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T22:57:09.120Z" + } + ], + "cooldownUntil": "2026-04-23T21:24:00.000Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 32, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:24:00.000Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "sky-news-uk-rss": { + "provider": "Sky News UK a Top Stories (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 35, + "emptyRuns": 37, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-21T11:46:02.615Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T06:02:43.923Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 67, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T06:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-sun-all": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-sun-all-english": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-sun-homepage": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-sun-news-english": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-police-coroner-appeals-rss": { + "provider": "West Yorkshire Police - Coroner Appeals Feed", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 58, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T11:46:02.615Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "wiltshire-999s": { + "provider": "Wiltshire 999s", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "belfast-live": { + "provider": "Belfast Live", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 6, + "emptyRuns": 21, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 19, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T05:46:58.069Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 43, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "birmingham-mail": { + "provider": "Birmingham Mail", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "breaking-news-today": { + "provider": "Breaking News Today", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cambridge-news": { + "provider": "Cambridge News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "cooldownUntil": "2026-04-23T21:57:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-23T21:57:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "channel-4-news": { + "provider": "Channel 4 News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 12, + "emptyRuns": 22, + "failedRuns": 4, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-19T17:13:24.435Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-20T11:00:44.891Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T23:15:54.554Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T00:08:15.005Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T03:57:52.244Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T08:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 10, + "quarantined": true, + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T08:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "consett-magazine": { + "provider": "Consett Magazine", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "daily-echo": { + "provider": "Daily Echo", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "daily-express": { + "provider": "Daily Express", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "daily-mail-online": { + "provider": "Daily Mail Online - Popular Stories", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 19, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T23:55:39.351Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T23:55:39.351Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "daily-mirror": { + "provider": "Daily Mirror", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "daily-politics": { + "provider": "Daily Politics", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + } + ], + "cooldownUntil": "2026-04-23T22:03:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T22:03:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "deadline-news": { + "provider": "Deadline News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 23, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 500", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "quarantineReason": "Health score degraded to 20 after repeated failures", + "nextFetchAt": "2026-04-23T23:42:46.625Z" + }, + "evening-standard": { + "provider": "Evening Standard", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 3, + "emptyRuns": 24, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 19, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T05:46:58.069Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 38, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "glasgow-times": { + "provider": "Glasgow Times", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "grimsby-telegraph": { + "provider": "Grimsby Telegraph", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "herald-scotland-news": { + "provider": "Herald Scotland - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "huffpost-uk": { + "provider": "HuffPost UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "larne-times": { + "provider": "Larne Times", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "manchester-evening-news": { + "provider": "Manchester Evening News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "metro": { + "provider": "BBC News - UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "news-uk": { + "provider": "News UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "pinknews": { + "provider": "PinkNews", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 8, + "failedRuns": 5, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T13:19:06.686Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T00:15:46.625Z" + }, + "politics-co-uk": { + "provider": "Politics.co.uk", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "positive-news": { + "provider": "Positive News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scottish-field": { + "provider": "Scottish Field", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "surgezirc-uk": { + "provider": "SurgeZirc UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T11:47:27.254Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 15, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastEmptyAt": "2026-04-23T08:09:12.931Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T14:11:10.963Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "cooldownUntil": "2026-04-25T11:47:27.254Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T08:04:04.612Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T11:47:27.254Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-argus-news": { + "provider": "The Argus", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-bolton-news": { + "provider": "The Bolton News - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "church-of-england-newspaper": { + "provider": "Church of England Newspaper", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 25, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 15, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-daily-mash": { + "provider": "The Daily Mash", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 5, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T13:19:06.686Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + } + ], + "cooldownUntil": "2026-04-23T22:27:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-23T22:27:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "daily-record": { + "provider": "Daily Record", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "guardian-uk-top-stories": { + "provider": "The Guardian - UK Top Stories", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 12, + "failedRuns": 3, + "consecutiveFailures": 3, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-18T11:15:29.208Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T23:43:16.267Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T06:30:13.977Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "independent-top-stories": { + "provider": "The Independent - Top Stories", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 4, + "emptyRuns": 39, + "failedRuns": 2, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 10, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-19T16:03:49.134Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "cooldownUntil": "2026-04-24T08:18:46.625Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T08:18:46.625Z" + }, + "northern-echo-news": { + "provider": "The Northern Echo - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-poke": { + "provider": "The Poke", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scarborough-news": { + "provider": "The Scarborough News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-scotsman-news": { + "provider": "The Scotsman - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-scottish-sun": { + "provider": "The Scottish Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-sun": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-week-uk": { + "provider": "The Week UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 11, + "emptyRuns": 13, + "failedRuns": 3, + "consecutiveFailures": 3, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T11:07:28.674Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-19T18:05:04.781Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T08:39:19.161Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T05:23:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 16, + "quarantined": true, + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T05:23:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-york-press-news": { + "provider": "The York Press - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "wales-online": { + "provider": "WalesOnline", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "a-lady-in-london": { + "provider": "A Lady in London", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 22, + "failedRuns": 2, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T18:05:04.781Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + } + ], + "cooldownUntil": "2026-04-23T22:35:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T22:35:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "a-luxury-travel-blog": { + "provider": "A Luxury Travel Blog", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "age-uk-discover": { + "provider": "Age UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "alan-malcher": { + "provider": "Alan Malcher", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "arcticdry": { + "provider": "ArcticDry", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 25, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T08:04:04.612Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T08:04:04.612Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "britishbeautyblogger": { + "provider": "British Beauty Blogger", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "buy-firewood-direct": { + "provider": "Buy Firewood Direct", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "carly-rowena": { + "provider": "Carly Rowena", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cherished-holiday-homes": { + "provider": "Cherished Holiday Homes", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "chique-home-living": { + "provider": "Chique Home Living", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "clubwise-blog": { + "provider": "ClubWise Blog", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "disneyrollergirl": { + "provider": "Disneyrollergirl", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "elluminet-press": { + "provider": "9to5Mac", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Health score degraded to 20 after repeated failures", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "england-naturally": { + "provider": "England, Naturally", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 18, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-24T20:52:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 11, + "quarantined": true, + "quarantinedAt": "2026-04-23T03:28:47.210Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T20:52:47.210Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "evening-shire": { + "provider": "Evening Shire", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 23, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 12, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "cooldownUntil": "2026-04-24T08:18:46.625Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T08:18:46.625Z" + }, + "everything-zany": { + "provider": "Everything Zany", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 22, + "failedRuns": 3, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T14:03:06.243Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "faded-spring": { + "provider": "Emily Underworld", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "fmcg-gurus": { + "provider": "FMCG Gurus", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 22, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-24T00:17:46.625Z" + }, + "foreign-office-blogs": { + "provider": "Foreign Office Blogs", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "fresh-design-blog": { + "provider": "Fresh Design Blog", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ian-neate-blog": { + "provider": "9to5Mac", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "jollydeck": { + "provider": "JollyDeck", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lifestylelinked": { + "provider": "LifeStyleLinked", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "london-review-of-books": { + "provider": "London Review of Books", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "love-my-dress": { + "provider": "Love My Dress", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T06:12:01.477Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 520", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 520", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T06:35:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 14, + "quarantined": true, + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "quarantineReason": "Health score degraded to 14 after repeated failures", + "nextFetchAt": "2026-04-24T06:35:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "manic-mum-life": { + "provider": "Manic Mum Life", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 22, + "failedRuns": 3, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T14:03:06.243Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "marie-claire-uk": { + "provider": "Marie Claire UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "office-breaks": { + "provider": "Office Breaks", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "on-the-think-of": { + "provider": "On The Think Of", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "quadrant2design-exhibiting-guides": { + "provider": "Quadrant2Design Exhibiting Guides", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T11:47:27.254Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 21, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastEmptyAt": "2026-04-23T11:47:27.254Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "cooldownUntil": "2026-04-23T23:47:27.254Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T23:47:27.254Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "really-ree": { + "provider": "Really Ree", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 23, + "failedRuns": 3, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T14:03:06.243Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "rocknroll-bride": { + "provider": "Rock n Roll Bride", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "semibold": { + "provider": "Semibold", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 12, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "silly-old-sod": { + "provider": "Silly Old Sod", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 10, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T04:05:33.139Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-20T04:05:33.139Z" + } + ], + "cooldownUntil": "2026-04-24T07:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T04:05:33.139Z", + "quarantineReason": "Persistent timeouts — endpoint may be overloaded or unreachable", + "nextFetchAt": "2026-04-24T07:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "silverspoon-london": { + "provider": "SilverSpoon London", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "sks-business-services": { + "provider": "SKS Business Services", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hnd-assignment-help-uk-medium": { + "provider": "Stories by HND Assignment Help UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "streetspace": { + "provider": "Streetspace", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "tenura": { + "provider": "Tenura", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "thank-you-for-the-days": { + "provider": "Thank you for the days", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 14, + "failedRuns": 4, + "consecutiveFailures": 2, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-19T14:11:10.963Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-curry-guy": { + "provider": "The Curry Guy", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "real-talk-uk": { + "provider": "The Real Talk UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "the-stratfordian": { + "provider": "The Stratfordian", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "training-express": { + "provider": "Training Express", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-constitutional-law-association": { + "provider": "UK Constitutional Law Association", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-fundraising-blog": { + "provider": "UK Fundraising", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-human-rights-blog": { + "provider": "UK Human Rights Blog", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "vershd": { + "provider": "Vershd", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "vuelio-uk": { + "provider": "Vuelio", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "avon-and-somerset-police-news-html": { + "provider": "Avon and Somerset Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "avon-somerset-police-news": { + "provider": "Avon & Somerset Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bedfordshire-police-news": { + "provider": "Bedfordshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "bedfordshire-police-news-search": { + "provider": "Bedfordshire Police - News Search", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "british-transport-police-news": { + "provider": "British Transport Police Authority - News Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "btp-british-transport-police-news-html": { + "provider": "British Transport Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cambridgeshire-police-news-search": { + "provider": "Cambridgeshire Police - News Search", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cheshire-police-news": { + "provider": "Cheshire Constabulary - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cleveland-police-news": { + "provider": "Cleveland Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cps-news-centre": { + "provider": "Crown Prosecution Service a News Centre", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ct-policing-north-west": { + "provider": "Counter Terrorism Policing North West", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ct-policing-uk-latest-news": { + "provider": "Counter Terrorism Policing UK a Latest News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ct-policing-uk-rss-feed": { + "provider": "Counter Terrorism Policing UK - Latest News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cumbria-police-news": { + "provider": "Cumbria Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cumbria-police-newsroom": { + "provider": "Cumbria Police - Newsroom", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "derbyshire-police-news": { + "provider": "Derbyshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "devon-and-cornwall-police-newsroom": { + "provider": "Devon and Cornwall Police - Newsroom", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "devon-cornwall-police-news": { + "provider": "Devon and Cornwall Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dorset-police-news": { + "provider": "Dorset Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dorset-police-newsroom": { + "provider": "Dorset Police - Newsroom", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "durham-constabulary-news": { + "provider": "Durham Constabulary a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "durham-police-durham-news": { + "provider": "Durham Police - Durham News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dyfed-powys-police-news": { + "provider": "Dyfed-Powys Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "essex-police-news-html": { + "provider": "Essex Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gloucestershire-police-news": { + "provider": "Gloucestershire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gmp-news": { + "provider": "Greater Manchester Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "greater-manchester-police-news": { + "provider": "Greater Manchester Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gwent-police-news": { + "provider": "Gwent Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hampshire-police-news": { + "provider": "Hampshire & Isle of Wight Constabulary a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hertfordshire-police-news": { + "provider": "Hertfordshire Constabulary a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "humberside-police-news-search": { + "provider": "Humberside Police - News Search", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "kent-police-news-html": { + "provider": "Kent Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lancashire-constabulary-news": { + "provider": "Lancashire Constabulary a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "leicestershire-police-news": { + "provider": "National Crime Agency - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lincolnshire-police-news": { + "provider": "Lincolnshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "merseyside-police-news": { + "provider": "Merseyside Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "merseyside-police-news-html": { + "provider": "Merseyside Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "norfolk-constabulary-news": { + "provider": "Norfolk Constabulary - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "north-wales-police-news": { + "provider": "North Wales Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "north-yorkshire-police-news-html": { + "provider": "North Yorkshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "northamptonshire-police-news-html": { + "provider": "Northamptonshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "northumbria-police-news": { + "provider": "North East Bylines", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "northumbria-police-northumbria-news": { + "provider": "Northumbria Police - Northumbria News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nottinghamshire-police-news": { + "provider": "Nottinghamshire Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nottinghamshire-police-nottinghamshire-news": { + "provider": "Nottinghamshire Police - Nottinghamshire News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-scotland-news": { + "provider": "Police Scotland news", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T19:32:35.264Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Health score degraded to 23 after repeated failures", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "psni-latest-news": { + "provider": "Police Service of Northern Ireland - Latest News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "psni-news": { + "provider": "Police Service of Northern Ireland a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "south-wales-police-news": { + "provider": "South Wales Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "south-yorkshire-police-news": { + "provider": "South Yorkshire Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "staffordshire-police-news": { + "provider": "Staffordshire Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "staffordshire-police-staffordshire-news": { + "provider": "Staffordshire Police - Staffordshire News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "suffolk-constabulary-news": { + "provider": "Suffolk Constabulary - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "surrey-police-news": { + "provider": "Surrey Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "sussex-police-news": { + "provider": "Sussex Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "thames-valley-police-news": { + "provider": "Thames Valley Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "thames-valley-police-news-html": { + "provider": "Thames Valley Police - Thames Valley News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "warwickshire-police-news": { + "provider": "Warwickshire Connected - Latest Alerts", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 2, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-mercia-police-news-html": { + "provider": "West Mercia Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-midlands-police-news": { + "provider": "West Midlands Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-police-all-rss": { + "provider": "West Yorkshire Police - All Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-police-appeals-rss": { + "provider": "West Yorkshire Police - Appeals Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-police-missing-rss": { + "provider": "West Yorkshire Police - Missing Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-police-news": { + "provider": "West Yorkshire Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 59, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T11:46:02.615Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-police-news-appeals": { + "provider": "West Yorkshire Police - News Appeals", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-police-news-rss": { + "provider": "West Yorkshire Police - News Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-police-releases-rss": { + "provider": "West Yorkshire Police - Releases Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "wiltshire-police-news": { + "provider": "Wiltshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "attorney-generals-office-html": { + "provider": "Attorney General's Office", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cabinet-office-html": { + "provider": "Cabinet Office", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cps-homepage": { + "provider": "Crown Prosecution Service", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "crown-office-news": { + "provider": "Crown Office and Procurator Fiscal Service - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "echr-uk-grand-chamber-rss": { + "provider": "European Court of Human Rights - UK Grand Chamber RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "extremism-commission-blog": { + "provider": "Commission for Countering Extremism - Blog", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "fcdo-html": { + "provider": "Foreign, Commonwealth & Development Office", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 13, + "emptyRuns": 70, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 69, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-scot-access-to-justice-latest": { + "provider": "Scottish Government - Access to Justice Latest", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-cabinet-office-atom": { + "provider": "Cabinet Office a GOV.UK Atom Feed", + "lane": "oversight", + "kind": "atom", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-hmcts": { + "provider": "HMCTS a Courts and Tribunals Announcements", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-hmic": { + "provider": "HM Inspectorate of Constabulary a GOV.UK", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-home-office-atom": { + "provider": "UK Home Office a Atom Feed", + "lane": "oversight", + "kind": "atom", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-ipco": { + "provider": "Investigatory Powers Commissioner's Office a GOV.UK", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-mod-atom": { + "provider": "Ministry of Defence a GOV.UK Atom Feed", + "lane": "oversight", + "kind": "atom", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-moj-atom": { + "provider": "Ministry of Justice a GOV.UK Atom Feed", + "lane": "oversight", + "kind": "atom", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-news-and-communications-atom": { + "provider": "GOV.UK - News and Communications Atom", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 17, + "emptyRuns": 68, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 24, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-20T21:17:14.299Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-parliament-jcnss": { + "provider": "UK Parliament a Joint Committee on National Security Strategy", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hmiprisons-news": { + "provider": "HM Inspectorate of Prisons - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hmiprobation-news": { + "provider": "HM Inspectorate of Probation - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "home-office-media-blog": { + "provider": "Home Office Media Blog", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "independent-reviewer-terrorism-legislation": { + "provider": "Independent Reviewer of Terrorism Legislation a Reports", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "independent-reviewer-terrorism-legislation-html": { + "provider": "Independent Reviewer of Terrorism Legislation", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "joint-committee-human-rights-html": { + "provider": "Joint Committee on Human Rights", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 15, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T19:31:23.009Z", + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T19:31:23.009Z" + } + ], + "cooldownUntil": "2026-04-25T19:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-25T19:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "judiciary-rss-feeds-page": { + "provider": "Judiciary UK - RSS Feeds", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "judiciary-uk-announcements-feed": { + "provider": "Judiciary UK - Announcements Feed", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "judiciary-uk-judgments-feed": { + "provider": "Judiciary UK - Judgments Feed", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "judiciary-uk-news": { + "provider": "Judiciary of England and Wales a News", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-22T16:17:11.443Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 34, + "failedRuns": 3, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T16:17:11.443Z", + "lastEmptyAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T11:44:44.316Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T16:17:11.443Z" + } + ], + "cooldownUntil": "2026-04-24T16:17:11.443Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T16:17:11.443Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "judiciary-uk-publications-feed": { + "provider": "Judiciary UK - Publications Feed", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lords-in-focus-rss": { + "provider": "Hansard Society - Despatch Box", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "lords-library-notes-rss": { + "provider": "Hansard Society - Despatch Box", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ministry-of-defence-html": { + "provider": "Ministry of Defence", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 69, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 69, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ons-html": { + "provider": "Office for National Statistics", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "parliament-all-bills-rss": { + "provider": "Parliament - All Bills RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "parliament-private-bills-rss": { + "provider": "Parliament - Private Bills RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "parliament-public-bills-rss": { + "provider": "Parliament - Public Bills RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-ombudsman-current-investigations": { + "provider": "Police Ombudsman - Current Investigations", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-uk-crime-categories-2024-01": { + "provider": "Police.uk - Crime Categories (2024-01)", + "lane": "oversight", + "kind": "json", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-uk-crimes-street-dates": { + "provider": "Police.uk - Street Crime Dataset Dates", + "lane": "oversight", + "kind": "json", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-uk-outcomes-at-location-1609590": { + "provider": "Police Data UK - Outcomes At Location API Docs", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "police-uk-outcomes-for-crime-e11dade0": { + "provider": "Police.uk - Outcomes For Crime e11dade0", + "lane": "oversight", + "kind": "json", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-fai-determinations-rss": { + "provider": "Scottish Courts - Fatal Accident Inquiry Determinations RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-fai-hearings-rss": { + "provider": "Scottish Courts - Fatal Accident Inquiry Hearings RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-high-court-justiciary-judgments-rss": { + "provider": "Scottish Courts - High Court of Justiciary Judgments RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-high-court-practice-notes-rss": { + "provider": "Scottish Courts - High Court of Justiciary Practice Notes RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-judgments-rss": { + "provider": "Scottish Courts - Judgments RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-news-articles-rss": { + "provider": "Scottish Courts - News Articles RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-publications-rss": { + "provider": "Scottish Courts - Publications RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-rss-feeds-page": { + "provider": "Scottish Courts and Tribunals - RSS Feeds", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 65, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scotcourts-sheriff-criminal-practice-notes-rss": { + "provider": "Scottish Courts - Sheriff Court Criminal Practice Notes RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "scottish-government-justice-news": { + "provider": "Scottish Government - Justice and Safety", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "serious-fraud-office-news": { + "provider": "Serious Fraud Office a News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 57, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T04:05:33.139Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T04:05:33.139Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-home-office": { + "provider": "UK Home Office a Announcements and Publications", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 1, + "successfulRuns": 94, + "emptyRuns": 4, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:18:46.625Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-19T18:05:04.781Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:18:46.625Z" + }, + "uk-iopc-news": { + "provider": "Independent Office for Police Conduct a News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-ncsc-news": { + "provider": "National Cyber Security Centre (UK) a News", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 5, + "successfulRuns": 98, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:18:46.625Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:18:46.625Z" + }, + "uk-ncsc-threat-reports": { + "provider": "National Cyber Security Centre (UK) a Threat Reports", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-16T16:57:11.406Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T21:08:30.446Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-parliament-business-news": { + "provider": "UK Parliament - Business News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-parliament-defence-committee": { + "provider": "UK Parliament a Defence Select Committee", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 68, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": "2026-04-23T08:09:12.931Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-parliament-foreign-affairs-committee": { + "provider": "UK Parliament a Foreign Affairs Select Committee", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-parliament-home-affairs-committee": { + "provider": "UK Parliament a Home Affairs Committee (News)", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-parliament-isc": { + "provider": "UK Parliament a Intelligence and Security Committee (Reports & News)", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 2, + "failedRuns": 6, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-parliament-justice-committee": { + "provider": "UK Parliament a Justice Select Committee", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "act-campaign": { + "provider": "ACT Awareness Campaign", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cheshire-police-alert": { + "provider": "Cheshire Police Alert", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 53, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ct-policing-prevent-programme": { + "provider": "Counter Terrorism Policing - Prevent", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ct-policing-what-you-can-do": { + "provider": "Counter Terrorism Policing - What You Can Do", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dc-police-community-messaging": { + "provider": "Dorset and Cornwall Police - Community Messaging", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 53, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "devon-cornwall-alerts": { + "provider": "Devon and Cornwall Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 53, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gnet-research": { + "provider": "Global Network on Extremism & Technology (GNET) a Main Feed", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 4, + "successfulRuns": 89, + "emptyRuns": 5, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:18:46.625Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T00:01:46.625Z" + }, + "gov-uk-contest-strategy": { + "provider": "GOV.UK a CONTEST Counter-Terrorism Strategy", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-counter-extremism-commissioner": { + "provider": "Counter Extremism Commissioner a GOV.UK", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 73, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 71, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T19:01:30.233Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T19:01:30.233Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-prevent-strategy": { + "provider": "UK Home Office - Prevent duty guidance", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-report-terrorism": { + "provider": "GOV.UK - Report Terrorism", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-terrorism-national-emergency": { + "provider": "GOV.UK - Terrorism National Emergency", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "icsr-kcl": { + "provider": "International Centre for the Study of Radicalisation (ICSR) a Updates", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "met-office-seasonal-advice": { + "provider": "Met Office - Seasonal Advice", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "mi5-terrorism-threat-levels": { + "provider": "MI5 - Terrorism Threat Levels", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "mi5-uk-threat-level": { + "provider": "MI5 (Security Service) a UK Threat Level", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "my-community-alert": { + "provider": "My Community Alert", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T11:47:27.254Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 45, + "failedRuns": 2, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastEmptyAt": "2026-04-23T10:13:21.253Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T19:28:57.337Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "cooldownUntil": "2026-04-25T11:47:27.254Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T11:47:27.254Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "north-wales-community-alert": { + "provider": "North Wales Community Alert", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 38, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 10, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T23:15:54.554Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-17T05:46:58.069Z" + }, + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-20T23:15:54.554Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "northamptonshire-talking": { + "provider": "Northamptonshire Talking", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "npsa-blog": { + "provider": "NPSA - Blog", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "npsa-blog-news": { + "provider": "NPSA - Blog News", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "npsa-national-protective-security-authority": { + "provider": "NPSA - Activity on GOV.UK", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "protectuk": { + "provider": "ProtectUK (NPSA) a Protective Security Guidance", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "south-yorkshire-police-alerts": { + "provider": "South Yorkshire Police Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 53, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "stay-in-the-know-home": { + "provider": "Stay In The Know - Community Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 53, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "stay-in-the-know-latest-alerts": { + "provider": "Stay In The Know - Latest Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 52, + "failedRuns": 2, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-ncsc-all-rss": { + "provider": "UK NCSC - All Updates RSS", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 69, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 69, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-ncsc-homepage": { + "provider": "UK NCSC - Homepage", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "uk-prevent-duty-guidance": { + "provider": "GOV.UK a Prevent Duty Guidance (Collection)", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-midlands-community-alerts": { + "provider": "WMNow - Community Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 53, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "west-yorkshire-community-alert": { + "provider": "West Yorkshire Community Alert", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 53, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gov-uk-proscribed-terrorist-orgs": { + "provider": "GOV.UK a Proscribed Terrorist Organisations", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "hm-treasury-html": { + "provider": "HM Treasury", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ofsi-blog-home": { + "provider": "OFSI - Blog", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "otsi-blog-home": { + "provider": "OTSI - Blog", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 1, + "successfulRuns": 94, + "emptyRuns": 4, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:18:46.625Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-19T18:05:04.781Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:18:46.625Z" + }, + "uk-ofsi-blog": { + "provider": "Office of Financial Sanctions Implementation (OFSI) a Blog", + "lane": "sanctions", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 2, + "successfulRuns": 98, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:18:46.625Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:18:46.625Z" + }, + "uk-sanctions-list": { + "provider": "UK Sanctions List (FCDO) a Consolidated List (XML Service)", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "ctc-sentinel": { + "provider": "Combating Terrorism Center at West Point - CTC Sentinel", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dhs-press-releases": { + "provider": "US Department of Homeland Security - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "dni-press-releases": { + "provider": "Office of the Director of National Intelligence - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "doj-nsd-press-releases": { + "provider": "U.S. Department of Justice - National Security Division Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "fbi-national-press-releases": { + "provider": "FBI - National Press Releases (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "fbi-stories": { + "provider": "FBI - Top Stories (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "fbi-top-stories": { + "provider": "FBI - Top Stories (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "gw-program-extremism": { + "provider": "George Washington University - Program on Extremism", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "nsa-cybersecurity-news": { + "provider": "NSA - Cybersecurity Advisories & Guidance", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "rand-terrorism-topic": { + "provider": "RAND - Terrorism Topic Updates", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "rewards-for-justice": { + "provider": "U.S. Department of State - Rewards for Justice", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "start-baad-database": { + "provider": "National Consortium for the Study of Terrorism (START) - Big Allied and Dangerous (BAAD) Database", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "start-center-publications": { + "provider": "START Center (UMD) - News & Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "state-dept-terrorism": { + "provider": "US State Department - Bureau of Counterterrorism", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "cisa-cybersecurity-advisories": { + "provider": "CISA - Cybersecurity Alerts & Advisories", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 13, + "emptyRuns": 70, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 69, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "us-house-homeland-security": { + "provider": "US House Committee on Homeland Security - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "us-treasury-ofac-press-releases": { + "provider": "U.S. Treasury (OFAC) - Press Releases", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 73, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 73, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T15:11:26.228Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T15:11:26.228Z" + } + ], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" + }, + "us-treasury-ofac-recent-actions": { + "provider": "U.S. Treasury (OFAC) - Recent Actions", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T20:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T20:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:18:46.625Z" } } } diff --git a/source-quarantine.html b/source-quarantine.html index ba6c08a6..f6ca8bd9 100644 --- a/source-quarantine.html +++ b/source-quarantine.html @@ -269,13 +269,13 @@

Source Quarantine Review

- Generated: 2026-04-23T20:25:40.062Z - Low-health sources: 0 + Generated: 2026-04-23T20:18:46.625Z + Low-health sources: 528 Pending suggestions: 0 SLA: deprioritised, auto-recheck 24h+ - New this week: 0 - Avg health score: 0/100 - Avg time in quarantine: 0h + New this week: 235 + Avg health score: 3/100 + Avg time in quarantine: 141h Re-quarantine rate: 0%
@@ -455,7 +455,7 @@

Feed Audit

? 'Data mode: live API (restore enabled)' : 'Data mode: live read-only (restore unavailable)'; meta.innerHTML = [ - 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T20:25:40.062Z') + '', + 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T20:18:46.625Z') + '', 'Low-health sources: ' + escapeHtml(currentEntries.length) + '', 'Pending suggestions: ' + escapeHtml(currentSuggestions.length) + '', 'SLA: deprioritised, auto-recheck 24h+', From e3db83235e26d25cbf50dc9c57d03ff4a44a0b2e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 20:57:50 +0000 Subject: [PATCH 4/9] chore: update remediated source endpoints Agent-Logs-Url: https://github.com/potemkin666/AlbertAlert/sessions/4436d10f-167e-4173-96ac-e9bb6377e622 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- data/sources.json | 40 +++++++++++------------ data/sources/international/context.json | 4 +-- data/sources/international/oversight.json | 4 +-- data/sources/london/context.json | 32 +++++++++--------- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/data/sources.json b/data/sources.json index cfcd4bf4..2a0d9677 100644 --- a/data/sources.json +++ b/data/sources.json @@ -1553,13 +1553,13 @@ { "id": "osce-press-releases", "provider": "OSCE a Press Releases", - "endpoint": "https://www.osce.org/press-releases", + "endpoint": "https://news.osce.org/news/list?item_type=press-release&lang=en&page=1", "kind": "html", "lane": "context", "region": "international", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "OSCE press releases are provided as web pages; using the press release index.", + "comment": "OSCE newsroom press-release listing filtered to press releases for a stable, current index surface.", "refreshEveryHours": 1 }, { @@ -1666,13 +1666,13 @@ { "id": "unoct-news", "provider": "UN Office of Counter-Terrorism (UNOCT) - News", - "endpoint": "https://www.un.org/counterterrorism/news", + "endpoint": "https://www.un.org/counterterrorism/en/news-articles", "kind": "html", "lane": "oversight", "region": "international", "isTrustedOfficial": true, "requiresKeywordMatch": false, - "comment": "UNOCT does not consistently publish RSS; using the official news page.", + "comment": "UNOCT news/articles page used as the current official listing for Counter-Terrorism updates.", "refreshEveryHours": 1 }, { @@ -1920,13 +1920,13 @@ { "id": "croydon-council-news", "provider": "Croydon Council a News", - "endpoint": "https://news.croydon.gov.uk/", + "endpoint": "https://news.croydon.gov.uk/category/recent-news/", "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Croydon newsroom used for South London transport and public-safety corroboration.", + "comment": "Croydon recent-news listing used for a cleaner borough news index and London corroboration.", "refreshEveryHours": 1 }, { @@ -2063,13 +2063,13 @@ { "id": "hillingdon-council-news", "provider": "Hillingdon Council a News", - "endpoint": "https://www.hillingdon.gov.uk/news", + "endpoint": "https://pre.hillingdon.gov.uk/news", "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Hillingdon borough news used for Heathrow corridor and West London local context.", + "comment": "Hillingdon canonical news target used for Heathrow corridor and West London local context.", "refreshEveryHours": 1 }, { @@ -2111,13 +2111,13 @@ { "id": "islington-council-news", "provider": "Islington Council a News", - "endpoint": "https://www.islington.media/", + "endpoint": "https://www.islington.media/news/", "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Islington borough newsroom used for local London emergency and community-safety corroboration.", + "comment": "Islington direct news listing used for local London emergency and community-safety corroboration.", "refreshEveryHours": 1 }, { @@ -2159,13 +2159,13 @@ { "id": "lambeth-council-news", "provider": "Lambeth Council a News", - "endpoint": "https://love.lambeth.gov.uk/", + "endpoint": "https://love.lambeth.gov.uk/all-posts/", "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Lambeth news used for central-south London incident context and civic response.", + "comment": "Lambeth all-posts listing used for a cleaner borough news index and civic-response context.", "refreshEveryHours": 1 }, { @@ -2265,26 +2265,26 @@ }, { "id": "london-gov-rss-80603", - "provider": "Greater London Authority a RSS Feed 80603", - "endpoint": "https://www.london.gov.uk/rss-feeds/80603", - "kind": "rss", + "provider": "Mayor of London - Press Releases", + "endpoint": "https://www.london.gov.uk/media-centre/mayors-press-releases", + "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "GLA CMS feed ID 80603. Verify content category against the live feed; likely safety, policing, or resilience-related GLA updates.", + "comment": "Stable Mayor's press releases page used in place of intermittently unresolved RSS feed ID 80603.", "refreshEveryHours": 1 }, { "id": "london-gov-rss-80632", - "provider": "Greater London Authority a RSS Feed 80632", - "endpoint": "https://www.london.gov.uk/rss-feeds/80632", - "kind": "rss", + "provider": "London Assembly - Press Releases", + "endpoint": "https://www.london.gov.uk/who-we-are/what-london-assembly-does/london-assembly-press-releases", + "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "GLA CMS feed ID 80632. Verify content category against the live feed for specific topic or committee coverage.", + "comment": "Stable London Assembly press releases page used in place of intermittently unresolved RSS feed ID 80632.", "refreshEveryHours": 1 }, { diff --git a/data/sources/international/context.json b/data/sources/international/context.json index 5dc8b76d..90003555 100644 --- a/data/sources/international/context.json +++ b/data/sources/international/context.json @@ -220,13 +220,13 @@ { "id": "osce-press-releases", "provider": "OSCE a Press Releases", - "endpoint": "https://www.osce.org/press-releases", + "endpoint": "https://news.osce.org/news/list?item_type=press-release&lang=en&page=1", "kind": "html", "lane": "context", "region": "international", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "OSCE press releases are provided as web pages; using the press release index." + "comment": "OSCE newsroom press-release listing filtered to press releases for a stable, current index surface." }, { "id": "resolve-network-research", diff --git a/data/sources/international/oversight.json b/data/sources/international/oversight.json index 97109ed7..476945bd 100644 --- a/data/sources/international/oversight.json +++ b/data/sources/international/oversight.json @@ -14,13 +14,13 @@ { "id": "unoct-news", "provider": "UN Office of Counter-Terrorism (UNOCT) - News", - "endpoint": "https://www.un.org/counterterrorism/news", + "endpoint": "https://www.un.org/counterterrorism/en/news-articles", "kind": "html", "lane": "oversight", "region": "international", "isTrustedOfficial": true, "requiresKeywordMatch": false, - "comment": "UNOCT does not consistently publish RSS; using the official news page." + "comment": "UNOCT news/articles page used as the current official listing for Counter-Terrorism updates." }, { "id": "unsc-counter-terrorism-committee", diff --git a/data/sources/london/context.json b/data/sources/london/context.json index 967a3cb2..a5509586 100644 --- a/data/sources/london/context.json +++ b/data/sources/london/context.json @@ -124,13 +124,13 @@ { "id": "croydon-council-news", "provider": "Croydon Council a News", - "endpoint": "https://news.croydon.gov.uk/", + "endpoint": "https://news.croydon.gov.uk/category/recent-news/", "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Croydon newsroom used for South London transport and public-safety corroboration." + "comment": "Croydon recent-news listing used for a cleaner borough news index and London corroboration." }, { "id": "ealing-council-news", @@ -256,13 +256,13 @@ { "id": "hillingdon-council-news", "provider": "Hillingdon Council a News", - "endpoint": "https://www.hillingdon.gov.uk/news", + "endpoint": "https://pre.hillingdon.gov.uk/news", "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Hillingdon borough news used for Heathrow corridor and West London local context." + "comment": "Hillingdon canonical news target used for Heathrow corridor and West London local context." }, { "id": "homerton-healthcare-news", @@ -300,13 +300,13 @@ { "id": "islington-council-news", "provider": "Islington Council a News", - "endpoint": "https://www.islington.media/", + "endpoint": "https://www.islington.media/news/", "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Islington borough newsroom used for local London emergency and community-safety corroboration." + "comment": "Islington direct news listing used for local London emergency and community-safety corroboration." }, { "id": "kensington-chelsea-newsroom", @@ -344,13 +344,13 @@ { "id": "lambeth-council-news", "provider": "Lambeth Council a News", - "endpoint": "https://love.lambeth.gov.uk/", + "endpoint": "https://love.lambeth.gov.uk/all-posts/", "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Lambeth news used for central-south London incident context and civic response." + "comment": "Lambeth all-posts listing used for a cleaner borough news index and civic-response context." }, { "id": "lewisham-council-news", @@ -442,25 +442,25 @@ }, { "id": "london-gov-rss-80603", - "provider": "Greater London Authority a RSS Feed 80603", - "endpoint": "https://www.london.gov.uk/rss-feeds/80603", - "kind": "rss", + "provider": "Mayor of London - Press Releases", + "endpoint": "https://www.london.gov.uk/media-centre/mayors-press-releases", + "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "GLA CMS feed ID 80603. Verify content category against the live feed; likely safety, policing, or resilience-related GLA updates." + "comment": "Stable Mayor's press releases page used in place of intermittently unresolved RSS feed ID 80603." }, { "id": "london-gov-rss-80632", - "provider": "Greater London Authority a RSS Feed 80632", - "endpoint": "https://www.london.gov.uk/rss-feeds/80632", - "kind": "rss", + "provider": "London Assembly - Press Releases", + "endpoint": "https://www.london.gov.uk/who-we-are/what-london-assembly-does/london-assembly-press-releases", + "kind": "html", "lane": "context", "region": "london", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "GLA CMS feed ID 80632. Verify content category against the live feed for specific topic or committee coverage." + "comment": "Stable London Assembly press releases page used in place of intermittently unresolved RSS feed ID 80632." }, { "id": "mayor-of-london-press-releases", From bd5937eb06a55f22b5eaa8be3cab401cd5e837e6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:03:41 +0000 Subject: [PATCH 5/9] Plan source endpoint updates for requested EU/Europe IDs Agent-Logs-Url: https://github.com/potemkin666/AlbertAlert/sessions/4c72e8f5-1fd3-4051-93ce-07bfe2b8854c Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- data/albertalert.sqlite | Bin 2113536 -> 2113536 bytes data/quarantined-sources.json | 18722 +-------------------- data/source-remediation-sweep.json | 2 +- data/top-20-source-remediation.json | 2 +- live-alerts.json | 22818 +------------------------- source-quarantine.html | 12 +- 6 files changed, 228 insertions(+), 41328 deletions(-) diff --git a/data/albertalert.sqlite b/data/albertalert.sqlite index 92e3e91a2ae178d554e357b81646647df1859f5c..47ca66fcb3d1165ce2e6d45aadb7b86316caf00d 100644 GIT binary patch delta 1934 zcmb7E&u`mg7>@1OaoVO`mzFe5*SH5dt*tA^X;PAqPNSlX19W2%h#}Fr@t4$NvBPJ( z?M`k)#10(Tgr*2C@F#5a5OG5sVFzv#w{hdnWtvj9*Us!TQ9Q9vd2;ag>3yH){qYfaT)DkQ{CB9bVI|pH}s#c1fLM!wrGLaW|p5>(E+lnkxL zYx@Z6N_Ed5muIN7cZYSIFKeoS4h?c?mRj$-P}H&_Lqwgt5T`O^^#D?6RV>wbcz)+W zmH?3L2U)803pY+a4n#g+nrvqDx9}o;H+VF`PLJIO0-Z| zm=3dWip79^!bKk$TU~YB6;Bwqg^=9SY0DM`G0O{UyqGSDsl1TRi`ms|Hg$d2_c^}{ z`+FPzOHBlcg?pFIS&g&J3(@slGRgwcFwnG_vK~*nYF=?%mhZdOa!7jD@OBuLS1}P| zKAPH@r_>2yMVzwPe~q!`QZ$`Oyn^S;?z${DyUlhuzPx%}h6$hQIz@c+jM6DWgb7`> z8dJ^XXfBuZ>308Ix&*h~L3Jp4V{1Qt%{s=1&VbGG4)dG>1OYUF0fYc7APg7*i~`00 z5x_WL0&oT}2{;Rg0;T}dfHwd!zziS`m<1#NbAWSg=K1`8e@?ONMqpxUd@FKs?DFWF z;gfKZ-GH4~WUa>M>R6zdxL7z?IA17+{6xYYB8=q9@Qvq%imAiq^Oa0_cYU`arLtl= zQz=(AwOY+o7322lE&4>mU+8;UoqPANZb_<)WbRTKYr4*TgsKol@2!|(r&T4}Ris;P zj|LXfr7WzKgj_x?5QOW$a^KtMhsI~M2q-KT8dNf#8<1$7+Svh({R84j++CA$ zXgBj#P7sBxoJ;j4#ulp>214Am@*a}STS(_NHPe>Bmk`Dp27&tuI^ZrN2`g$9#_OG~ zEg}s@{g|rRll)jXZho7r2mUd42*`N*^q8y9 z(3afM&jgB&@rB{o=H~_-^evwTyUYek-)ofZg`ajXq_O>=n*$O#Y3|=hGFG2Ex>-*7 zznfvWLr9%3A+)p1|5rhO`&Qie{k4S-bQ@s5-s#jK3Ha{)tI6s2dW1{UUbCaM T{-);>t@#2MY0s>4|FACrSrSzk delta 344 zcmWO0u}cDB9L8~fzIU&8>Umn4re-&kON$N~6x0wzOW5QTS!9tAot!zeT@X367!F5+ z{tqSe5^W6);?UY=TMbPu5nc8SANcZ2k8Pim4ebSource Quarantine Review
- Generated: 2026-04-23T20:18:46.625Z - Low-health sources: 528 + Generated: 2026-04-23T21:03:26.661Z + Low-health sources: 0 Pending suggestions: 0 SLA: deprioritised, auto-recheck 24h+ - New this week: 235 - Avg health score: 3/100 - Avg time in quarantine: 141h + New this week: 0 + Avg health score: 0/100 + Avg time in quarantine: 0h Re-quarantine rate: 0%
@@ -455,7 +455,7 @@

Feed Audit

? 'Data mode: live API (restore enabled)' : 'Data mode: live read-only (restore unavailable)'; meta.innerHTML = [ - 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T20:18:46.625Z') + '', + 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T21:03:26.661Z') + '', 'Low-health sources: ' + escapeHtml(currentEntries.length) + '', 'Pending suggestions: ' + escapeHtml(currentSuggestions.length) + '', 'SLA: deprioritised, auto-recheck 24h+', From a475d76dc368b60c549538580fe7db26697e26cb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:04:34 +0000 Subject: [PATCH 6/9] Update requested EU and Europe source links to active replacements Agent-Logs-Url: https://github.com/potemkin666/AlbertAlert/sessions/4c72e8f5-1fd3-4051-93ce-07bfe2b8854c Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- data/albertalert.sqlite | Bin 2113536 -> 2113536 bytes data/quarantined-sources.json | 2 +- data/source-remediation-sweep.json | 2 +- data/sources.json | 38 ++++++------ data/sources/eu/context.json | 6 +- data/sources/eu/incidents.json | 6 +- data/sources/eu/oversight.json | 20 +++---- data/sources/europe/oversight.json | 6 +- data/top-20-source-remediation.json | 2 +- live-alerts.json | 88 +++++++++++++++++----------- source-quarantine.html | 4 +- 11 files changed, 97 insertions(+), 77 deletions(-) diff --git a/data/albertalert.sqlite b/data/albertalert.sqlite index 47ca66fcb3d1165ce2e6d45aadb7b86316caf00d..c0b18c5117276415b8bb6ff59a3255a8e4581f8a 100644 GIT binary patch delta 735 zcmb`_J4?e*6bJC$+@wuX`!cPzwl#4PtX9%TB54(0iwa@{CnpCH9E7UXu8D*?Srmth zgO4xZphCO5Dvn(``4tqY6lp!6rLICR{FXo5bKvkd3=o>+BJ*hLZsU3d6^`_x zj*2=}*0KF&uxfKH+bvdcK61m%DQ$S{c#nT}T=E(B4pn{dKB1smA4WJegWcCNgq5lhDQ$Ra^gOUfF%eUK)vKvthUCw?>2sO%zzfvWVQ)@ysIC zwMFSq+(dm&+s`xIR!m4K;on_L4V>xXuBQghW0W}e<>I^9AjW81bTBsl0tZ+L!XIc&gNum}hi`=4 z$&lFHnVqm0e}fJhqTm}ZA>ky?$r;`^IkxQ(8`^17?PQKf_2Hs>Mw(Yv%OWky|7cOZ zmmB&br@Skep(k;fYX|HYPaD!8*p>F8HUF?L*ZY3SNxJK5xtvdk?B$i7u+5RK&6d}A zqp<+VcMh{rM{!rwoszB!q9BOu{+%AofZ zlAu8fmLLro$U@HJr~0HoQ(T1w3r3Nh_c*0*)HRM)KAY^hXy|Nzq>J9IXSource Quarantine Review
- Generated: 2026-04-23T21:03:26.661Z + Generated: 2026-04-23T21:04:19.569Z Low-health sources: 0 Pending suggestions: 0 SLA: deprioritised, auto-recheck 24h+ @@ -455,7 +455,7 @@

Feed Audit

? 'Data mode: live API (restore enabled)' : 'Data mode: live read-only (restore unavailable)'; meta.innerHTML = [ - 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T21:03:26.661Z') + '', + 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T21:04:19.569Z') + '', 'Low-health sources: ' + escapeHtml(currentEntries.length) + '', 'Pending suggestions: ' + escapeHtml(currentSuggestions.length) + '', 'SLA: deprioritised, auto-recheck 24h+', From c070984e45f40850e39dcaf2906d8a763abf7d4e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:18:21 +0000 Subject: [PATCH 7/9] Apply cleaned batch replacements for dead UK quarantine sources Agent-Logs-Url: https://github.com/potemkin666/AlbertAlert/sessions/558e6d50-2fee-4bea-b21f-a5b34569fa2b Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- data/sources.json | 88 +++++++++++++++++----------------- data/sources/uk/incidents.json | 40 ++++++++-------- data/sources/uk/oversight.json | 48 +++++++++---------- 3 files changed, 88 insertions(+), 88 deletions(-) diff --git a/data/sources.json b/data/sources.json index d5960bd4..c3fa6faa 100644 --- a/data/sources.json +++ b/data/sources.json @@ -4309,13 +4309,13 @@ { "id": "avon-somerset-police-news", "provider": "Avon & Somerset Police a News", - "endpoint": "https://www.avonandsomerset.police.uk/newsroom/", + "endpoint": "https://www.avonandsomerset.police.uk/news/", "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Avon & Somerset Police newsroom covering Bristol and surrounding area incidents including counter-terrorism operations.", + "comment": "Avon & Somerset Police official news page for Bristol and surrounding area incidents including counter-terrorism operations.", "refreshEveryHours": 1 }, { @@ -5016,26 +5016,26 @@ }, { "id": "west-yorkshire-police-all-rss", - "provider": "West Yorkshire Police - All Feed", - "endpoint": "https://www.westyorkshire.police.uk/news/all/feed", - "kind": "rss", + "provider": "West Yorkshire Police - All News", + "endpoint": "https://www.westyorkshire.police.uk/news-stories-all", + "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police all-content feed for broader regional policing updates with downstream filtering.", + "comment": "West Yorkshire Police all news stories page used as the stable official fallback for the deprecated all-feed endpoint.", "refreshEveryHours": 1 }, { "id": "west-yorkshire-police-appeals-rss", - "provider": "West Yorkshire Police - Appeals Feed", - "endpoint": "https://www.westyorkshire.police.uk/news/appeals/feed", - "kind": "rss", + "provider": "West Yorkshire Police - Appeals", + "endpoint": "https://www.westyorkshire.police.uk/news-appeals/appeals", + "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police appeals feed for incidents, wanted appeals and operational notices.", + "comment": "West Yorkshire Police appeals page used as the stable official fallback for the brittle appeals RSS endpoint.", "refreshEveryHours": 1 }, { @@ -5065,37 +5065,37 @@ { "id": "west-yorkshire-police-news-appeals", "provider": "West Yorkshire Police - News Appeals", - "endpoint": "https://www.westyorkshirepolice.co.uk/news-appeals", + "endpoint": "https://www.westyorkshire.police.uk/news-appeals", "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police appeals and news page for Leeds, Bradford and regional operations.", + "comment": "West Yorkshire Police official news and appeals page for Leeds, Bradford and regional operations.", "refreshEveryHours": 1 }, { "id": "west-yorkshire-police-news-rss", - "provider": "West Yorkshire Police - News Feed", - "endpoint": "https://www.westyorkshire.police.uk/news/feed", - "kind": "rss", + "provider": "West Yorkshire Police - News", + "endpoint": "https://www.westyorkshire.police.uk/news-stories-all", + "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police main news RSS feed for operational updates and incident reporting.", + "comment": "West Yorkshire Police all news stories page used as the stable official fallback for the deprecated news RSS endpoint.", "refreshEveryHours": 1 }, { "id": "west-yorkshire-police-releases-rss", - "provider": "West Yorkshire Police - Releases Feed", - "endpoint": "https://www.westyorkshire.police.uk/news/releases/feed", - "kind": "rss", + "provider": "West Yorkshire Police - RSS Feeds", + "endpoint": "https://www.westyorkshire.police.uk/rss-feeds", + "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police releases feed for press statements, arrests and public-safety reporting.", + "comment": "West Yorkshire Police official RSS index page used as the stable fallback for brittle releases feed URLs.", "refreshEveryHours": 1 }, { @@ -5160,14 +5160,14 @@ }, { "id": "echr-uk-grand-chamber-rss", - "provider": "European Court of Human Rights - UK Grand Chamber RSS", - "endpoint": "https://hudoc.echr.coe.int/app/transform/rss?length=20&library=echreng&query=%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28+contentsitename%3AECHR+AND+%28NOT+%28doctype%3DPR+OR+doctype%3DHFCOMOLD+OR+doctype%3DHECOMOLD%29%29+AND+%28%28respondent%3D%22GBR%22%29%29+AND+%28%28documentcollectionid%3D%22GRANDCHAMBER%22%29%29%29+XRANK%28cb%3D14%29+doctypebranch%3AGRANDCHAMBER%29+XRANK%28cb%3D13%29+doctypebranch%3ADECGRANDCHAMBER%29+XRANK%28cb%3D12%29+doctypebranch%3ACHAMBER%29+XRANK%28cb%3D11%29+doctypebranch%3AADMISSIBILITY%29+XRANK%28cb%3D10%29+doctypebranch%3ACOMMITTEE%29+XRANK%28cb%3D9%29+doctypebranch%3AADMISSIBILITYCOM%29+XRANK%28cb%3D8%29+doctypebranch%3ADECCOMMISSION%29+XRANK%28cb%3D7%29+doctypebranch%3ACOMMUNICATEDCASES%29+XRANK%28cb%3D6%29+doctypebranch%3ACLIN%29+doctypebranch%3AADVISORYOPINIONS%29+doctypebranch%3AREPORTS%29+doctypebranch%3AEXECUTION%29+doctypebranch%3AMERITS%29+doctypebranch%3ASCREENINGPANEL%29+XRANK%28cb%3D4%29+importance%3A1%29+XRANK%28cb%3D3%29+importance%3A2%29+XRANK%28cb%3D2%29+importance%3A3%29+XRANK%28cb%3D1%29+importance%3A4%29+XRANK%28cb%3D2%29+languageisocode%3AENG%29+XRANK%28cb%3D1%29+languageisocode%3AFRE&rankingModelId=4180000c-8692-45ca-ad63-74bc4163871b&sort=kpdate+Descending&start=0", - "kind": "rss", + "provider": "European Court of Human Rights - HUDOC", + "endpoint": "https://hudoc.echr.coe.int/", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Official ECHR HUDOC RSS feed scoped to UK Grand Chamber material.", + "comment": "Safe official fallback to the ECHR HUDOC portal when UK Grand Chamber transform RSS URLs are brittle.", "refreshEveryHours": 1 }, { @@ -5208,14 +5208,14 @@ }, { "id": "gov-uk-cabinet-office-atom", - "provider": "Cabinet Office a GOV.UK Atom Feed", - "endpoint": "https://www.gov.uk/government/organisations/cabinet-office.atom", - "kind": "atom", + "provider": "Cabinet Office", + "endpoint": "https://www.gov.uk/government/organisations/cabinet-office", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Cabinet Office atom feed for national security council decisions, resilience strategy and COBR outputs.", + "comment": "Stable official Cabinet Office organisation page used as fallback for brittle Atom feed endpoints.", "refreshEveryHours": 1 }, { @@ -5244,14 +5244,14 @@ }, { "id": "gov-uk-home-office-atom", - "provider": "UK Home Office a Atom Feed", - "endpoint": "https://www.gov.uk/government/organisations/home-office.atom", - "kind": "atom", + "provider": "UK Home Office", + "endpoint": "https://www.gov.uk/government/organisations/home-office", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Home Office Atom feed for counter-terrorism, extremism, and public security publications.", + "comment": "Stable official Home Office organisation page used as fallback for brittle Atom feed endpoints.", "refreshEveryHours": 1 }, { @@ -5268,38 +5268,38 @@ }, { "id": "gov-uk-mod-atom", - "provider": "Ministry of Defence a GOV.UK Atom Feed", - "endpoint": "https://www.gov.uk/government/organisations/ministry-of-defence.atom", - "kind": "atom", + "provider": "Ministry of Defence", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-defence", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "MoD atom feed for defence intelligence updates, military counter-terrorism operations and threat assessments.", + "comment": "Stable official MoD organisation page used as fallback for brittle Atom feed endpoints.", "refreshEveryHours": 1 }, { "id": "gov-uk-moj-atom", - "provider": "Ministry of Justice a GOV.UK Atom Feed", - "endpoint": "https://www.gov.uk/government/organisations/ministry-of-justice.atom", - "kind": "atom", + "provider": "Ministry of Justice", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-justice", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "MoJ atom feed for terrorism sentencing, extremist prisoner management and judicial oversight updates.", + "comment": "Stable official MoJ organisation page used as fallback for brittle Atom feed endpoints.", "refreshEveryHours": 1 }, { "id": "gov-uk-news-and-communications-atom", - "provider": "GOV.UK - News and Communications Atom", - "endpoint": "https://www.gov.uk/search/news-and-communications.atom", - "kind": "rss", + "provider": "GOV.UK - News and Communications", + "endpoint": "https://www.gov.uk/search/news-and-communications", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Broad GOV.UK news and communications Atom feed for official UK announcements with keyword gating.", + "comment": "Stable official GOV.UK news and communications listing used as fallback for brittle Atom feed endpoints.", "refreshEveryHours": 1 }, { diff --git a/data/sources/uk/incidents.json b/data/sources/uk/incidents.json index bd4af4cc..783c2f2e 100644 --- a/data/sources/uk/incidents.json +++ b/data/sources/uk/incidents.json @@ -14,13 +14,13 @@ { "id": "avon-somerset-police-news", "provider": "Avon & Somerset Police a News", - "endpoint": "https://www.avonandsomerset.police.uk/newsroom/", + "endpoint": "https://www.avonandsomerset.police.uk/news/", "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Avon & Somerset Police newsroom covering Bristol and surrounding area incidents including counter-terrorism operations." + "comment": "Avon & Somerset Police official news page for Bristol and surrounding area incidents including counter-terrorism operations." }, { "id": "bedfordshire-police-news", @@ -662,25 +662,25 @@ }, { "id": "west-yorkshire-police-all-rss", - "provider": "West Yorkshire Police - All Feed", - "endpoint": "https://www.westyorkshire.police.uk/news/all/feed", - "kind": "rss", + "provider": "West Yorkshire Police - All News", + "endpoint": "https://www.westyorkshire.police.uk/news-stories-all", + "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police all-content feed for broader regional policing updates with downstream filtering." + "comment": "West Yorkshire Police all news stories page used as the stable official fallback for the deprecated all-feed endpoint." }, { "id": "west-yorkshire-police-appeals-rss", - "provider": "West Yorkshire Police - Appeals Feed", - "endpoint": "https://www.westyorkshire.police.uk/news/appeals/feed", - "kind": "rss", + "provider": "West Yorkshire Police - Appeals", + "endpoint": "https://www.westyorkshire.police.uk/news-appeals/appeals", + "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police appeals feed for incidents, wanted appeals and operational notices." + "comment": "West Yorkshire Police appeals page used as the stable official fallback for the brittle appeals RSS endpoint." }, { "id": "west-yorkshire-police-missing-rss", @@ -707,35 +707,35 @@ { "id": "west-yorkshire-police-news-appeals", "provider": "West Yorkshire Police - News Appeals", - "endpoint": "https://www.westyorkshirepolice.co.uk/news-appeals", + "endpoint": "https://www.westyorkshire.police.uk/news-appeals", "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police appeals and news page for Leeds, Bradford and regional operations." + "comment": "West Yorkshire Police official news and appeals page for Leeds, Bradford and regional operations." }, { "id": "west-yorkshire-police-news-rss", - "provider": "West Yorkshire Police - News Feed", - "endpoint": "https://www.westyorkshire.police.uk/news/feed", - "kind": "rss", + "provider": "West Yorkshire Police - News", + "endpoint": "https://www.westyorkshire.police.uk/news-stories-all", + "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police main news RSS feed for operational updates and incident reporting." + "comment": "West Yorkshire Police all news stories page used as the stable official fallback for the deprecated news RSS endpoint." }, { "id": "west-yorkshire-police-releases-rss", - "provider": "West Yorkshire Police - Releases Feed", - "endpoint": "https://www.westyorkshire.police.uk/news/releases/feed", - "kind": "rss", + "provider": "West Yorkshire Police - RSS Feeds", + "endpoint": "https://www.westyorkshire.police.uk/rss-feeds", + "kind": "html", "lane": "incidents", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "West Yorkshire Police releases feed for press statements, arrests and public-safety reporting." + "comment": "West Yorkshire Police official RSS index page used as the stable fallback for brittle releases feed URLs." }, { "id": "wiltshire-police-news", diff --git a/data/sources/uk/oversight.json b/data/sources/uk/oversight.json index f10f4a12..64690bec 100644 --- a/data/sources/uk/oversight.json +++ b/data/sources/uk/oversight.json @@ -46,14 +46,14 @@ }, { "id": "echr-uk-grand-chamber-rss", - "provider": "European Court of Human Rights - UK Grand Chamber RSS", - "endpoint": "https://hudoc.echr.coe.int/app/transform/rss?length=20&library=echreng&query=%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28+contentsitename%3AECHR+AND+%28NOT+%28doctype%3DPR+OR+doctype%3DHFCOMOLD+OR+doctype%3DHECOMOLD%29%29+AND+%28%28respondent%3D%22GBR%22%29%29+AND+%28%28documentcollectionid%3D%22GRANDCHAMBER%22%29%29%29+XRANK%28cb%3D14%29+doctypebranch%3AGRANDCHAMBER%29+XRANK%28cb%3D13%29+doctypebranch%3ADECGRANDCHAMBER%29+XRANK%28cb%3D12%29+doctypebranch%3ACHAMBER%29+XRANK%28cb%3D11%29+doctypebranch%3AADMISSIBILITY%29+XRANK%28cb%3D10%29+doctypebranch%3ACOMMITTEE%29+XRANK%28cb%3D9%29+doctypebranch%3AADMISSIBILITYCOM%29+XRANK%28cb%3D8%29+doctypebranch%3ADECCOMMISSION%29+XRANK%28cb%3D7%29+doctypebranch%3ACOMMUNICATEDCASES%29+XRANK%28cb%3D6%29+doctypebranch%3ACLIN%29+doctypebranch%3AADVISORYOPINIONS%29+doctypebranch%3AREPORTS%29+doctypebranch%3AEXECUTION%29+doctypebranch%3AMERITS%29+doctypebranch%3ASCREENINGPANEL%29+XRANK%28cb%3D4%29+importance%3A1%29+XRANK%28cb%3D3%29+importance%3A2%29+XRANK%28cb%3D2%29+importance%3A3%29+XRANK%28cb%3D1%29+importance%3A4%29+XRANK%28cb%3D2%29+languageisocode%3AENG%29+XRANK%28cb%3D1%29+languageisocode%3AFRE&rankingModelId=4180000c-8692-45ca-ad63-74bc4163871b&sort=kpdate+Descending&start=0", - "kind": "rss", + "provider": "European Court of Human Rights - HUDOC", + "endpoint": "https://hudoc.echr.coe.int/", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Official ECHR HUDOC RSS feed scoped to UK Grand Chamber material." + "comment": "Safe official fallback to the ECHR HUDOC portal when UK Grand Chamber transform RSS URLs are brittle." }, { "id": "extremism-commission-blog", @@ -90,14 +90,14 @@ }, { "id": "gov-uk-cabinet-office-atom", - "provider": "Cabinet Office a GOV.UK Atom Feed", - "endpoint": "https://www.gov.uk/government/organisations/cabinet-office.atom", - "kind": "atom", + "provider": "Cabinet Office", + "endpoint": "https://www.gov.uk/government/organisations/cabinet-office", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Cabinet Office atom feed for national security council decisions, resilience strategy and COBR outputs." + "comment": "Stable official Cabinet Office organisation page used as fallback for brittle Atom feed endpoints." }, { "id": "gov-uk-hmcts", @@ -123,14 +123,14 @@ }, { "id": "gov-uk-home-office-atom", - "provider": "UK Home Office a Atom Feed", - "endpoint": "https://www.gov.uk/government/organisations/home-office.atom", - "kind": "atom", + "provider": "UK Home Office", + "endpoint": "https://www.gov.uk/government/organisations/home-office", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Home Office Atom feed for counter-terrorism, extremism, and public security publications." + "comment": "Stable official Home Office organisation page used as fallback for brittle Atom feed endpoints." }, { "id": "gov-uk-ipco", @@ -145,36 +145,36 @@ }, { "id": "gov-uk-mod-atom", - "provider": "Ministry of Defence a GOV.UK Atom Feed", - "endpoint": "https://www.gov.uk/government/organisations/ministry-of-defence.atom", - "kind": "atom", + "provider": "Ministry of Defence", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-defence", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "MoD atom feed for defence intelligence updates, military counter-terrorism operations and threat assessments." + "comment": "Stable official MoD organisation page used as fallback for brittle Atom feed endpoints." }, { "id": "gov-uk-moj-atom", - "provider": "Ministry of Justice a GOV.UK Atom Feed", - "endpoint": "https://www.gov.uk/government/organisations/ministry-of-justice.atom", - "kind": "atom", + "provider": "Ministry of Justice", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-justice", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "MoJ atom feed for terrorism sentencing, extremist prisoner management and judicial oversight updates." + "comment": "Stable official MoJ organisation page used as fallback for brittle Atom feed endpoints." }, { "id": "gov-uk-news-and-communications-atom", - "provider": "GOV.UK - News and Communications Atom", - "endpoint": "https://www.gov.uk/search/news-and-communications.atom", - "kind": "rss", + "provider": "GOV.UK - News and Communications", + "endpoint": "https://www.gov.uk/search/news-and-communications", + "kind": "html", "lane": "oversight", "region": "uk", "isTrustedOfficial": true, "requiresKeywordMatch": true, - "comment": "Broad GOV.UK news and communications Atom feed for official UK announcements with keyword gating." + "comment": "Stable official GOV.UK news and communications listing used as fallback for brittle Atom feed endpoints." }, { "id": "gov-uk-parliament-jcnss", From e33541f7e08fc0f81ef7c1f5f41aee84b6563c0b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:24:59 +0000 Subject: [PATCH 8/9] Resolve merge conflicts with origin/main artifacts Agent-Logs-Url: https://github.com/potemkin666/AlbertAlert/sessions/cce4d4cb-13f5-4dc9-ac47-b501cbf24949 Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- data/albertalert.sqlite | Bin 2134016 -> 2134016 bytes data/quarantined-sources.json | 18722 +-------------------- data/source-remediation-sweep.json | 2 +- data/top-20-source-remediation.json | 2 +- live-alerts.json | 22684 +------------------------- source-quarantine.html | 12 +- 6 files changed, 223 insertions(+), 41199 deletions(-) diff --git a/data/albertalert.sqlite b/data/albertalert.sqlite index 57093513b84f31976136023d69d01549a72c1173..dd6d8690d869ce981d20009f71f9e0fe43afffe5 100644 GIT binary patch delta 1941 zcma)+O>EO<7{_BfA9maHD``ucl(&!u_N2* z2NyS67}75L60*jL(@s0UI7GWm<1%qW+GUd_ao=f&ou)-RPO$T#q~le7Irx3`KL7vo zKF@RX_*3i%_$q{nUx!yQ@#*c)H)fP6jNouhDXTfOrIzKb9ZAy_^>F3XkJsFd>R1HG&w=8mSwOi4w1NY*7q#^*x> z?`#UXQe>1pq-s)ON5{{dAmYxRs%cD4k#%&SFlSi05gd$`|*^}R;^Lqt91Hxho?7_XiUEb);52|6iIX$d7AnO5SQ{MaHd+X-uE zbhhDaFD1tbiLsNtE!9Tl9h1p7C1|T!ZB}GM)0?f%9A^IanU72EgXKB_xB(B~1$+PrP{05% z2n+#!U>FzyMu9P490&kGU;>x~rhpT`G%y2%fG{vyTdtq{_2nex+jWfuhu8coL+gX@ zQvXp=@``Ww*;r}QXH-5>hFqD@N_v0pOgiK1mv?AHq@ujoyX6^HENjsEjF`x6FKvqg zmyE>|VoqFDip8=l>4)ttbW>4xwH>8Ie{fJT1UZlL^u?U2Xc~PT72p=F)nAeoRu-(W zBHXnfsH+=o$?Rg5x7~GT4KD~|vRgw!( z@$Wb1A}Xs&3E2i)S6b7i%^%06;Ai`riZ@m*`g`P$?}-rMGJQw%d7t|X@ti0S@Vw7) zBVRu?>dG_*9tF!9diH(Y^QzC=+M>F$-g+Zz27XkZgD_T`HDf@aMwo}UBVMDUUF;}r zv)_);yYYlN4Ocft%iB8We7Sl1{?4>Q@|(H0PH)vC5CjJ9!_COVdSAiLP_?h@KXWU= f`bqQR>}<${pY}I;1^f4 delta 347 zcmWO0KS%;$9L8~f-o4(Pr=HrC=D%L39BxS$p)f3pXbFSX$RdmyO3@tLEHbHSource Quarantine Review
- Generated: 2026-04-23T20:38:15.853Z - Low-health sources: 528 + Generated: 2026-04-23T21:24:51.187Z + Low-health sources: 0 Pending suggestions: 0 SLA: deprioritised, auto-recheck 24h+ - New this week: 235 - Avg health score: 3/100 - Avg time in quarantine: 141h + New this week: 0 + Avg health score: 0/100 + Avg time in quarantine: 0h Re-quarantine rate: 0%
@@ -455,7 +455,7 @@

Feed Audit

? 'Data mode: live API (restore enabled)' : 'Data mode: live read-only (restore unavailable)'; meta.innerHTML = [ - 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T20:38:15.853Z') + '', + 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T21:24:51.187Z') + '', 'Low-health sources: ' + escapeHtml(currentEntries.length) + '', 'Pending suggestions: ' + escapeHtml(currentSuggestions.length) + '', 'SLA: deprioritised, auto-recheck 24h+', From d9bc3b63a484f1d68ebc87dc026ec1d4ae7de773 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:26:12 +0000 Subject: [PATCH 9/9] Align merged artifact files with origin/main Co-authored-by: potemkin666 <183807833+potemkin666@users.noreply.github.com> --- data/albertalert.sqlite | Bin 2134016 -> 2134016 bytes data/quarantined-sources.json | 18722 ++++++++++++++++++++- data/source-remediation-sweep.json | 2 +- data/top-20-source-remediation.json | 2 +- live-alerts.json | 22684 +++++++++++++++++++++++++- source-quarantine.html | 12 +- 6 files changed, 41199 insertions(+), 223 deletions(-) diff --git a/data/albertalert.sqlite b/data/albertalert.sqlite index dd6d8690d869ce981d20009f71f9e0fe43afffe5..57093513b84f31976136023d69d01549a72c1173 100644 GIT binary patch delta 347 zcmWO0KS%;$9L8~f-o4(Pr=HrC=D%L39BxS$p)f3pXbFSX$RdmyO3@tLEHbHEO<7{_BfA9maHD``ucl(&!u_N2* z2NyS67}75L60*jL(@s0UI7GWm<1%qW+GUd_ao=f&ou)-RPO$T#q~le7Irx3`KL7vo zKF@RX_*3i%_$q{nUx!yQ@#*c)H)fP6jNouhDXTfOrIzKb9ZAy_^>F3XkJsFd>R1HG&w=8mSwOi4w1NY*7q#^*x> z?`#UXQe>1pq-s)ON5{{dAmYxRs%cD4k#%&SFlSi05gd$`|*^}R;^Lqt91Hxho?7_XiUEb);52|6iIX$d7AnO5SQ{MaHd+X-uE zbhhDaFD1tbiLsNtE!9Tl9h1p7C1|T!ZB}GM)0?f%9A^IanU72EgXKB_xB(B~1$+PrP{05% z2n+#!U>FzyMu9P490&kGU;>x~rhpT`G%y2%fG{vyTdtq{_2nex+jWfuhu8coL+gX@ zQvXp=@``Ww*;r}QXH-5>hFqD@N_v0pOgiK1mv?AHq@ujoyX6^HENjsEjF`x6FKvqg zmyE>|VoqFDip8=l>4)ttbW>4xwH>8Ie{fJT1UZlL^u?U2Xc~PT72p=F)nAeoRu-(W zBHXnfsH+=o$?Rg5x7~GT4KD~|vRgw!( z@$Wb1A}Xs&3E2i)S6b7i%^%06;Ai`riZ@m*`g`P$?}-rMGJQw%d7t|X@ti0S@Vw7) zBVRu?>dG_*9tF!9diH(Y^QzC=+M>F$-g+Zz27XkZgD_T`HDf@aMwo}UBVMDUUF;}r zv)_);yYYlN4Ocft%iB8We7Sl1{?4>Q@|(H0PH)vC5CjJ9!_COVdSAiLP_?h@KXWU= f`bqQR>}<${pY}I;1^f4 diff --git a/data/quarantined-sources.json b/data/quarantined-sources.json index ac41082c..86be6fe1 100644 --- a/data/quarantined-sources.json +++ b/data/quarantined-sources.json @@ -1,14 +1,18722 @@ { - "generatedAt": "2026-04-23T21:24:51.187Z", - "count": 0, + "generatedAt": "2026-04-23T20:38:15.853Z", + "count": 528, "metrics": { - "total": 0, - "newThisWeek": 0, - "avgTimeInQuarantineHours": 0, - "avgHealthScore": 0, + "total": 528, + "newThisWeek": 235, + "avgTimeInQuarantineHours": 141, + "avgHealthScore": 3, "reQuarantineRate": 0, "reQuarantined": 0, "restoredTotal": 0 }, - "sources": [] + "sources": [ + { + "id": "euaa-news", + "provider": "EUAA (EU Agency for Asylum) - Press Releases", + "endpoint": "https://euaa.europa.eu/news-events/press-releases", + "kind": "html", + "lane": "border", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eulisa-news-events", + "provider": "eu-LISA - News and Events (RSS)", + "endpoint": "https://www.eulisa.europa.eu/news-and-events.rss", + "kind": "rss", + "lane": "border", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "austria-interior-ministry-news", + "provider": "Austrian Interior Ministry - News", + "endpoint": "https://www.bmi.gv.at/news.aspx", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "austria-interior-ministry-rss-index", + "provider": "Austrian Interior Ministry - RSS Index", + "endpoint": "https://www.bmi.gv.at/rss_feed/start.aspx", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "europol-news-rss", + "provider": "Europol - Newsroom (RSS)", + "endpoint": "https://www.europol.europa.eu/cms/api/rss/news", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "dutch-police-rss-index", + "provider": "Politie.nl - RSS", + "endpoint": "https://www.politie.nl/rss", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "mossos-news", + "provider": "Mossos d'Esquadra - News", + "endpoint": "https://mossos.gencat.cat/ca/actualitat/", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eppo-news-node-7", + "provider": "European Public Prosecutor's Office - News (RSS)", + "endpoint": "https://www.eppo.europa.eu/en/news.xml", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-commission-counter-terrorism-measures-2026", + "provider": "European Commission - Counter Terrorism Measures 2026", + "endpoint": "https://commission.europa.eu/news-and-media/news/commission-proposes-new-measures-prevent-and-counter-terrorism-2026-02-26_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-commission-home-affairs-topic", + "provider": "European Commission - Home Affairs", + "endpoint": "https://commission.europa.eu/topics/home-affairs_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-council-jha-register-rss", + "provider": "Council of the EU - Latest Documents RSS", + "endpoint": "https://www.consilium.europa.eu/en/register/rss/LD.xml", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-council-press-releases", + "provider": "Council of the European Union a Press Releases (RSS)", + "endpoint": "https://www.consilium.europa.eu/en/rss/pressreleases.ashx", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-council-press-releases-html", + "provider": "Council of the EU - Press Releases", + "endpoint": "https://www.consilium.europa.eu/en/press/press-releases/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-eppo-news", + "provider": "European Public Prosecutor's Office - News", + "endpoint": "https://www.eppo.europa.eu/en/news", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-home-affairs-news", + "provider": "European Commission a Home Affairs News", + "endpoint": "https://home-affairs.ec.europa.eu/news_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-olaf-news", + "provider": "OLAF (EU Anti-Fraud Office) a News", + "endpoint": "https://anti-fraud.ec.europa.eu/media-corner/news_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-security-union-strategy", + "provider": "European Commission a Security Union Strategy", + "endpoint": "https://home-affairs.ec.europa.eu/policies/internal-security_en", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "europarl-committee-libe", + "provider": "European Parliament - LIBE Press Releases", + "endpoint": "https://www.europarl.europa.eu/committees/en/libe/home/press-releases", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "europarl-committee-sede", + "provider": "European Parliament - SEDE Press Releases", + "endpoint": "https://www.europarl.europa.eu/committees/en/sede/home/press-releases", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "europarl-pressreleases-committees", + "provider": "European Parliament a Press Releases (Committees) (RSS)", + "endpoint": "https://www.europarl.europa.eu/rss/doc/press-releases-committees/en.xml", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "netherlands-police-news", + "provider": "Dutch National Police - News (EN)", + "endpoint": "https://www.politie.nl/en/news", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "echr-press-releases-rss", + "provider": "European Court of Human Rights - Press Releases RSS", + "endpoint": "https://hudoc.echr.coe.int/app/transform/rss?length=20&library=echrengpress&query=contentsitename%3AECHR+AND+doctype%3DPR&ranking. Model. Id=11111111-0000-0000-0000-000000000000&sort=kpdate+Descending&start=0", + "kind": "rss", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "french-justice-ministry-news", + "provider": "French Ministry of Justice - News", + "endpoint": "https://www.justice.gouv.fr/actualites", + "kind": "html", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "dsn-at-english", + "provider": "DSN Austria - Aktuelles", + "endpoint": "https://www.dsn.gv.at/news.html", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "sapo-se-english", + "provider": "Swedish Security Service English news", + "endpoint": "https://www.sakerhetspolisen.se/ovriga-sidor/other-languages/english-engelska/press-room/news.html", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "interpol-news-events", + "provider": "INTERPOL a News and Events", + "endpoint": "https://www.interpol.int/News-and-Events", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "osce-press-releases", + "provider": "OSCE a Press Releases", + "endpoint": "https://www.osce.org/press-releases", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "unoct-news", + "provider": "UN Office of Counter-Terrorism (UNOCT) - News", + "endpoint": "https://www.un.org/counterterrorism/news", + "kind": "html", + "lane": "oversight", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "bexley-council-news", + "provider": "Bexley Council a News", + "endpoint": "https://www.bexley.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "brent-council-news", + "provider": "Brent Council a News", + "endpoint": "https://www.brent.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "camden-council-news", + "provider": "Camden Council a News", + "endpoint": "https://news.camden.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "chelsea-westminster-news", + "provider": "Chelsea and Westminster Hospital NHS Foundation Trust a News", + "endpoint": "https://www.chelwest.nhs.uk/about-us/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "croydon-council-news", + "provider": "Croydon Council a News", + "endpoint": "https://news.croydon.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gosh-news", + "provider": "Great Ormond Street Hospital a News", + "endpoint": "https://www.gosh.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "guys-st-thomas-news", + "provider": "Guy's and St Thomas' NHS Foundation Trust a News", + "endpoint": "https://www.guysandstthomas.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "hackney-council-news", + "provider": "Hackney Council a News", + "endpoint": "https://news.hackney.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "havering-council-news", + "provider": "Havering Council a News", + "endpoint": "https://www.havering.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "hillingdon-council-news", + "provider": "Hillingdon Council a News", + "endpoint": "https://www.hillingdon.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "hounslow-council-news", + "provider": "Hounslow Council a News", + "endpoint": "https://www.hounslow.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "islington-council-news", + "provider": "Islington Council a News", + "endpoint": "https://www.islington.media/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "kings-college-hospital-news", + "provider": "King's College Hospital NHS Foundation Trust a News", + "endpoint": "https://www.kch.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "lambeth-council-news", + "provider": "Lambeth Council a News", + "endpoint": "https://love.lambeth.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "lnwh-news", + "provider": "London North West University Healthcare NHS Trust a News", + "endpoint": "https://www.lnwh.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "london-gov-rss-80603", + "provider": "Greater London Authority a RSS Feed 80603", + "endpoint": "https://www.london.gov.uk/rss-feeds/80603", + "kind": "rss", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "london-gov-rss-80632", + "provider": "Greater London Authority a RSS Feed 80632", + "endpoint": "https://www.london.gov.uk/rss-feeds/80632", + "kind": "rss", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "met-police-the-met-tag", + "provider": "Metropolitan Police - The Met Tag", + "endpoint": "https://news.met.police.uk/news/tag/the-met", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "moorfields-news", + "provider": "Moorfields Eye Hospital NHS Foundation Trust a News", + "endpoint": "https://www.moorfields.nhs.uk/about-us/news-and-blogs/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "nelft-news", + "provider": "North East London NHS Foundation Trust a News", + "endpoint": "https://www.nelft.nhs.uk/news-events/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "newham-council-news", + "provider": "Newham Council a News", + "endpoint": "https://www.newham.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "nhs-london-nwl-news", + "provider": "NHS North West London a News", + "endpoint": "https://www.nwlondonicb.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "oxleas-news", + "provider": "Oxleas NHS Foundation Trust a News", + "endpoint": "https://oxleas.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "redbridge-council-news", + "provider": "Redbridge Council a News", + "endpoint": "https://www.redbridge.gov.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "st-georges-news", + "provider": "St George's University Hospitals NHS Foundation Trust a News", + "endpoint": "https://www.stgeorges.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "sutton-council-news", + "provider": "Sutton Council a News", + "endpoint": "https://www.sutton.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "swlstg-news", + "provider": "South West London and St George's Mental Health NHS Trust a News", + "endpoint": "https://www.swlstg.nhs.uk/latest-news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "waltham-forest-council-news", + "provider": "Waltham Forest Council a News", + "endpoint": "https://www.walthamforest.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-fcdo-travel-advice", + "provider": "FCDO a Foreign Travel Advice Index", + "endpoint": "https://www.gov.uk/foreign-travel-advice", + "kind": "html", + "lane": "border", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "uk-border-force", + "provider": "Border Force (UK) a Announcements and Publications", + "endpoint": "https://www.gov.uk/government/organisations/border-force", + "kind": "html", + "lane": "border", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "uk-ukvi", + "provider": "UK Visas and Immigration a Announcements and Publications", + "endpoint": "https://www.gov.uk/government/organisations/uk-visas-and-immigration", + "kind": "html", + "lane": "border", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-terrorism-search", + "provider": "GOV.UK Search - Terrorism", + "endpoint": "https://www.gov.uk/search/all?keywords=terrorism", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "npcc-releases", + "provider": "National Police Chiefs' Council - Releases", + "endpoint": "https://news.npcc.police.uk/releases/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "police-uk-stops-force-leicestershire", + "provider": "Police.uk - Force Stops (Leicestershire)", + "endpoint": "https://data.police.uk/api/stops-force?force=leicestershire", + "kind": "json", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "police-uk-stops-street-leicester", + "provider": "Police.uk - Street Stops Around Leicester", + "endpoint": "https://data.police.uk/api/stops-street?lat=52.629729&lng=-1.131592", + "kind": "json", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "foreign-office-blogs", + "provider": "Foreign Office Blogs", + "endpoint": "https://blogs.fco.gov.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "avon-and-somerset-police-news-html", + "provider": "Avon and Somerset Police - News", + "endpoint": "https://www.avonandsomerset.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "avon-somerset-police-news", + "provider": "Avon & Somerset Police a News", + "endpoint": "https://www.avonandsomerset.police.uk/newsroom/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "psni-latest-news", + "provider": "Police Service of Northern Ireland - Latest News", + "endpoint": "https://www.psni.police.uk/latest-news", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "west-yorkshire-police-all-rss", + "provider": "West Yorkshire Police - All Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/all/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "west-yorkshire-police-appeals-rss", + "provider": "West Yorkshire Police - Appeals Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/appeals/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "west-yorkshire-police-news-appeals", + "provider": "West Yorkshire Police - News Appeals", + "endpoint": "https://www.westyorkshirepolice.co.uk/news-appeals", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "west-yorkshire-police-news-rss", + "provider": "West Yorkshire Police - News Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "west-yorkshire-police-releases-rss", + "provider": "West Yorkshire Police - Releases Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/releases/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "attorney-generals-office-html", + "provider": "Attorney General's Office", + "endpoint": "https://www.gov.uk/government/organisations/attorney-generals-office", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "cabinet-office-html", + "provider": "Cabinet Office", + "endpoint": "https://www.gov.uk/government/organisations/cabinet-office", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "crown-office-news", + "provider": "Crown Office and Procurator Fiscal Service - News", + "endpoint": "https://www.copfs.gov.uk/about-copfs/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "echr-uk-grand-chamber-rss", + "provider": "European Court of Human Rights - UK Grand Chamber RSS", + "endpoint": "https://hudoc.echr.coe.int/app/transform/rss?length=20&library=echreng&query=%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28+contentsitename%3AECHR+AND+%28NOT+%28doctype%3DPR+OR+doctype%3DHFCOMOLD+OR+doctype%3DHECOMOLD%29%29+AND+%28%28respondent%3D%22GBR%22%29%29+AND+%28%28documentcollectionid%3D%22GRANDCHAMBER%22%29%29%29+XRANK%28cb%3D14%29+doctypebranch%3AGRANDCHAMBER%29+XRANK%28cb%3D13%29+doctypebranch%3ADECGRANDCHAMBER%29+XRANK%28cb%3D12%29+doctypebranch%3ACHAMBER%29+XRANK%28cb%3D11%29+doctypebranch%3AADMISSIBILITY%29+XRANK%28cb%3D10%29+doctypebranch%3ACOMMITTEE%29+XRANK%28cb%3D9%29+doctypebranch%3AADMISSIBILITYCOM%29+XRANK%28cb%3D8%29+doctypebranch%3ADECCOMMISSION%29+XRANK%28cb%3D7%29+doctypebranch%3ACOMMUNICATEDCASES%29+XRANK%28cb%3D6%29+doctypebranch%3ACLIN%29+doctypebranch%3AADVISORYOPINIONS%29+doctypebranch%3AREPORTS%29+doctypebranch%3AEXECUTION%29+doctypebranch%3AMERITS%29+doctypebranch%3ASCREENINGPANEL%29+XRANK%28cb%3D4%29+importance%3A1%29+XRANK%28cb%3D3%29+importance%3A2%29+XRANK%28cb%3D2%29+importance%3A3%29+XRANK%28cb%3D1%29+importance%3A4%29+XRANK%28cb%3D2%29+languageisocode%3AENG%29+XRANK%28cb%3D1%29+languageisocode%3AFRE&ranking. Model. Id=4180000c-8692-45ca-ad63-74bc4163871b&sort=kpdate+Descending&start=0", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "extremism-commission-blog", + "provider": "Commission for Countering Extremism - Blog", + "endpoint": "https://extremismcommission.blog.gov.uk/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "fcdo-html", + "provider": "Foreign, Commonwealth & Development Office", + "endpoint": "https://www.gov.uk/government/organisations/foreign-commonwealth-development-office", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-scot-access-to-justice-latest", + "provider": "Scottish Government - Access to Justice Latest", + "endpoint": "https://www.gov.scot/policies/access-to-justice/latest/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-cabinet-office-atom", + "provider": "Cabinet Office a GOV.UK Atom Feed", + "endpoint": "https://www.gov.uk/government/organisations/cabinet-office.atom", + "kind": "atom", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-hmcts", + "provider": "HMCTS a Courts and Tribunals Announcements", + "endpoint": "https://www.gov.uk/government/organisations/hm-courts-and-tribunals-service", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-home-office-atom", + "provider": "UK Home Office a Atom Feed", + "endpoint": "https://www.gov.uk/government/organisations/home-office.atom", + "kind": "atom", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-ipco", + "provider": "Investigatory Powers Commissioner's Office a GOV.UK", + "endpoint": "https://www.ipco.org.uk/publications/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-mod-atom", + "provider": "Ministry of Defence a GOV.UK Atom Feed", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-defence.atom", + "kind": "atom", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-moj-atom", + "provider": "Ministry of Justice a GOV.UK Atom Feed", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-justice.atom", + "kind": "atom", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-news-and-communications-atom", + "provider": "GOV.UK - News and Communications Atom", + "endpoint": "https://www.gov.uk/search/news-and-communications.atom", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "hmiprisons-news", + "provider": "HM Inspectorate of Prisons - News", + "endpoint": "https://hmiprisons.justiceinspectorates.gov.uk/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "hmiprobation-news", + "provider": "HM Inspectorate of Probation - News", + "endpoint": "https://hmiprobation.justiceinspectorates.gov.uk/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "home-office-media-blog", + "provider": "Home Office Media Blog", + "endpoint": "https://homeofficemedia.blog.gov.uk/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "independent-reviewer-terrorism-legislation", + "provider": "Independent Reviewer of Terrorism Legislation a Reports", + "endpoint": "https://terrorismlegislationreviewer.independent.gov.uk/category/reports/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "independent-reviewer-terrorism-legislation-html", + "provider": "Independent Reviewer of Terrorism Legislation", + "endpoint": "https://www.gov.uk/government/organisations/independent-reviewer-of-terrorism-legislation", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "judiciary-rss-feeds-page", + "provider": "Judiciary UK - RSS Feeds", + "endpoint": "https://www.judiciary.uk/rss-feeds/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "judiciary-uk-announcements-feed", + "provider": "Judiciary UK - Announcements Feed", + "endpoint": "https://www.judiciary.uk/announcements/feed/", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "judiciary-uk-judgments-feed", + "provider": "Judiciary UK - Judgments Feed", + "endpoint": "https://www.judiciary.uk/judgments/feed/", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "judiciary-uk-publications-feed", + "provider": "Judiciary UK - Publications Feed", + "endpoint": "https://www.judiciary.uk/publications/feed/", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "ministry-of-defence-html", + "provider": "Ministry of Defence", + "endpoint": "https://www.gov.uk/government/organisations/ministry-of-defence", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "ons-html", + "provider": "Office for National Statistics", + "endpoint": "https://www.gov.uk/government/organisations/office-for-national-statistics", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "parliament-all-bills-rss", + "provider": "Parliament - All Bills RSS", + "endpoint": "https://bills.parliament.uk/rss/allbills.rss", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "parliament-private-bills-rss", + "provider": "Parliament - Private Bills RSS", + "endpoint": "https://bills.parliament.uk/rss/privatebills.rss", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "parliament-public-bills-rss", + "provider": "Parliament - Public Bills RSS", + "endpoint": "https://bills.parliament.uk/rss/publicbills.rss", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "police-uk-crime-categories-2024-01", + "provider": "Police.uk - Crime Categories (2024-01)", + "endpoint": "https://data.police.uk/api/crime-categories?date=2024-01", + "kind": "json", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "police-uk-crimes-street-dates", + "provider": "Police.uk - Street Crime Dataset Dates", + "endpoint": "https://data.police.uk/api/crimes-street-dates", + "kind": "json", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "police-uk-outcomes-for-crime-e11dade0", + "provider": "Police.uk - Outcomes For Crime e11dade0", + "endpoint": "https://data.police.uk/api/outcomes-for-crime/e11dade0a92a912d12329b9b2abb856ac9520434ad6845c30f503e9901d140f1", + "kind": "json", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "scotcourts-fai-determinations-rss", + "provider": "Scottish Courts - Fatal Accident Inquiry Determinations RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Fatal. Accident. Inquiry. Determinations", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "scotcourts-fai-hearings-rss", + "provider": "Scottish Courts - Fatal Accident Inquiry Hearings RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Fatal. Accident. Inquiry. Hearings", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "scotcourts-high-court-justiciary-judgments-rss", + "provider": "Scottish Courts - High Court of Justiciary Judgments RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Judgments/?Court=High+Court+of+Justiciary", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "scotcourts-high-court-practice-notes-rss", + "provider": "Scottish Courts - High Court of Justiciary Practice Notes RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Practice. Notes. And. Directions/?Category=High+Court+of+Justiciary", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "scotcourts-judgments-rss", + "provider": "Scottish Courts - Judgments RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Judgments", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "scotcourts-news-articles-rss", + "provider": "Scottish Courts - News Articles RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/News. Articles", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "scotcourts-publications-rss", + "provider": "Scottish Courts - Publications RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Publications", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "scotcourts-sheriff-criminal-practice-notes-rss", + "provider": "Scottish Courts - Sheriff Court Criminal Practice Notes RSS", + "endpoint": "https://api.pa.web.scotcourts.gov.uk/web/rss/Practice. Notes. And. Directions/?Category=Sheriff+Court+Criminal", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "uk-iopc-news", + "provider": "Independent Office for Police Conduct a News", + "endpoint": "https://www.policeconduct.gov.uk/news", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "uk-parliament-home-affairs-committee", + "provider": "UK Parliament a Home Affairs Committee (News)", + "endpoint": "https://committees.parliament.uk/committee/83/home-affairs-committee/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "act-campaign", + "provider": "ACT Awareness Campaign", + "endpoint": "https://act.campaign.gov.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-contest-strategy", + "provider": "GOV.UK a CONTEST Counter-Terrorism Strategy", + "endpoint": "https://www.gov.uk/government/collections/contest", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-prevent-strategy", + "provider": "UK Home Office - Prevent duty guidance", + "endpoint": "https://www.gov.uk/government/publications/prevent-duty-guidance", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "met-office-seasonal-advice", + "provider": "Met Office - Seasonal Advice", + "endpoint": "https://www.metoffice.gov.uk/weather/warnings-and-advice/seasonal-advice", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "mi5-uk-threat-level", + "provider": "MI5 (Security Service) a UK Threat Level", + "endpoint": "https://www.mi5.gov.uk/UKThreat. Level/UKThreat. Level.xml", + "kind": "rss", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "npsa-national-protective-security-authority", + "provider": "NPSA - Activity on GOV.UK", + "endpoint": "https://www.gov.uk/government/organisations/national-protective-security-authority.atom", + "kind": "rss", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "uk-ncsc-all-rss", + "provider": "UK NCSC - All Updates RSS", + "endpoint": "https://www.ncsc.gov.uk/api/1/services/v1/all-rss-feed.xml", + "kind": "rss", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "uk-prevent-duty-guidance", + "provider": "GOV.UK a Prevent Duty Guidance (Collection)", + "endpoint": "https://www.gov.uk/government/collections/prevent-duty-guidance", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-proscribed-terrorist-orgs", + "provider": "GOV.UK a Proscribed Terrorist Organisations", + "endpoint": "https://www.gov.uk/government/publications/proscribed-terror-groups-or-organisations--2", + "kind": "html", + "lane": "sanctions", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "hm-treasury-html", + "provider": "HM Treasury", + "endpoint": "https://www.gov.uk/government/organisations/hm-treasury", + "kind": "html", + "lane": "sanctions", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "ofsi-blog-home", + "provider": "OFSI - Blog", + "endpoint": "https://ofsi.blog.gov.uk/", + "kind": "html", + "lane": "sanctions", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "dhs-press-releases", + "provider": "US Department of Homeland Security - News", + "endpoint": "https://www.dhs.gov/news", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "nsa-cybersecurity-news", + "provider": "NSA - Cybersecurity Advisories & Guidance", + "endpoint": "https://www.nsa.gov/Press-Room/Press-Releases-Statements/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "rewards-for-justice", + "provider": "U.S. Department of State - Rewards for Justice", + "endpoint": "https://rewardsforjustice.net/rewards/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "state-dept-terrorism", + "provider": "US State Department - Bureau of Counterterrorism", + "endpoint": "https://www.state.gov/bureaus-offices/under-secretary-for-civilian-security-democracy-and-human-rights/bureau-of-counterterrorism/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "cisa-cybersecurity-advisories", + "provider": "CISA - Cybersecurity Alerts & Advisories", + "endpoint": "https://www.cisa.gov/news-events/cybersecurity-advisories", + "kind": "html", + "lane": "oversight", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "us-treasury-ofac-recent-actions", + "provider": "U.S. Treasury (OFAC) - Recent Actions", + "endpoint": "https://ofac.treasury.gov/recent-actions", + "kind": "html", + "lane": "sanctions", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eurojust-press-releases", + "provider": "Eurojust - Press Releases", + "endpoint": "https://www.eurojust.europa.eu/news/press-releases", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "eu-council-jha-meetings", + "provider": "Council of the EU - JHA Press Releases", + "endpoint": "https://www.consilium.europa.eu/en/press/press-releases/?cc%5B%5D=24", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "norway-pst-news", + "provider": "Norwegian Government - News and Press Releases", + "endpoint": "https://www.regjeringen.no/en/whats-new/news-and-press-releases/id4/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "ocam-be-english", + "provider": "CUTA (Belgium) threat analysis", + "endpoint": "https://cuta.belgium.be/", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T22:54:57.851Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "everything-zany", + "provider": "Everything Zany", + "endpoint": "https://everythingzany.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "manic-mum-life", + "provider": "Manic Mum Life", + "endpoint": "https://www.manic-mumdays.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "really-ree", + "provider": "Really Ree", + "endpoint": "https://reallyree.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T18:02:43.923Z", + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "my-community-alert", + "provider": "My Community Alert", + "endpoint": "https://www.mycommunityalert.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T19:28:57.337Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T11:47:27.254Z", + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastCheckedAt": "2026-04-23T11:47:27.254Z" + }, + { + "id": "uk-parliament-defence-committee", + "provider": "UK Parliament a Defence Select Committee", + "endpoint": "https://committees.parliament.uk/committee/24/defence-committee/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "curia-press-rss-en", + "provider": "Court of Justice of the European Union - RSS (EN/FR)", + "endpoint": "https://curia.europa.eu/site/rss.jsp?lang=en&second. Lang=fr", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "eu-cellar-rss-atom", + "provider": "Publications Office of the European Union (CELLAR) a RSS/Atom Feeds", + "endpoint": "https://op.europa.eu/en/web/cellar/cellar-data/rss-and-atom-feeds", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "richmond-council-news", + "provider": "Richmond Council a News", + "endpoint": "https://www.richmond.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "wandsworth-council-news", + "provider": "Wandsworth Council a News", + "endpoint": "https://www.wandsworth.gov.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "scotcourts-rss-feeds-page", + "provider": "Scottish Courts and Tribunals - RSS Feeds", + "endpoint": "https://www.scotcourts.gov.uk/rss-feeds/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "london-resilience", + "provider": "Resilience First - Latest Updates", + "endpoint": "https://www.london.gov.uk/programmes-strategies/fire-and-city-resilience/london-resilience-partnership", + "kind": "html", + "lane": "prevention", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 2, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T23:15:54.554Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T23:56:26.571Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T23:56:26.571Z", + "lastFailureAt": "2026-04-22T23:56:26.571Z", + "lastCheckedAt": "2026-04-22T23:56:26.571Z" + }, + { + "id": "echr-key-judgments-rss", + "provider": "European Court of Human Rights - Key Judgments RSS", + "endpoint": "https://hudoc.echr.coe.int/app/transform/rss?length=20&library=echreng&query=%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28%28+contentsitename%3AECHR+AND+%28NOT+%28doctype%3DPR+OR+doctype%3DHFCOMOLD+OR+doctype%3DHECOMOLD%29%29+AND+%28%28importance%3D%221%22%29+OR+%28importance%3D%222%22%29+OR+%28importance%3D%223%22%29%29+AND+%28%28documentcollectionid%3D%22GRANDCHAMBER%22%29+OR+%28documentcollectionid%3D%22CHAMBER%22%29+OR+%28documentcollectionid%3D%22DECGRANDCHAMBER%22%29+OR+%28documentcollectionid%3D%22ADMISSIBILITY%22%29%29%29+XRANK%28cb%3D14%29+doctypebranch%3AGRANDCHAMBER%29+XRANK%28cb%3D13%29+doctypebranch%3ADECGRANDCHAMBER%29+XRANK%28cb%3D12%29+doctypebranch%3ACHAMBER%29+XRANK%28cb%3D11%29+doctypebranch%3AADMISSIBILITY%29+XRANK%28cb%3D10%29+doctypebranch%3ACOMMITTEE%29+XRANK%28cb%3D9%29+doctypebranch%3AADMISSIBILITYCOM%29+XRANK%28cb%3D8%29+doctypebranch%3ADECCOMMISSION%29+XRANK%28cb%3D7%29+doctypebranch%3ACOMMUNICATEDCASES%29+XRANK%28cb%3D6%29+doctypebranch%3ACLIN%29+XRANK%28cb%3D5%29+doctypebranch%3AADVISORYOPINIONS%29+XRANK%28cb%3D4%29+doctypebranch%3AREPORTS%29+XRANK%28cb%3D3%29+doctypebranch%3AEXECUTION%29+XRANK%28cb%3D2%29+doctypebranch%3AMERITS%29+XRANK%28cb%3D1%29+doctypebranch%3ASCREENINGPANEL%29+XRANK%28cb%3D4%29+importance%3A1%29+XRANK%28cb%3D3%29+importance%3A2%29+XRANK%28cb%3D2%29+importance%3A3%29+XRANK%28cb%3D1%29+importance%3A4%29+XRANK%28cb%3D2%29+languageisocode%3AENG%29+XRANK%28cb%3D1%29+languageisocode%3AFRE&ranking. Model. Id=4180000c-8692-45ca-ad63-74bc4163871b&sort=kpdate+Descending&start=0", + "kind": "rss", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 400", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T17:39:27.641Z", + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastCheckedAt": "2026-04-22T17:39:27.641Z" + }, + { + "id": "judiciary-uk-news", + "provider": "Judiciary of England and Wales a News", + "endpoint": "https://www.judiciary.uk/feed/", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T11:44:44.316Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T16:17:11.443Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T16:17:11.443Z", + "lastFailureAt": "2026-04-22T16:17:11.443Z", + "lastCheckedAt": "2026-04-22T16:17:11.443Z" + }, + { + "id": "uclh-news", + "provider": "University College London Hospitals a News", + "endpoint": "https://www.uclh.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "west-yorkshire-police-coroner-appeals-rss", + "provider": "West Yorkshire Police - Coroner Appeals Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/coroner-appeals/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "thank-you-for-the-days", + "provider": "Thank you for the days", + "endpoint": "https://thankyouforthedays.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 2, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "west-yorkshire-police-news", + "provider": "West Yorkshire Police a News", + "endpoint": "https://www.westyorkshire.police.uk/news", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nhs-london-nel-news", + "provider": "NHS North East London a News", + "endpoint": "https://northeastlondon.icb.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T10:07:46.576Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-28T10:07:46.576Z", + "lastFailureAt": "2026-04-21T10:07:46.576Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "kingston-council-news", + "provider": "Kingston Council a News", + "endpoint": "https://www.kingston.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-28T08:24:19.478Z", + "lastFailureAt": "2026-04-21T08:24:19.478Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "merton-council-news", + "provider": "Merton Council a News", + "endpoint": "https://www.merton.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-28T08:24:19.478Z", + "lastFailureAt": "2026-04-21T08:24:19.478Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "north-wales-community-alert", + "provider": "North Wales Community Alert", + "endpoint": "https://www.northwalescommunityalert.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-17T05:46:58.069Z" + }, + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-20T23:15:54.554Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T23:15:54.554Z", + "lastFailureAt": "2026-04-20T23:15:54.554Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "cambridge-news", + "provider": "Cambridge News", + "endpoint": "https://www.cambridge-news.co.uk/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "deadline-news", + "provider": "Deadline News", + "endpoint": "https://www.deadlinenews.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 20 after repeated failures", + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 500", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "independent-top-stories", + "provider": "The Independent - Top Stories", + "endpoint": "https://www.independent.co.uk/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "fmcg-gurus", + "provider": "FMCG Gurus", + "endpoint": "https://fmcggurus.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "portugal-pj-news", + "provider": "Policia Judiciaria Portugal - News", + "endpoint": "https://www.policiajudiciaria.pt/noticias/", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T19:18:33.309Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T15:59:44.503Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T15:59:44.503Z", + "lastFailureAt": "2026-04-20T15:59:44.503Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "guardian-uk-top-stories", + "provider": "The Guardian - UK Top Stories", + "endpoint": "https://www.theguardian.com/uk/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-20T06:30:13.977Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 3, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T23:43:16.267Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "silly-old-sod", + "provider": "Silly Old Sod", + "endpoint": "https://www.sillyoldsod.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent timeouts — endpoint may be overloaded or unreachable", + "quarantinedAt": "2026-04-20T04:05:33.139Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-20T04:05:33.139Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T04:05:33.139Z", + "lastFailureAt": "2026-04-20T04:05:33.139Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "serious-fraud-office-news", + "provider": "Serious Fraud Office a News", + "endpoint": "https://www.gov.uk/search/news-and-communications?organisations%5B%5D=serious-fraud-office&parent=serious-fraud-office", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T04:05:33.139Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T04:05:33.139Z", + "lastFailureAt": "2026-04-20T04:05:33.139Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "a-lady-in-london", + "provider": "A Lady in London", + "endpoint": "https://www.aladyinlondon.com/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T18:05:04.781Z", + "lastFailureAt": "2026-04-19T18:05:04.781Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "cheshire-police-alert", + "provider": "Cheshire Police Alert", + "endpoint": "https://www.cheshirepolicealert.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "dc-police-community-messaging", + "provider": "Dorset and Cornwall Police - Community Messaging", + "endpoint": "https://community-messaging.dc.police.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "devon-cornwall-alerts", + "provider": "Devon and Cornwall Alerts", + "endpoint": "https://alerts.dc.police.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "south-yorkshire-police-alerts", + "provider": "South Yorkshire Police Alerts", + "endpoint": "https://www.sypalerts.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "stay-in-the-know-home", + "provider": "Stay In The Know - Community Alerts", + "endpoint": "https://www.stayintheknow.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "stay-in-the-know-latest-alerts", + "provider": "Stay In The Know - Latest Alerts", + "endpoint": "https://www.stayintheknow.co.uk/Content/Pages/Latest-Alerts", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "west-midlands-community-alerts", + "provider": "WMNow - Community Alerts", + "endpoint": "https://www.wmnow.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "west-yorkshire-community-alert", + "provider": "West Yorkshire Community Alert", + "endpoint": "https://www.wypcommunityalert.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T17:13:24.435Z", + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "france24-europe-rss", + "provider": "France 24 a Europe (RSS)", + "endpoint": "https://www.france24.com/en/europe/rss", + "kind": "rss", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-19T16:03:49.134Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T16:03:49.134Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T06:12:01.477Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T05:47:56.833Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T05:47:56.833Z", + "lastFailureAt": "2026-04-23T05:47:56.833Z", + "lastCheckedAt": "2026-04-23T05:47:56.833Z" + }, + { + "id": "bbc-news-uk-politics-legacy", + "provider": "BBC News a UK Politics (Legacy RSS)", + "endpoint": "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/uk_politics/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-19T03:30:54.684Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T03:30:54.684Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T15:59:44.503Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rusi-home", + "provider": "RUSI", + "endpoint": "https://www.rusi.org/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 20 after repeated failures", + "quarantinedAt": "2026-04-19T03:30:54.684Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T03:30:54.684Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T03:30:54.684Z", + "lastFailureAt": "2026-04-19T03:30:54.684Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "gnet-youth-rss", + "provider": "Global Network on Extremism & Technology (GNET) a Youth (RSS)", + "endpoint": "https://gnet-research.org/tag/youth/feed/", + "kind": "rss", + "lane": "prevention", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T22:00:46.520Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T11:07:28.674Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T12:15:37.169Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T22:00:46.520Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T17:16:47.386Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T17:39:27.641Z", + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastCheckedAt": "2026-04-22T17:39:27.641Z" + }, + { + "id": "ealing-council-news", + "provider": "Ealing Council a News", + "endpoint": "https://www.ealing.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T21:09:53.488Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T21:09:53.488Z", + "lastFailureAt": "2026-04-18T21:09:53.488Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "eu-ejustice-news-rss", + "provider": "European e-Justice - News RSS", + "endpoint": "https://e-justice.europa.eu/rss/news_en", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-18T13:27:18.679Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T13:27:18.679Z", + "lastFailureAt": "2026-04-18T13:27:18.679Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "just-security", + "provider": "Just Security a Law, Rights & National Security", + "endpoint": "https://www.justsecurity.org/feed/", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T09:29:55.311Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T23:55:39.351Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T09:29:55.311Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T04:05:33.139Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "evening-shire", + "provider": "Evening Shire", + "endpoint": "https://eveningshire.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T07:21:41.099Z", + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "quadrant2design-exhibiting-guides", + "provider": "Quadrant2. Design Exhibiting Guides", + "endpoint": "https://www.quadrant2design.com/exhibiting-guides/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T07:21:41.099Z", + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastCheckedAt": "2026-04-23T11:47:27.254Z" + }, + { + "id": "semibold", + "provider": "Semibold", + "endpoint": "https://www.semibold.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-25T07:21:41.099Z", + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "gnet-radicalisation-rss", + "provider": "Global Network on Extremism & Technology (GNET) a Radicalisation (RSS)", + "endpoint": "https://gnet-research.org/tag/radicalisation/feed/", + "kind": "rss", + "lane": "prevention", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T21:08:30.446Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "barking-dagenham-council-news", + "provider": "Barking and Dagenham Council a News", + "endpoint": "https://www.lbbd.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "hammersmith-fulham-news", + "provider": "Hammersmith and Fulham Council a News", + "endpoint": "https://www.lbhf.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "royal-greenwich-news", + "provider": "Royal Borough of Greenwich a News", + "endpoint": "https://www.royalgreenwich.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-ncsc-threat-reports", + "provider": "National Cyber Security Centre (UK) a Threat Reports", + "endpoint": "https://www.ncsc.gov.uk/api/1/services/v1/report-rss-feed.xml", + "kind": "rss", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T21:08:30.446Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-parliament-isc", + "provider": "UK Parliament a Intelligence and Security Committee (Reports & News)", + "endpoint": "https://isc.independent.gov.uk/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ecfr-feeds-index", + "provider": "ECFR - Feeds", + "endpoint": "https://ecfr.eu/feeds/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "statewatch-news", + "provider": "Statewatch - News", + "endpoint": "https://www.statewatch.org/news/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "clingendael-publications", + "provider": "Clingendael Institute a Publications", + "endpoint": "https://www.clingendael.org/publications", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ecfr-publications", + "provider": "European Council on Foreign Relations (ECFR) a Publications", + "endpoint": "https://ecfr.eu/publications/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "financial-times-world", + "provider": "Financial Times a World", + "endpoint": "https://www.ft.com/world", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 2, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "politico-europe", + "provider": "Politico Europe", + "endpoint": "https://www.politico.eu/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "acled-updates", + "provider": "ACLED a Updates and Analysis", + "endpoint": "https://acleddata.com/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "resolve-network-research", + "provider": "RESOLVE Network a Research", + "endpoint": "https://www.resolvenet.org/news", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 17 after repeated failures", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 503", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "reuters-uk", + "provider": "Reuters a UK News", + "endpoint": "https://www.reuters.com/world/uk/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "soufan-center-intelbrief", + "provider": "The Soufan Center a Intel. Brief", + "endpoint": "https://thesoufancenter.org/category/intelbrief/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "tony-blair-institute-news", + "provider": "Tony Blair Institute for Global Change a Publications", + "endpoint": "https://institute.global/insights", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "chatham-house-home", + "provider": "Chatham House", + "endpoint": "https://www.chathamhouse.org/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "chatham-house-security-defence", + "provider": "Chatham House - Security and Defence", + "endpoint": "https://www.chathamhouse.org/topics/security-and-defence", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "institute-global-home", + "provider": "Institute for Global Change", + "endpoint": "https://www.institute.global/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "wiltshire-999s", + "provider": "Wiltshire 999s", + "endpoint": "https://www.wiltshire999s.co.uk/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "icsr-kcl", + "provider": "International Centre for the Study of Radicalisation (ICSR) a Updates", + "endpoint": "https://icsr.info/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rand-terrorism-topic", + "provider": "RAND - Terrorism Topic Updates", + "endpoint": "https://www.rand.org/topics/terrorism.html", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "start-baad-database", + "provider": "National Consortium for the Study of Terrorism (START) - Big Allied and Dangerous (BAAD) Database", + "endpoint": "https://www.start.umd.edu/baad/database/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "start-center-publications", + "provider": "START Center (UMD) - News & Publications", + "endpoint": "https://www.start.umd.edu/news", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "bdk-rss", + "provider": "Bund Deutscher Kriminalbeamter - RSS", + "endpoint": "https://www.bdk.de/rss/alle-nachrichten/RSS", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "euractiv-security-rss", + "provider": "BBC News - Europe", + "endpoint": "https://feeds.bbci.co.uk/news/world/europe/rss.xml", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "isd-global-publications", + "provider": "ISD - Publications", + "endpoint": "https://www.isdglobal.org/publications/", + "kind": "html", + "lane": "prevention", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "dw-europe-rss", + "provider": "Deutsche Welle a Europe (RSS)", + "endpoint": "https://rss.dw.com/rdf/rss-en-eu", + "kind": "rss", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "ap-top-news", + "provider": "BBC News - Top Stories", + "endpoint": "https://feeds.bbci.co.uk/news/rss.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "crisis-group", + "provider": "International Crisis Group a Research & Analysis", + "endpoint": "https://www.crisisgroup.org/rss.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "crisis-group-europe", + "provider": "International Crisis Group a Europe (RSS)", + "endpoint": "https://www.crisisgroup.org/rss/56", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "lawfare-blog", + "provider": "Just Security - National Security Analysis", + "endpoint": "https://www.justsecurity.org/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "henry-jackson-society-news", + "provider": "RUSI - Terrorism and Conflict", + "endpoint": "https://www.rusi.org/explore-our-research/research-groups/terrorism-and-conflict?source=henry-jackson-society-news", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun-all", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feeds/all/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun-all-english", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feeds/news-app-english-001-all/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun-homepage", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feeds/favourite-homepage/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun-news-english", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feeds/news-app-english-007-news/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "metro", + "provider": "BBC News - UK", + "endpoint": "https://feeds.bbci.co.uk/news/uk/rss.xml?source=metro", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "pinknews", + "provider": "Pink. News", + "endpoint": "https://www.pinknews.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T13:19:06.686Z", + "lastFailureAt": "2026-04-19T13:19:06.686Z", + "lastCheckedAt": "2026-04-23T20:18:46.625Z" + }, + { + "id": "the-daily-mash", + "provider": "The Daily Mash", + "endpoint": "https://www.thedailymash.co.uk/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T13:19:06.686Z", + "lastFailureAt": "2026-04-19T13:19:06.686Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "the-scottish-sun", + "provider": "The Scottish Sun", + "endpoint": "https://www.thescottishsun.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "the-sun", + "provider": "The Sun", + "endpoint": "https://www.thesun.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "elluminet-press", + "provider": "9to5. Mac", + "endpoint": "https://9to5mac.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 20 after repeated failures", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "faded-spring", + "provider": "Emily Underworld", + "endpoint": "https://emilyunderworld.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "ian-neate-blog", + "provider": "9to5. Mac", + "endpoint": "https://9to5mac.com/feed/?source=ian-neate-blog", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "sks-business-services", + "provider": "SKS Business Services", + "endpoint": "https://www.sksbusinessservices.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "streetspace", + "provider": "Streetspace", + "endpoint": "https://streetspacegroup.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "police-scotland-news", + "provider": "Police Scotland news", + "endpoint": "https://www.scotland.police.uk/what-s-happening/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 23 after repeated failures", + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T19:32:35.264Z", + "lastFailureAt": "2026-04-19T19:32:35.264Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "frontex-news-releases", + "provider": "Frontex a News Releases", + "endpoint": "https://www.frontex.europa.eu/media-centre/news/news-release/", + "kind": "html", + "lane": "border", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "enisa-news", + "provider": "ENISA (EU Cybersecurity Agency) a News", + "endpoint": "https://www.enisa.europa.eu/news", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "enisa-rss-transition-page", + "provider": "ENISA - RSS Feeds Transition Notice", + "endpoint": "https://www.enisa.europa.eu/rss-feeds-discontinued-new-subscription-mechanism-coming-soon", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eurojust-press-news-html", + "provider": "Eurojust - Press Releases and News", + "endpoint": "https://www.eurojust.europa.eu/media-and-events/press-releases-and-news", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "europol-media-press", + "provider": "Europol a Media and Press", + "endpoint": "https://www.europol.europa.eu/media-press", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "europol-newsroom-html", + "provider": "Europol - Newsroom", + "endpoint": "https://www.europol.europa.eu/media-press/newsroom", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "finland-supo-news", + "provider": "Finnish Security Intelligence Service - News", + "endpoint": "https://supo.fi/en/current-issues", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "german-interior-ministry-press", + "provider": "German Federal Ministry for Economic Cooperation and Development - Feed", + "endpoint": "https://www.bmz.de/en/feed.rss", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 20 after repeated failures", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 400", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "paris-prefecture-police-rss-page", + "provider": "Paris Prefecture of Police - RSS", + "endpoint": "https://www.prefecturedepolice.interieur.gouv.fr/presentation/les-directions-et-services/le-cabinet-du-prefet-de-police/service-de-la-communication/abonnez-vous-aux-flux-rss", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "spain-interior-ministry-news", + "provider": "Spanish Ministry of the Interior - Press", + "endpoint": "https://www.interior.gob.es/opencms/en/prensa/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "ertzaintza-news", + "provider": "Ertzaintza - News", + "endpoint": "https://www.ertzaintza.euskadi.eus/lfr/eu/webertzaintza/noticias", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "finland-police-news", + "provider": "Finnish Police - News", + "endpoint": "https://poliisi.fi/en/news", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "paris-prefecture-police-press-releases", + "provider": "Paris Prefecture of Police - Press Releases", + "endpoint": "https://www.prefecturedepolice.interieur.gouv.fr/actualites-et-presse/communiques-de-presse/communiques-de-presse", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "romanian-police-news", + "provider": "Romanian Police - News", + "endpoint": "https://www.politiaromana.ro/en/news", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eu-commission-presscorner-home", + "provider": "Council of the EU - Press Releases (RSS)", + "endpoint": "https://www.consilium.europa.eu/en/rss/pressreleases.ashx?source=eu-commission-presscorner-home", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "eu-council-fight-against-terrorism", + "provider": "Council of the EU - Fight Against Terrorism", + "endpoint": "https://www.consilium.europa.eu/en/policies/fight-against-terrorism/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eu-council-rss-index", + "provider": "Council of the EU - RSS Index", + "endpoint": "https://www.consilium.europa.eu/en/about-site/rss/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eu-ct-coordinator", + "provider": "EU Counter-Terrorism Coordinator a Council of the EU", + "endpoint": "https://www.consilium.europa.eu/en/policies/fight-against-terrorism/eu-counter-terrorism-coordinator/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eu-fra-rss", + "provider": "EU Agency for Fundamental Rights (FRA) a RSS", + "endpoint": "https://fra.europa.eu/en/content/rss", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "eurojust-rss-feeds-page", + "provider": "Eurojust - RSS Feeds", + "endpoint": "https://www.eurojust.europa.eu/rss-feeds", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "europol-tesat-report", + "provider": "Europol - TESAT Report", + "endpoint": "https://www.europol.europa.eu/publications-events/main-reports/tesat-report", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "fra-rss", + "provider": "Human Rights Watch - News RSS", + "endpoint": "https://www.hrw.org/rss/news", + "kind": "rss", + "lane": "oversight", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "europol-eu-iru", + "provider": "Europol a EU Internet Referral Unit (EU IRU)", + "endpoint": "https://www.europol.europa.eu/about-europol/european-counter-terrorism-centre-ectc/eu-internet-referal-unit-eu-iru", + "kind": "html", + "lane": "prevention", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ncsc-nl-rss", + "provider": "NCSC Netherlands - RSS", + "endpoint": "https://feeds.ncsc.nl/nieuws.rss", + "kind": "rss", + "lane": "prevention", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "eu-council-terrorism-sanctions", + "provider": "Council of the EU - Sanctions Against Terrorism", + "endpoint": "https://www.consilium.europa.eu/en/policies/sanctions-against-terrorism/", + "kind": "html", + "lane": "sanctions", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "unhcr-europe-news", + "provider": "UNHCR Europe a News", + "endpoint": "https://www.unhcr.org/europe/news", + "kind": "html", + "lane": "border", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "french-interior-ministry-news", + "provider": "French Ministry of the Interior - News", + "endpoint": "https://www.interieur.gouv.fr/actualites", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "netherlands-nctv-news", + "provider": "Dutch NCTV - News", + "endpoint": "https://www.nctv.nl/actueel", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "french-gendarmerie-news", + "provider": "Gendarmerie Nationale - News", + "endpoint": "https://www.gendarmerie.interieur.gouv.fr/gendarmerie/actualites", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "french-police-nationale-news", + "provider": "Police Nationale - News", + "endpoint": "https://www.police-nationale.interieur.gouv.fr/actualites", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ireland-gardai-press", + "provider": "An Garda Siochana - Press Releases", + "endpoint": "https://www.garda.ie/en/about-us/our-departments/office-of-corporate-communications/press-releases/", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "paris-police-prefecture-news", + "provider": "France24 - France (RSS)", + "endpoint": "https://www.france24.com/en/france/rss", + "kind": "rss", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "portugal-psp-news", + "provider": "The Portugal News - Crime", + "endpoint": "https://www.theportugalnews.com/news/crime", + "kind": "html", + "lane": "incidents", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "coe-counter-terrorism", + "provider": "Council of Europe a Counter-Terrorism", + "endpoint": "https://www.coe.int/en/web/counter-terrorism/news-updates", + "kind": "html", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "netherlands-prosecution-news", + "provider": "Dutch Public Prosecution Service - News", + "endpoint": "https://www.om.nl/actueel/nieuws", + "kind": "html", + "lane": "oversight", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "pst-no-english", + "provider": "PST (Norway) English reporting page", + "endpoint": "https://www.pst.no/en/report/", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ran-network", + "provider": "RUSI - Terrorism and Conflict", + "endpoint": "https://www.rusi.org/explore-our-research/research-groups/terrorism-and-conflict?source=ran-network", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "supo-fi-english", + "provider": "SUPO Finland news and press releases", + "endpoint": "https://supo.fi/en/news-and-press-releases", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "iom-news", + "provider": "IOM (International Organization for Migration) a News", + "endpoint": "https://www.iom.int/news", + "kind": "html", + "lane": "border", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "unsc-counter-terrorism-committee", + "provider": "UN Security Council - Counter-Terrorism Committee (CTC) Updates", + "endpoint": "https://www.un.org/securitycouncil/ctc/news", + "kind": "html", + "lane": "oversight", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "fatf-news", + "provider": "Financial Action Task Force (FATF) a News", + "endpoint": "https://www.fatf-gafi.org/en/publications.html", + "kind": "html", + "lane": "sanctions", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "interpol-notices", + "provider": "INTERPOL a Notices", + "endpoint": "https://www.interpol.int/How-we-work/Notices", + "kind": "html", + "lane": "sanctions", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "unsc-1267-press-releases", + "provider": "UN Security Council - ISIL/Da'esh & Al-Qaeda Sanctions Committee Press Releases", + "endpoint": "https://main.un.org/securitycouncil/en/sanctions/1267/press-releases", + "kind": "html", + "lane": "sanctions", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "unsc-consolidated-list", + "provider": "UN Security Council - Consolidated Sanctions List Updates (RSS)", + "endpoint": "https://main.un.org/securitycouncil/en/rss-updates-unsc-consolidated-list", + "kind": "rss", + "lane": "sanctions", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "barnet-council-news", + "provider": "Barnet Post", + "endpoint": "https://barnetpost.co.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "city-of-london-police-fraud-reporting", + "provider": "City of London Police - Fraud Reporting", + "endpoint": "https://www.cityoflondon.police.uk/ro/report/fo/v1/fraud/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cnwl-news", + "provider": "Central and North West London NHS Foundation Trust a News", + "endpoint": "https://www.cnwl.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "east-london-nhs-news", + "provider": "East London NHS Foundation Trust a News", + "endpoint": "https://www.elft.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "enfield-council-news", + "provider": "Enfield Council a News and Events", + "endpoint": "https://www.enfield.gov.uk/news-and-events", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "haringey-council-news", + "provider": "Haringey Community Press", + "endpoint": "https://haringeycommunitypress.co.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "harrow-council-news", + "provider": "Harrow Council a News", + "endpoint": "https://www.harrow.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "heathrow-media-centre", + "provider": "Heathrow a Media Centre", + "endpoint": "https://mediacentre.heathrow.com/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "imperial-healthcare-news", + "provider": "Imperial College Healthcare NHS Trust a News", + "endpoint": "https://www.imperial.nhs.uk/about-us/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "kensington-chelsea-newsroom", + "provider": "Royal Borough of Kensington and Chelsea a Newsroom", + "endpoint": "https://www.rbkc.gov.uk/newsroom", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "lewisham-council-news", + "provider": "Salamander News", + "endpoint": "https://salamandernews.org/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "london-ambulance-news", + "provider": "London Ambulance Service a News", + "endpoint": "https://www.londonambulance.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-city-airport-media-centre", + "provider": "London City Airport a Media Centre", + "endpoint": "https://www.londoncityairport.com/corporate/media-centre", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-councils-news", + "provider": "London Councils a News", + "endpoint": "https://www.londoncouncils.gov.uk/news-and-press-releases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-fire-brigade-news", + "provider": "London Fire Brigade a News", + "endpoint": "https://www.london-fire.gov.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-gov-home", + "provider": "London.gov.uk", + "endpoint": "https://www.london.gov.uk/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-gov-press-releases-html", + "provider": "London.gov.uk - Press Releases", + "endpoint": "https://www.london.gov.uk/press-releases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nhs-london-ncl-news", + "provider": "NHS North Central London a News", + "endpoint": "https://nclhealthandcare.org.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nhs-london-swl-news", + "provider": "NHS South West London a News", + "endpoint": "https://www.southwestlondon.icb.nhs.uk/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "north-middlesex-news", + "provider": "North Middlesex University Hospital a News", + "endpoint": "https://www.northmid.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "port-of-london-authority-news", + "provider": "Port of London Authority a News", + "endpoint": "https://pla.co.uk/News", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "royal-free-london-news", + "provider": "Royal Free London NHS Foundation Trust a News", + "endpoint": "https://www.royalfree.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "southwark-newsroom", + "provider": "Southwark Council a Newsroom", + "endpoint": "https://news.southwark.gov.uk/newsroom/news/rss", + "kind": "rss", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "tavistock-portman-news", + "provider": "Tavistock and Portman NHS Foundation Trust a News", + "endpoint": "https://tavistockandportman.nhs.uk/about-us/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "tfl-press-releases", + "provider": "Transport for London - Press Releases", + "endpoint": "https://tfl.gov.uk/info-for/media/press-releases?source=tfl-press-releases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "tfl-press-releases-html", + "provider": "Transport for London - Press Releases", + "endpoint": "https://tfl.gov.uk/info-for/media/press-releases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "city-of-london-police-news", + "provider": "National Crime Agency - News", + "endpoint": "https://www.nationalcrimeagency.gov.uk/news?source=city-of-london-police-news", + "kind": "html", + "lane": "incidents", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "city-of-london-police-news-html", + "provider": "City of London Police - News", + "endpoint": "https://www.cityoflondon.police.uk/news/city-of-london-police/news/", + "kind": "html", + "lane": "incidents", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "city-of-london-police-newsroom", + "provider": "Metropolitan Police Service - News", + "endpoint": "https://news.met.police.uk/", + "kind": "html", + "lane": "incidents", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "ct-policing-london", + "provider": "Counter Terrorism Policing London", + "endpoint": "https://www.counterterrorism.police.uk/counter-terrorism-policing-london/", + "kind": "html", + "lane": "incidents", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "mopac-html", + "provider": "Mayor's Office for Policing and Crime", + "endpoint": "https://www.london.gov.uk/programmes-strategies/mayors-office-policing-and-crime-mopac", + "kind": "html", + "lane": "oversight", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "bbc-news-front-page-legacy", + "provider": "BBC News a Front Page (Legacy RSS)", + "endpoint": "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T22:12:37.099Z", + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bbc-news-uk", + "provider": "BBC News a UK", + "endpoint": "https://feeds.bbci.co.uk/news/uk/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T22:12:37.099Z", + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "essex-police-news", + "provider": "Essex Police a News", + "endpoint": "https://www.essex.police.uk/news/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "kent-police-news", + "provider": "Kent Police a News", + "endpoint": "https://www.kent.police.uk/news/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "mi5-news", + "provider": "National Crime Agency - News", + "endpoint": "https://www.nationalcrimeagency.gov.uk/news?source=mi5-news", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "national-crime-agency-news", + "provider": "National Crime Agency a News", + "endpoint": "https://www.nationalcrimeagency.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "report-fraud-home", + "provider": "Report Fraud", + "endpoint": "https://www.reportfraud.police.uk/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "report-fraud-newsroom", + "provider": "Report Fraud - Newsroom", + "endpoint": "https://www.reportfraud.police.uk/collection/newsroom/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "church-of-england-newspaper", + "provider": "Church of England Newspaper", + "endpoint": "https://www.churchnewspaper.com/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T22:12:37.099Z", + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bedfordshire-police-news", + "provider": "Bedfordshire Police - News", + "endpoint": "https://www.beds.police.uk/news/bedfordshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "bedfordshire-police-news-search", + "provider": "Bedfordshire Police - News Search", + "endpoint": "https://www.beds.police.uk/news/news-search/?ct=News", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "british-transport-police-news", + "provider": "British Transport Police Authority - News Feed", + "endpoint": "https://btpa.police.uk/feed/", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "btp-british-transport-police-news-html", + "provider": "British Transport Police - News", + "endpoint": "https://www.btp.police.uk/news/british-transport-police/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cambridgeshire-police-news-search", + "provider": "Cambridgeshire Police - News Search", + "endpoint": "https://www.cambs.police.uk/news/news-search/?ct=News", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cheshire-police-news", + "provider": "Cheshire Constabulary - News", + "endpoint": "https://www.cheshire.police.uk/news/cheshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cleveland-police-news", + "provider": "Cleveland Police - News", + "endpoint": "https://www.cleveland.police.uk/news/cleveland/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cps-news-centre", + "provider": "Crown Prosecution Service a News Centre", + "endpoint": "https://www.cps.gov.uk/news", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-north-west", + "provider": "Counter Terrorism Policing North West", + "endpoint": "https://www.counterterrorism.police.uk/north-west/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-uk-latest-news", + "provider": "Counter Terrorism Policing UK a Latest News", + "endpoint": "https://www.counterterrorism.police.uk/latest-news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-uk-rss-feed", + "provider": "Counter Terrorism Policing UK - Latest News", + "endpoint": "https://www.counterterrorism.police.uk/latest-news/?source=ct-policing-uk-rss-feed", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T14:03:06.243Z", + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastCheckedAt": "2026-04-23T14:03:06.243Z" + }, + { + "id": "cumbria-police-news", + "provider": "Cumbria Police - News", + "endpoint": "https://www.cumbria.police.uk/news/cumbria/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cumbria-police-newsroom", + "provider": "Cumbria Police - Newsroom", + "endpoint": "https://www.news.cumbria.police.uk/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "derbyshire-police-news", + "provider": "Derbyshire Police - News", + "endpoint": "https://www.derbyshire.police.uk/news/derbyshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "devon-and-cornwall-police-newsroom", + "provider": "Devon and Cornwall Police - Newsroom", + "endpoint": "https://news.devon-cornwall.police.uk/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "devon-cornwall-police-news", + "provider": "Devon and Cornwall Police - News", + "endpoint": "https://www.devon-cornwall.police.uk/news/devon-cornwall/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "dorset-police-news", + "provider": "Dorset Police - News", + "endpoint": "https://www.dorset.police.uk/news/dorset/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "dorset-police-newsroom", + "provider": "Dorset Police - Newsroom", + "endpoint": "https://news.dorset.police.uk/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "durham-constabulary-news", + "provider": "Durham Constabulary a News", + "endpoint": "https://www.durham.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "durham-police-durham-news", + "provider": "Durham Police - Durham News", + "endpoint": "https://www.durham.police.uk/news/durham/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "dyfed-powys-police-news", + "provider": "Dyfed-Powys Police - News", + "endpoint": "https://www.dyfed-powys.police.uk/news/dyfed-powys/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "essex-police-news-html", + "provider": "Essex Police - News", + "endpoint": "https://www.essex.police.uk/news/essex/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gloucestershire-police-news", + "provider": "Gloucestershire Police - News", + "endpoint": "https://www.gloucestershire.police.uk/news/gloucestershire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gmp-news", + "provider": "Greater Manchester Police a News", + "endpoint": "https://www.gmp.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "greater-manchester-police-news", + "provider": "Greater Manchester Police - News", + "endpoint": "https://www.gmp.police.uk/news/greater-manchester/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gwent-police-news", + "provider": "Gwent Police - News", + "endpoint": "https://www.gwent.police.uk/news/gwent/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "hampshire-police-news", + "provider": "Hampshire & Isle of Wight Constabulary a News", + "endpoint": "https://www.hampshire.police.uk/news/hampshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "hertfordshire-police-news", + "provider": "Hertfordshire Constabulary a News", + "endpoint": "https://www.herts.police.uk/news/hertfordshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "humberside-police-news-search", + "provider": "Humberside Police - News Search", + "endpoint": "https://www.humberside.police.uk/news/news-search/?ct=News", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "kent-police-news-html", + "provider": "Kent Police - News", + "endpoint": "https://www.kent.police.uk/news/kent/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "lancashire-constabulary-news", + "provider": "Lancashire Constabulary a News", + "endpoint": "https://www.lancashire.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "leicestershire-police-news", + "provider": "National Crime Agency - News", + "endpoint": "https://www.nationalcrimeagency.gov.uk/news?source=leicestershire-police-news", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "lincolnshire-police-news", + "provider": "Lincolnshire Police - News", + "endpoint": "https://www.lincs.police.uk/news/lincolnshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "merseyside-police-news", + "provider": "Merseyside Police a News", + "endpoint": "https://www.merseyside.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "merseyside-police-news-html", + "provider": "Merseyside Police - News", + "endpoint": "https://www.merseyside.police.uk/news/merseyside-police/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "norfolk-constabulary-news", + "provider": "Norfolk Constabulary - News", + "endpoint": "https://www.norfolk.police.uk/news/norfolk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "north-wales-police-news", + "provider": "North Wales Police - News", + "endpoint": "https://www.northwales.police.uk/news/north-wales/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "north-yorkshire-police-news-html", + "provider": "North Yorkshire Police - News", + "endpoint": "https://www.northyorkshire.police.uk/news/north-yorkshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "northamptonshire-police-news-html", + "provider": "Northamptonshire Police - News", + "endpoint": "https://www.northants.police.uk/news/northants/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "northumbria-police-news", + "provider": "North East Bylines", + "endpoint": "https://northeastbylines.co.uk/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "northumbria-police-northumbria-news", + "provider": "Northumbria Police - Northumbria News", + "endpoint": "https://www.northumbria.police.uk/news/northumbria/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nottinghamshire-police-news", + "provider": "Nottinghamshire Police a News", + "endpoint": "https://www.nottinghamshire.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nottinghamshire-police-nottinghamshire-news", + "provider": "Nottinghamshire Police - Nottinghamshire News", + "endpoint": "https://www.nottinghamshire.police.uk/news/nottinghamshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "psni-news", + "provider": "Police Service of Northern Ireland a News", + "endpoint": "https://www.psni.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "south-wales-police-news", + "provider": "South Wales Police - News", + "endpoint": "https://www.south-wales.police.uk/news/south-wales/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "south-yorkshire-police-news", + "provider": "South Yorkshire Police a News", + "endpoint": "https://www.southyorkshire.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "staffordshire-police-news", + "provider": "Staffordshire Police a News", + "endpoint": "https://www.staffordshire.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "staffordshire-police-staffordshire-news", + "provider": "Staffordshire Police - Staffordshire News", + "endpoint": "https://www.staffordshire.police.uk/news/staffordshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "suffolk-constabulary-news", + "provider": "Suffolk Constabulary - News", + "endpoint": "https://www.suffolk.police.uk/news/suffolk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "surrey-police-news", + "provider": "Surrey Police a News", + "endpoint": "https://www.surrey.police.uk/news/surrey/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "sussex-police-news", + "provider": "Sussex Police a News", + "endpoint": "https://www.sussex.police.uk/news/sussex/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "thames-valley-police-news", + "provider": "Thames Valley Police a News", + "endpoint": "https://www.thamesvalley.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "thames-valley-police-news-html", + "provider": "Thames Valley Police - Thames Valley News", + "endpoint": "https://www.thamesvalley.police.uk/news/thames-valley/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "warwickshire-police-news", + "provider": "Warwickshire Connected - Latest Alerts", + "endpoint": "https://www.warwickshireconnected.com/Content/Pages/Latest-Alerts", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 2, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "west-mercia-police-news-html", + "provider": "West Mercia Police - News", + "endpoint": "https://www.westmercia.police.uk/news/west-mercia/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "west-midlands-police-news", + "provider": "West Midlands Police a News", + "endpoint": "https://www.westmidlands.police.uk/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "west-yorkshire-police-missing-rss", + "provider": "West Yorkshire Police - Missing Feed", + "endpoint": "https://www.westyorkshire.police.uk/news/missing/feed", + "kind": "rss", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "wiltshire-police-news", + "provider": "Wiltshire Police - News", + "endpoint": "https://www.wiltshire.police.uk/news/wiltshire/news/", + "kind": "html", + "lane": "incidents", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "cps-homepage", + "provider": "Crown Prosecution Service", + "endpoint": "https://www.cps.gov.uk/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gov-uk-hmic", + "provider": "HM Inspectorate of Constabulary a GOV.UK", + "endpoint": "https://hmicfrs.justiceinspectorates.gov.uk/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gov-uk-parliament-jcnss", + "provider": "UK Parliament a Joint Committee on National Security Strategy", + "endpoint": "https://committees.parliament.uk/committee/54/joint-committee-on-the-national-security-strategy/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "lords-in-focus-rss", + "provider": "Hansard Society - Despatch Box", + "endpoint": "https://www.hansardsociety.org.uk/blog", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "lords-library-notes-rss", + "provider": "Hansard Society - Despatch Box", + "endpoint": "https://www.hansardsociety.org.uk/blog?source=lords-library-notes-rss", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "police-ombudsman-current-investigations", + "provider": "Police Ombudsman - Current Investigations", + "endpoint": "https://www.policeombudsman.org/investigation-reports/current-investigations", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "police-uk-outcomes-at-location-1609590", + "provider": "Police Data UK - Outcomes At Location API Docs", + "endpoint": "https://data.police.uk/docs/method/outcomes-at-location/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "uk-parliament-business-news", + "provider": "UK Parliament - Business News", + "endpoint": "https://www.parliament.uk/business/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-parliament-foreign-affairs-committee", + "provider": "UK Parliament a Foreign Affairs Select Committee", + "endpoint": "https://committees.parliament.uk/committee/78/foreign-affairs-committee/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-parliament-justice-committee", + "provider": "UK Parliament a Justice Select Committee", + "endpoint": "https://committees.parliament.uk/committee/102/justice-committee/news/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-prevent-programme", + "provider": "Counter Terrorism Policing - Prevent", + "endpoint": "https://www.counterterrorism.police.uk/what-we-do/counter-terrorism/prevent/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "ct-policing-what-you-can-do", + "provider": "Counter Terrorism Policing - What You Can Do", + "endpoint": "https://www.counterterrorism.police.uk/what-you-can-do/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gov-uk-report-terrorism", + "provider": "GOV.UK - Report Terrorism", + "endpoint": "https://www.gov.uk/report-terrorism", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "gov-uk-terrorism-national-emergency", + "provider": "GOV.UK - Terrorism National Emergency", + "endpoint": "https://www.gov.uk/terrorism-national-emergency", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "mi5-terrorism-threat-levels", + "provider": "MI5 - Terrorism Threat Levels", + "endpoint": "https://www.mi5.gov.uk/threats-and-advice/terrorism-threat-levels", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "northamptonshire-talking", + "provider": "Northamptonshire Talking", + "endpoint": "https://www.northamptonshiretalking.co.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "npsa-blog", + "provider": "NPSA - Blog", + "endpoint": "https://www.npsa.gov.uk/blog", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "npsa-blog-news", + "provider": "NPSA - Blog News", + "endpoint": "https://www.npsa.gov.uk/blog/news", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "protectuk", + "provider": "ProtectUK (NPSA) a Protective Security Guidance", + "endpoint": "https://www.protectuk.police.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-ncsc-homepage", + "provider": "UK NCSC - Homepage", + "endpoint": "https://www.ncsc.gov.uk/", + "kind": "html", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "uk-sanctions-list", + "provider": "UK Sanctions List (FCDO) a Consolidated List (XML Service)", + "endpoint": "https://sanctionslist.fcdo.gov.uk/docs/UK-Sanctions-List.xml", + "kind": "html", + "lane": "sanctions", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "fbi-national-press-releases", + "provider": "FBI - National Press Releases (RSS)", + "endpoint": "https://www.fbi.gov/feeds/national-press-releases/RSS", + "kind": "rss", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "fbi-stories", + "provider": "FBI - Top Stories (RSS)", + "endpoint": "https://www.fbi.gov/feeds/fbi-top-stories/rss.xml", + "kind": "rss", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "fbi-top-stories", + "provider": "FBI - Top Stories (RSS)", + "endpoint": "https://www.fbi.gov/feeds/fbi-top-stories/rss.xml?source=fbi-top-stories", + "kind": "rss", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "HTML structure changed — selectors no longer match; needs parser update", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "consecutiveFailures": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T10:13:21.253Z", + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastCheckedAt": "2026-04-23T10:13:21.253Z" + }, + { + "id": "us-house-homeland-security", + "provider": "US House Committee on Homeland Security - News", + "endpoint": "https://homeland.house.gov/news/", + "kind": "html", + "lane": "oversight", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 6, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "belgium-crisis-centre-news", + "provider": "Belgian National Crisis Centre - Newsroom", + "endpoint": "https://crisiscenter.be/en/newsroom", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 5 after repeated failures", + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "german-bka-press", + "provider": "German BKA - Press Releases (2026 archive)", + "endpoint": "https://www.bka.de/DE/Presse/Listenseite_Pressemitteilungen/2026/2026_node.html", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 5 after repeated failures", + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "policia-nacional-news", + "provider": "Policia Nacional - Press", + "endpoint": "https://www.policia.es/_es/comunicacion_salaprensa.php", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Health score degraded to 5 after repeated failures", + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-19T18:05:04.781Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-26T18:05:04.781Z", + "lastFailureAt": "2026-04-19T18:05:04.781Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "bfv-de-english", + "provider": "BfV service page (Federal Office for the Protection of the Constitution)", + "endpoint": "https://www.verfassungsschutz.de/EN/service/service_node.html", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T11:07:28.674Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T11:07:28.674Z", + "lastFailureAt": "2026-04-17T11:07:28.674Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "german-bka-press-releases-de", + "provider": "BKA Germany - Press Releases", + "endpoint": "https://www.bka.de/DE/Aktuelle. Informationen/Aktuelle. Meldungen/Pressemeldungen/pressemitteilungen_node.html", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Infrastructure instability — mixed timeout and network errors; auto-retry likely to recover", + "quarantinedAt": "2026-04-17T08:04:04.612Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T07:32:24.475Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T17:39:27.641Z", + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastCheckedAt": "2026-04-22T17:39:27.641Z" + }, + { + "id": "surgezirc-uk", + "provider": "Surge. Zirc UK", + "endpoint": "https://surgezirc.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "quarantinedAt": "2026-04-17T08:04:04.612Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T14:11:10.963Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T11:47:27.254Z", + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastCheckedAt": "2026-04-23T11:47:27.254Z" + }, + { + "id": "arcticdry", + "provider": "Arctic. Dry", + "endpoint": "https://www.arcticdry.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T08:04:04.612Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-24T08:04:04.612Z", + "lastFailureAt": "2026-04-17T08:04:04.612Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "police-uk-all-crime-leicester", + "provider": "Police.uk - Street Crime Around Leicester", + "endpoint": "https://data.police.uk/api/crimes-street/all-crime?lat=52.629729&lng=-1.131592", + "kind": "json", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T23:55:39.351Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-23T23:55:39.351Z", + "lastFailureAt": "2026-04-16T23:55:39.351Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "daily-mail-online", + "provider": "Daily Mail Online - Popular Stories", + "endpoint": "https://www.dailymail.co.uk/home/index.rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T23:55:39.351Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-23T23:55:39.351Z", + "lastFailureAt": "2026-04-16T23:55:39.351Z", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "counter-extremism-project-news", + "provider": "Counter Extremism Project a News", + "endpoint": "https://www.counterextremism.com/news-and-media", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T12:14:24.733Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rusi-terrorism-conflict", + "provider": "RUSI - Terrorism and Conflict", + "endpoint": "https://www.rusi.org/explore-our-research/research-groups/terrorism-and-conflict", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T12:14:24.733Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T12:14:24.733Z", + "lastFailureAt": "2026-04-20T12:14:24.733Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "gov-uk-counter-extremism-commissioner", + "provider": "Counter Extremism Commissioner a GOV.UK", + "endpoint": "https://www.govwire.co.uk/rss/commission-for-countering-extremism", + "kind": "rss", + "lane": "prevention", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T19:01:30.233Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-23T19:01:30.233Z", + "lastFailureAt": "2026-04-16T19:01:30.233Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "denmark-pet-news", + "provider": "Danish Security and Intelligence Service - News", + "endpoint": "https://pet.dk/aktuelt/nyhedsliste", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "german-bfv-news", + "provider": "German BfV - Press", + "endpoint": "https://www.verfassungsschutz.de/EN/service/press/press_node.html", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nctv-english-rss", + "provider": "NCTV Netherlands - English RSS", + "endpoint": "https://english.nctv.nl/latest/news", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "belgian-federal-police-news", + "provider": "Belgian Federal Police - News", + "endpoint": "https://www.police.be/5998/en/node/10868", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T11:47:27.254Z", + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastCheckedAt": "2026-04-23T11:47:27.254Z" + }, + { + "id": "czech-police-news", + "provider": "Police of the Czech Republic - News", + "endpoint": "https://policie.gov.cz/clanek/Police-of-the-Czech-Republic.aspx", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "guardia-civil-news", + "provider": "El Pais English - Guardia Civil", + "endpoint": "https://english.elpais.com/news/guardia-civil/", + "kind": "html", + "lane": "incidents", + "region": "eu", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "switzerland-fedpol-news", + "provider": "Swiss fedpol - News", + "endpoint": "https://www.fedpol.admin.ch/en/newnsb", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browser. Type.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell ╔════════════════════════════════════════════════════════════╗ ║ Looks like Playwright was just installed or updated. ║ ║ Please run the following command to download new browsers: ║ ║ ║ ║ npx playwright install ║ ║ ║ ║ <3 Playwright Team ║ ╚════════════════════════════════════════════════════════════╝", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T21:59:30.032Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T21:59:30.032Z", + "lastFailureAt": "2026-04-22T21:59:30.032Z", + "lastCheckedAt": "2026-04-22T21:59:30.032Z" + }, + { + "id": "pet-dk-english", + "provider": "PET (Denmark) a English News", + "endpoint": "https://pet.dk/en/news-and-publications/news-list", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "nato-news-rss", + "provider": "NATO a News (RSS)", + "endpoint": "https://www.nato.int/en/news-and-events/articles/news", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "occrp-news", + "provider": "OCCRP a Organized Crime and Corruption Reporting Project", + "endpoint": "https://www.occrp.org/en/announcements", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rferl-security-news-rss", + "provider": "Radio Free Europe/Radio Liberty a Security (RSS)", + "endpoint": "https://www.rferl.org/latest-news", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T08:39:19.161Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "unodc-news", + "provider": "UNODC (UN Office on Drugs and Crime) a Press Releases", + "endpoint": "https://www.unodc.org/unodc/en/news/news.html", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gctf-news", + "provider": "Global Counterterrorism Forum (GCTF) a News", + "endpoint": "https://www.thegctf.org/News-Stories/PgrID/918/PageID/3", + "kind": "html", + "lane": "oversight", + "region": "international", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T04:05:33.139Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "barts-health-news", + "provider": "Barts Health NHS Trust a News", + "endpoint": "https://www.bartshealth.nhs.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T08:09:12.931Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T08:09:12.931Z", + "lastFailureAt": "2026-04-23T08:09:12.931Z", + "lastCheckedAt": "2026-04-23T08:09:12.931Z" + }, + { + "id": "bromley-council-news", + "provider": "Bromley Council a Newsroom", + "endpoint": "https://www.bromley.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "homerton-healthcare-news", + "provider": "Homerton Healthcare NHS Foundation Trust a News", + "endpoint": "https://www.homerton.nhs.uk/trust-news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "mayor-of-london-press-releases", + "provider": "Mayor of London a Press Releases", + "endpoint": "https://www.london.gov.uk/rss-feeds/80610", + "kind": "rss", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "nhs-london-sel-news", + "provider": "NHS South East London a News", + "endpoint": "https://www.selondonics.org/icb/about-us/news/", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "slam-news", + "provider": "South London and Maudsley NHS Foundation Trust a News", + "endpoint": "https://slam.nhs.uk/pressreleases", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "tower-hamlets-council-news", + "provider": "Tower Hamlets Council a News", + "endpoint": "https://www.towerhamlets.gov.uk/News_events/News.aspx", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "westminster-city-council-news", + "provider": "Westminster City Council a News", + "endpoint": "https://www.westminster.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "whittington-health-news", + "provider": "Whittington Health a News", + "endpoint": "https://www.whittington.nhs.uk/mini-apps/news/news. Items.asp", + "kind": "html", + "lane": "context", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 5, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "london-assembly-press-releases", + "provider": "London Assembly a Press Releases", + "endpoint": "https://www.london.gov.uk/rss-feeds/80611", + "kind": "rss", + "lane": "oversight", + "region": "london", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "gov-uk-defence-intelligence", + "provider": "UK Defence Intelligence a GOV.UK", + "endpoint": "https://www.gov.uk/government/groups/defence-intelligence", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "mi5-news-rss-direct", + "provider": "MI5 - News RSS", + "endpoint": "https://www.mi5.gov.uk/news", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "daily-politics", + "provider": "Daily Politics", + "endpoint": "https://www.dailypolitics.com/categories/r. RzjN-bU/", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T08:39:19.161Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "joint-committee-human-rights-html", + "provider": "Joint Committee on Human Rights", + "endpoint": "https://committees.parliament.uk/committee/93/human-rights-joint-committee/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T19:31:23.009Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T19:31:23.009Z", + "lastFailureAt": "2026-04-23T19:31:23.009Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "scottish-government-justice-news", + "provider": "Scottish Government - Justice and Safety", + "endpoint": "https://www.gov.scot/policies/community-safety/latest/", + "kind": "html", + "lane": "oversight", + "region": "uk", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "dni-press-releases", + "provider": "Office of the Director of National Intelligence - Press Releases", + "endpoint": "https://www.dni.gov/index.php/who-we-are/348-newsroom/press-releases", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "doj-nsd-press-releases", + "provider": "U.S. Department of Justice - National Security Division Press Releases", + "endpoint": "https://www.justice.gov/nsd/press-room", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Endpoint likely removed — all recent errors are HTTP 404", + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T06:30:13.977Z", + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "us-treasury-ofac-press-releases", + "provider": "U.S. Treasury (OFAC) - Press Releases", + "endpoint": "https://ofac.treasury.gov/press-releases", + "kind": "html", + "lane": "sanctions", + "region": "us", + "healthScore": 0, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T15:11:26.228Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-23T15:11:26.228Z", + "lastFailureAt": "2026-04-16T15:11:26.228Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z" + }, + { + "id": "bbc-news-england-legacy", + "provider": "BBC News a England (Legacy RSS)", + "endpoint": "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/england/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 6, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "channel-4-news", + "provider": "Channel 4 News", + "endpoint": "https://www.channel4.com/news/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 10, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 4, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T23:15:54.554Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T00:08:15.005Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T03:57:52.244Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "england-naturally", + "provider": "England, Naturally", + "endpoint": "https://englandnaturally.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 11, + "status": "auto-quarantined", + "reason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "quarantinedAt": "2026-04-23T03:28:47.210Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + }, + { + "id": "aljazeera-news-rss", + "provider": "Al Jazeera English a Top Stories (RSS)", + "endpoint": "https://www.aljazeera.com/xml/rss/all.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 12, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T17:16:47.386Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastCheckedAt": "2026-04-23T18:02:43.923Z" + }, + { + "id": "love-my-dress", + "provider": "Love My Dress", + "endpoint": "https://www.lovemydress.net/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 14, + "status": "auto-quarantined", + "reason": "Health score degraded to 14 after repeated failures", + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 520", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 520", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "rte-ireland-news-rss", + "provider": "RTE News - Ireland (RSS)", + "endpoint": "https://feeds.feedburner.com/ietopstories", + "kind": "rss", + "lane": "context", + "region": "europe", + "healthScore": 14, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "2026-04-27T08:39:19.161Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastCheckedAt": "2026-04-23T19:31:23.009Z" + }, + { + "id": "the-week-uk", + "provider": "The Week UK", + "endpoint": "https://www.theweek.co.uk/feeds/all", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 16, + "status": "auto-quarantined", + "reason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "consecutiveFailures": 3, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T08:39:19.161Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-29T14:59:55.048Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastCheckedAt": "2026-04-22T14:59:55.048Z" + }, + { + "id": "euiss-home", + "provider": "EU Institute for Security Studies", + "endpoint": "https://www.iss.europa.eu/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "icct-home", + "provider": "ICCT - Home", + "endpoint": "https://icct.nl/", + "kind": "html", + "lane": "context", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "breakingnews-ie", + "provider": "Breaking. News.ie", + "endpoint": "https://feeds.breakingnews.ie/bntopstories", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "independent-ie", + "provider": "Independent.ie", + "endpoint": "https://www.independent.ie/rss/", + "kind": "rss", + "lane": "context", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "eucrim-counter-terrorism-agenda", + "provider": "eucrim - Commission Counter Terrorism Agenda", + "endpoint": "https://eucrim.eu/news/commission-counter-terrorism-agenda/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "eucrim-judicial-counter-terrorism-register", + "provider": "eucrim - Judicial Counter Terrorism Register", + "endpoint": "https://eucrim.eu/news/judicial-counter-terrorism-register/", + "kind": "html", + "lane": "oversight", + "region": "eu", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "icct-perspectives-on-terrorism", + "provider": "Perspectives on Terrorism (ICCT) a Journal", + "endpoint": "https://pt.icct.nl/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "icct-publications", + "provider": "International Centre for Counter-Terrorism (ICCT) - Publications", + "endpoint": "https://icct.nl/publications", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "vox-pol-publications", + "provider": "VOX-Pol Network a Publications", + "endpoint": "https://www.voxpol.eu/publications/", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "isd-global", + "provider": "Institute for Strategic Dialogue (ISD) a Articles & Reports", + "endpoint": "https://www.isdglobal.org/", + "kind": "html", + "lane": "prevention", + "region": "europe", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bbc-news-world", + "provider": "BBC News a World", + "endpoint": "https://feeds.bbci.co.uk/news/world/rss.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bbc-news-world-legacy", + "provider": "BBC News a World (Legacy RSS)", + "endpoint": "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/world/rss.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "bellingcat", + "provider": "Bellingcat a Investigations", + "endpoint": "https://www.bellingcat.com/feed/", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "chathamhouse-events", + "provider": "Chatham House a Events (RSS)", + "endpoint": "https://www.chathamhouse.org/path/events.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "chathamhouse-news-releases", + "provider": "Chatham House a News Releases (RSS)", + "endpoint": "https://www.chathamhouse.org/path/news-releases.xml", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "global-initiative-news", + "provider": "Global Initiative Against Transnational Organized Crime a News", + "endpoint": "https://globalinitiative.net/news/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "tech-against-terrorism-podcast", + "provider": "Tech Against Terrorism - Podcast", + "endpoint": "https://podcast.techagainstterrorism.org/", + "kind": "html", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "war-on-the-rocks", + "provider": "War on the Rocks a National Security & CT Analysis", + "endpoint": "https://warontherocks.com/feed/", + "kind": "rss", + "lane": "context", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "tech-against-terrorism", + "provider": "Tech Against Terrorism a Blog", + "endpoint": "https://techagainstterrorism.org/", + "kind": "html", + "lane": "prevention", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "tech-against-terrorism-home", + "provider": "Tech Against Terrorism - Home", + "endpoint": "https://techagainstterrorism.org/home", + "kind": "html", + "lane": "prevention", + "region": "international", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "hope-not-hate-home", + "provider": "Hope not hate podcast", + "endpoint": "https://feeds.buzzsprout.com/170425.rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "rusi-publications", + "provider": "RUSI (Royal United Services Institute) a Publications", + "endpoint": "https://www.rusi.org/publications", + "kind": "html", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "birmingham-mail", + "provider": "Birmingham Mail", + "endpoint": "https://www.birminghammail.co.uk/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "breaking-news-today", + "provider": "Breaking News Today", + "endpoint": "https://www.breakingnewstoday.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "consett-magazine", + "provider": "Consett Magazine", + "endpoint": "https://consettmagazine.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "daily-echo", + "provider": "Daily Echo", + "endpoint": "https://www.dailyecho.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "daily-express", + "provider": "Daily Express", + "endpoint": "https://feeds.feedburner.com/daily-express-news-showbiz", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "daily-mirror", + "provider": "Daily Mirror", + "endpoint": "https://www.mirror.co.uk/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "glasgow-times", + "provider": "Glasgow Times", + "endpoint": "https://www.glasgowtimes.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "grimsby-telegraph", + "provider": "Grimsby Telegraph", + "endpoint": "https://www.grimsbytelegraph.co.uk/news/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "herald-scotland-news", + "provider": "Herald Scotland - News", + "endpoint": "https://www.heraldscotland.com/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "huffpost-uk", + "provider": "Huff. Post UK", + "endpoint": "https://www.huffingtonpost.co.uk/feeds/index.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "larne-times", + "provider": "Larne Times", + "endpoint": "https://www.larnetimes.co.uk/news/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "manchester-evening-news", + "provider": "Manchester Evening News", + "endpoint": "https://www.manchestereveningnews.co.uk/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "news-uk", + "provider": "News UK", + "endpoint": "https://www.news.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "politics-co-uk", + "provider": "Politics.co.uk", + "endpoint": "https://www.politics.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "positive-news", + "provider": "Positive News", + "endpoint": "https://www.positive.news/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "scottish-field", + "provider": "Scottish Field", + "endpoint": "https://www.scottishfield.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-argus-news", + "provider": "The Argus", + "endpoint": "https://www.theargus.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-bolton-news", + "provider": "The Bolton News - News", + "endpoint": "https://www.theboltonnews.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "daily-record", + "provider": "Daily Record", + "endpoint": "https://www.dailyrecord.co.uk/news/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "northern-echo-news", + "provider": "The Northern Echo - News", + "endpoint": "https://www.thenorthernecho.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-poke", + "provider": "The Poke", + "endpoint": "https://www.thepoke.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "scarborough-news", + "provider": "The Scarborough News", + "endpoint": "https://www.thescarboroughnews.co.uk/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-scotsman-news", + "provider": "The Scotsman - News", + "endpoint": "https://www.scotsman.com/news/rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-york-press-news", + "provider": "The York Press - News", + "endpoint": "https://www.yorkpress.co.uk/news/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "wales-online", + "provider": "Wales. Online", + "endpoint": "https://www.walesonline.co.uk/?service=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "a-luxury-travel-blog", + "provider": "A Luxury Travel Blog", + "endpoint": "https://www.aluxurytravelblog.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "age-uk-discover", + "provider": "Age UK", + "endpoint": "https://www.ageuk.org.uk/discover/rss/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "alan-malcher", + "provider": "Alan Malcher", + "endpoint": "https://alanmalcher.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "britishbeautyblogger", + "provider": "British Beauty Blogger", + "endpoint": "https://britishbeautyblogger.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "buy-firewood-direct", + "provider": "Buy Firewood Direct", + "endpoint": "https://www.buyfirewooddirect.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "carly-rowena", + "provider": "Carly Rowena", + "endpoint": "https://feeds.feedburner.com/Carly. Rowena. Official", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "cherished-holiday-homes", + "provider": "Cherished Holiday Homes", + "endpoint": "https://cherishedholidayhomes.co.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "chique-home-living", + "provider": "Chique Home Living", + "endpoint": "https://chiquehomeliving.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "clubwise-blog", + "provider": "Club. Wise Blog", + "endpoint": "https://www.clubwise.com/clubwise-blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "disneyrollergirl", + "provider": "Disneyrollergirl", + "endpoint": "https://www.disneyrollergirl.net/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "fresh-design-blog", + "provider": "Fresh Design Blog", + "endpoint": "https://feeds2.feedburner.com/Fresh. Design. Blog", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "jollydeck", + "provider": "Jolly. Deck", + "endpoint": "https://www.jollydeck.com/resources/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "lifestylelinked", + "provider": "Life. Style. Linked", + "endpoint": "https://lifestylelinked.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "london-review-of-books", + "provider": "London Review of Books", + "endpoint": "https://www.lrb.co.uk/blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "marie-claire-uk", + "provider": "Marie Claire UK", + "endpoint": "https://www.marieclaire.co.uk/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "office-breaks", + "provider": "Office Breaks", + "endpoint": "https://office-breaks.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "on-the-think-of", + "provider": "On The Think Of", + "endpoint": "https://onthethinkof.home.blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "rocknroll-bride", + "provider": "Rock n Roll Bride", + "endpoint": "https://www.rocknrollbride.com/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "silverspoon-london", + "provider": "Silver. Spoon London", + "endpoint": "https://www.silverspoonlondon.co.uk/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "hnd-assignment-help-uk-medium", + "provider": "Stories by HND Assignment Help UK", + "endpoint": "https://medium.com/feed/@hndassigenmenthelp", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "tenura", + "provider": "Tenura", + "endpoint": "https://www.tenura.co.uk/rss.xml", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-curry-guy", + "provider": "The Curry Guy", + "endpoint": "https://greatcurryrecipes.net/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "real-talk-uk", + "provider": "The Real Talk UK", + "endpoint": "https://charleyjai-realtalk.blogspot.com/feeds/posts/default?alt=rss", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "the-stratfordian", + "provider": "The Stratfordian", + "endpoint": "https://thestratfordian.co.uk/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "training-express", + "provider": "Training Express", + "endpoint": "https://www.trainingexpress.org.uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "uk-constitutional-law-association", + "provider": "UK Constitutional Law Association", + "endpoint": "https://ukconstitutionallaw.org/blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "uk-fundraising-blog", + "provider": "UK Fundraising", + "endpoint": "https://fundraising.co.uk/category/blog/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "uk-human-rights-blog", + "provider": "UK Human Rights Blog", + "endpoint": "https://ukhumanrightsblog.com/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "vershd", + "provider": "Vershd", + "endpoint": "https://vershd.io/feed", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "vuelio-uk", + "provider": "Vuelio", + "endpoint": "https://www.vuelio.com/uk/feed/", + "kind": "rss", + "lane": "context", + "region": "uk", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "ctc-sentinel", + "provider": "Combating Terrorism Center at West Point - CTC Sentinel", + "endpoint": "https://ctc.westpoint.edu/ctc-sentinel/", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "gw-program-extremism", + "provider": "George Washington University - Program on Extremism", + "endpoint": "https://extremism.gwu.edu/news", + "kind": "html", + "lane": "context", + "region": "us", + "healthScore": 20, + "status": "auto-quarantined", + "reason": "Low health score – needs review", + "quarantinedAt": "", + "lastErrorCategory": "", + "lastErrorMessage": "", + "consecutiveFailures": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [], + "replacementSuggestion": "", + "reviewBy": "", + "lastFailureAt": "", + "lastCheckedAt": "2026-04-23T16:07:40.227Z" + }, + { + "id": "euronews-europe", + "provider": "Euronews a Europe", + "endpoint": "https://www.euronews.com/news/europe", + "kind": "html", + "lane": "context", + "region": "europe", + "healthScore": 24, + "status": "auto-quarantined", + "reason": "Health score degraded to 24 after repeated failures", + "quarantinedAt": "2026-04-23T03:28:47.210Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 406", + "consecutiveFailures": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 406", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "replacementSuggestion": "", + "reviewBy": "2026-04-30T03:28:47.210Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastCheckedAt": "2026-04-23T03:28:47.210Z" + } + ] } diff --git a/data/source-remediation-sweep.json b/data/source-remediation-sweep.json index e90f7520..e09ef279 100644 --- a/data/source-remediation-sweep.json +++ b/data/source-remediation-sweep.json @@ -1,6 +1,6 @@ { "generatedFrom": "live-alerts.json", - "generatedAt": "2026-04-23T21:24:51.187Z", + "generatedAt": "2026-04-23T20:38:15.853Z", "totalSourceErrors": 0, "byCategory": {}, "byKind": {}, diff --git a/data/top-20-source-remediation.json b/data/top-20-source-remediation.json index ae9bf16e..24c37799 100644 --- a/data/top-20-source-remediation.json +++ b/data/top-20-source-remediation.json @@ -1,6 +1,6 @@ { "generatedFrom": "live-alerts.json", - "generatedAt": "2026-04-23T21:24:51.187Z", + "generatedAt": "2026-04-23T20:38:15.853Z", "totalSourceErrors": 0, "top20": [] } diff --git a/live-alerts.json b/live-alerts.json index 22609d83..db26f9f5 100644 --- a/live-alerts.json +++ b/live-alerts.json @@ -1,7 +1,7 @@ { - "generatedAt": "2026-04-23T21:24:51.187Z", - "sourceCount": 4, - "alertCount": 181, + "generatedAt": "2026-04-23T20:38:15.853Z", + "sourceCount": 175, + "alertCount": 179, "alerts": [ { "id": "met-police-latest-news-0", @@ -10226,56 +10226,6 @@ "corroborationCount": 1, "isDuplicateOf": "fusion-f289bcaeba8fd554" }, - { - "id": "fixture-atom-oversight-0", - "fusedIncidentId": "fusion-b4a9eb5890206d91", - "title": "Oversight Committee Schedules Counter-Terror Review Hearing", - "location": "Europe", - "region": "europe", - "lane": "oversight", - "severity": "moderate", - "status": "Update", - "actor": "Fixture Oversight Feed", - "subject": "Fixture Oversight Feed", - "happenedWhen": "04 Apr 2026, 11:10", - "confidence": "Verified official source update", - "confidenceScore": 0.84, - "summary": "Parliamentary committee confirms an oversight hearing on prevention strategy.", - "aiSummary": "Fixture Oversight Feed has published an oversight or review update. This is useful for legal, custody, supervision, or institutional risk context rather than immediate public warning.", - "sourceExtract": "Parliamentary committee confirms an oversight hearing on prevention strategy.", - "peopleInvolved": [], - "source": "Fixture Oversight Feed", - "sourceUrl": "https://fixtures.albertalert.local/oversight/1", - "sourceTier": "context", - "reliabilityProfile": "official_context", - "incidentTrack": "", - "laneReason": "Oversight, legislation, or review signal relevant to counter-terror posture.", - "queueReason": "Oversight, legislation, or review signal relevant to counter-terror posture.", - "queueBucket": "oversight", - "time": "04 Apr 2026, 11:10", - "lat": 50, - "lng": 10, - "major": false, - "publishedAt": "2026-04-04T10:10:00.000Z", - "keywordHits": [ - "terror" - ], - "terrorismHits": [ - "terror", - "counter-terror" - ], - "eventType": "oversight_update", - "geoPrecision": "country", - "isOfficial": true, - "priorityScore": -5.8, - "freshnessBucket": 0, - "freshUntil": "2026-04-12T10:10:00.000Z", - "needsHumanReview": false, - "isTerrorRelevant": true, - "corroboratingSources": [], - "corroborationCount": 0, - "isDuplicateOf": null - }, { "id": "uk-ncsc-news-4", "fusedIncidentId": "fusion-a4c8d412564d7890", @@ -10557,51 +10507,6 @@ ], "corroborationCount": 1, "isDuplicateOf": "fusion-a705408939c4c725" - }, - { - "id": "fixture-json-prevention-0", - "fusedIncidentId": "fusion-f5cb7bfa16235fcf", - "title": "Community Prevention Workshop Expanded Across Regions", - "location": "Europe", - "region": "international", - "lane": "prevention", - "severity": "moderate", - "status": "Update", - "actor": "Fixture Prevention Feed", - "subject": "Fixture Prevention Feed", - "happenedWhen": "04 Apr 2026, 10:30", - "confidence": "Research or analytical source", - "confidenceScore": 0.68, - "summary": "Prevention specialists announced a new training cycle focused on reporting suspicious behavior.", - "aiSummary": "Fixture Prevention Feed has published a prevention or radicalisation update. The value is horizon scanning, theme detection, and context for later operational or analytical work.", - "sourceExtract": "Prevention specialists announced a new training cycle focused on reporting suspicious behavior.", - "peopleInvolved": [], - "source": "Fixture Prevention Feed", - "sourceUrl": "https://fixtures.albertalert.local/prevention/1", - "sourceTier": "research", - "reliabilityProfile": "specialist_research", - "incidentTrack": "", - "laneReason": "Prevention, radicalisation, or analytical context source.", - "queueReason": "Prevention, radicalisation, or analytical context source.", - "queueBucket": "prevention", - "time": "04 Apr 2026, 10:30", - "lat": 50, - "lng": 10, - "major": false, - "publishedAt": "2026-04-04T09:30:00.000Z", - "keywordHits": [], - "terrorismHits": [], - "eventType": "prevention_update", - "geoPrecision": "country", - "isOfficial": false, - "priorityScore": -8.3, - "freshnessBucket": 0, - "freshUntil": "2026-04-12T09:30:00.000Z", - "needsHumanReview": false, - "isTerrorRelevant": true, - "corroboratingSources": [], - "corroborationCount": 0, - "isDuplicateOf": null } ], "sourceErrors": [], @@ -12448,44 +12353,85 @@ "lng": 133.7751 } ], - "buildWarning": null, + "buildWarning": "Deferred 372 low-yield source(s) on health cooldown.", "runMetrics": { "schedulerMode": "candidate", "htmlBudget": 40, "htmlDomainCapPerRun": 3, - "htmlDomainUsage": {}, + "htmlDomainUsage": { + "news.met.police.uk": 3, + "www.avonandsomerset.police.uk": 2, + "www.scotland.police.uk": 1, + "www.psni.police.uk": 1, + "www.westyorkshirepolice.co.uk": 1, + "policie.gov.cz": 1, + "www.politie.nl": 2, + "mossos.gencat.cat": 1, + "www.policia.es": 1, + "www.policiajudiciaria.pt": 1, + "www.gov.uk": 3, + "www.wmnow.co.uk": 1, + "www.wypcommunityalert.co.uk": 1, + "euaa.europa.eu": 1, + "www.bmi.gv.at": 1, + "commission.europa.eu": 1, + "www.justice.gouv.fr": 1, + "www.brent.gov.uk": 1, + "www.kch.nhs.uk": 1, + "www.kingston.gov.uk": 1, + "www.nwlondonicb.nhs.uk": 1, + "news.npcc.police.uk": 1, + "www.stayintheknow.co.uk": 1, + "www.state.gov": 1, + "www.consilium.europa.eu": 1, + "www.europarl.europa.eu": 1, + "www.sakerhetspolisen.se": 1, + "www.interpol.int": 1, + "www.un.org": 1, + "www.guysandstthomas.nhs.uk": 1, + "love.lambeth.gov.uk": 1, + "www.sutton.gov.uk": 1, + "www.swlstg.nhs.uk": 1, + "www.towerhamlets.gov.uk": 1 + }, "coverage": { - "eligible": 4, - "scheduled": 4, - "initialScheduled": 1, - "continuationAttempted": 3, - "checked": 4, - "eligibleCheckedRate": 1, + "eligible": 547, + "scheduled": 175, + "initialScheduled": 87, + "continuationAttempted": 88, + "checked": 175, + "eligibleCheckedRate": 0.32, "scheduledCheckedRate": 1 }, "freshnessSlaByTier": { "high": { - "count": 1, - "avgMinutes": 0, - "p95Minutes": 0 + "count": 7, + "avgMinutes": 4663, + "p95Minutes": 10301 + }, + "low": { + "count": 12, + "avgMinutes": 6150, + "p95Minutes": 9028 }, "medium": { - "count": 1, - "avgMinutes": 0, - "p95Minutes": 0 + "count": 20, + "avgMinutes": 4391, + "p95Minutes": 10301 } }, "failureReasons": { - "success": 2 + "unchanged": 5, + "success": 7 }, "sourceRunStats": { - "totalConfiguredSources": 4, - "sourcesCheckedThisRun": 4, - "sourcesUpdatedThisRun": 2, + "totalConfiguredSources": 549, + "sourcesCheckedThisRun": 175, + "sourcesUpdatedThisRun": 7, "sourcesFailedThisRun": 0, - "sourcesUnchangedThisRun": 0 + "sourcesUnchangedThisRun": 5 }, - "runDurationMs": 265, + "runDurationMs": 275800, "playwrightFallback": { "attempts": 0, "successes": 0, @@ -12495,19 +12441,19 @@ "guardrails": { "maxRuntimeMs": 720000, "maxFailedSourceRate": 0.65, - "minSuccessfulSources": 1, - "targetSuccessfulSourcesPerRun": 1, + "minSuccessfulSources": 8, + "targetSuccessfulSourcesPerRun": 60, "failedSourceRate": 0, - "successfulSources": 2, + "successfulSources": 8, "violations": [], "midRun": { "throttleLevel": 0, - "totalAttempted": 4, + "totalAttempted": 175, "totalFailed": 0, - "totalSuccessful": 2, + "totalSuccessful": 8, "failedRate": 0, - "successRate": 0.5, - "avgSourceDurationMs": 61, + "successRate": 0.046, + "avgSourceDurationMs": 1576, "criticalOnly": false, "skipPlaywright": false, "transitions": [] @@ -12517,60 +12463,242 @@ "health": { "expectedRefreshMinutes": 30, "staleAfterMinutes": 50, - "lastAttemptedRefreshTime": "2026-04-23T21:24:51.187Z", + "lastAttemptedRefreshTime": "2026-04-23T20:38:15.853Z", "usedFallback": false, - "lastSuccessfulRefreshTime": "2026-04-23T21:24:51.187Z", - "lastSuccessfulRunId": "24859549418", - "lastSuccessfulRunNumber": "362", + "lastSuccessfulRefreshTime": "2026-04-23T20:38:15.853Z", + "lastSuccessfulRunId": "24857422376", + "lastSuccessfulRunNumber": "504", "lastSuccessfulRunAttempt": "1", - "lastSuccessfulHeadSha": "c070984e45f40850e39dcaf2906d8a763abf7d4e", - "lastSuccessfulEvent": "dynamic", - "lastSuccessfulSourceCount": 4, + "lastSuccessfulHeadSha": "8378fae9f01ff927a276f577cda486e5d90cf3d2", + "lastSuccessfulEvent": "schedule", + "lastSuccessfulSourceCount": 175, "sourceErrorCount": 0, - "hasWarnings": false, - "autoDeferredSourceCount": 0, - "autoDeferredSources": [], + "hasWarnings": true, + "autoDeferredSourceCount": 372, + "autoDeferredSources": [ + { + "id": "frontex-news-releases", + "provider": "Frontex a News Releases", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "bdk-rss", + "provider": "Bund Deutscher Kriminalbeamter - RSS", + "reason": "health-deprioritised", + "until": "2026-04-25T14:03:06.243Z", + "statusKind": "cooled_down" + }, + { + "id": "belgium-crisis-centre-news", + "provider": "Belgian National Crisis Centre - Newsroom", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "denmark-pet-news", + "provider": "Danish Security and Intelligence Service - News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "ecfr-feeds-index", + "provider": "ECFR - Feeds", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "enisa-news", + "provider": "ENISA (EU Cybersecurity Agency) a News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "enisa-rss-transition-page", + "provider": "ENISA - RSS Feeds Transition Notice", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "euiss-home", + "provider": "EU Institute for Security Studies", + "reason": "health-deprioritised", + "until": "2026-04-24T04:07:40.227Z", + "statusKind": "cooled_down" + }, + { + "id": "euractiv-security-rss", + "provider": "BBC News - Europe", + "reason": "health-deprioritised", + "until": "2026-04-25T14:03:06.243Z", + "statusKind": "cooled_down" + }, + { + "id": "eurojust-press-news-html", + "provider": "Eurojust - Press Releases and News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "eurojust-press-releases", + "provider": "Eurojust - Press Releases", + "reason": "health-deprioritised", + "until": "2026-04-25T18:02:43.923Z", + "statusKind": "cooled_down" + }, + { + "id": "europol-media-press", + "provider": "Europol a Media and Press", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "europol-newsroom-html", + "provider": "Europol - Newsroom", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "finland-supo-news", + "provider": "Finnish Security Intelligence Service - News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "german-bfv-news", + "provider": "German BfV - Press", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "german-interior-ministry-press", + "provider": "German Federal Ministry for Economic Cooperation and Development - Feed", + "reason": "health-deprioritised", + "until": "2026-04-25T10:13:21.253Z", + "statusKind": "cooled_down" + }, + { + "id": "icct-home", + "provider": "ICCT - Home", + "reason": "health-deprioritised", + "until": "2026-04-24T04:07:40.227Z", + "statusKind": "cooled_down" + }, + { + "id": "nctv-english-rss", + "provider": "NCTV Netherlands - English RSS", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "paris-prefecture-police-rss-page", + "provider": "Paris Prefecture of Police - RSS", + "reason": "health-deprioritised", + "until": "2026-04-25T10:13:21.253Z", + "statusKind": "cooled_down" + }, + { + "id": "spain-interior-ministry-news", + "provider": "Spanish Ministry of the Interior - Press", + "reason": "health-deprioritised", + "until": "2026-04-25T10:13:21.253Z", + "statusKind": "cooled_down" + }, + { + "id": "statewatch-news", + "provider": "Statewatch - News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + }, + { + "id": "breakingnews-ie", + "provider": "BreakingNews.ie", + "reason": "health-deprioritised", + "until": "2026-04-24T04:07:40.227Z", + "statusKind": "cooled_down" + }, + { + "id": "independent-ie", + "provider": "Independent.ie", + "reason": "health-deprioritised", + "until": "2026-04-24T04:07:40.227Z", + "statusKind": "cooled_down" + }, + { + "id": "belgian-federal-police-news", + "provider": "Belgian Federal Police - News", + "reason": "health-deprioritised", + "until": "2026-04-25T11:47:27.254Z", + "statusKind": "cooled_down" + }, + { + "id": "ertzaintza-news", + "provider": "Ertzaintza - News", + "reason": "health-deprioritised", + "until": "2026-04-24T14:59:55.048Z", + "statusKind": "cooled_down" + } + ], "operationalDeferredSourceCount": 0, "operationalDeferredSources": [], "sourceRunStats": { - "totalConfiguredSources": 4, - "sourcesCheckedThisRun": 4, - "sourcesUpdatedThisRun": 2, + "totalConfiguredSources": 549, + "sourcesCheckedThisRun": 175, + "sourcesUpdatedThisRun": 7, "sourcesFailedThisRun": 0, - "sourcesUnchangedThisRun": 0 + "sourcesUnchangedThisRun": 5 }, "extraMetrics": { "schedulerMode": "candidate", "coverage": { - "eligible": 4, - "scheduled": 4, - "initialScheduled": 1, - "continuationAttempted": 3, - "checked": 4, - "eligibleCheckedRate": 1, + "eligible": 547, + "scheduled": 175, + "initialScheduled": 87, + "continuationAttempted": 88, + "checked": 175, + "eligibleCheckedRate": 0.32, "scheduledCheckedRate": 1 }, "freshnessSlaByTier": { "high": { - "count": 1, - "avgMinutes": 0, - "p95Minutes": 0 + "count": 7, + "avgMinutes": 4663, + "p95Minutes": 10301 + }, + "low": { + "count": 12, + "avgMinutes": 6150, + "p95Minutes": 9028 }, "medium": { - "count": 1, - "avgMinutes": 0, - "p95Minutes": 0 + "count": 20, + "avgMinutes": 4391, + "p95Minutes": 10301 } }, "failureReasons": { - "success": 2 + "unchanged": 5, + "success": 7 }, "sourceRunStats": { - "totalConfiguredSources": 4, - "sourcesCheckedThisRun": 4, - "sourcesUpdatedThisRun": 2, + "totalConfiguredSources": 549, + "sourcesCheckedThisRun": 175, + "sourcesUpdatedThisRun": 7, "sourcesFailedThisRun": 0, - "sourcesUnchangedThisRun": 0 + "sourcesUnchangedThisRun": 5 }, "playwrightFallback": { "attempts": 0, @@ -12579,125 +12707,22265 @@ "guardrailViolations": [], "midRunGuardrail": { "throttleLevel": 0, - "totalAttempted": 4, + "totalAttempted": 175, "totalFailed": 0, - "totalSuccessful": 2, + "totalSuccessful": 8, "failedRate": 0, - "successRate": 0.5, - "avgSourceDurationMs": 61, + "successRate": 0.046, + "avgSourceDurationMs": 1576, "criticalOnly": false, "skipPlaywright": false, "transitions": [] } }, "sourceHealth": { - "fixture-rss-incidents": { - "provider": "Fixture Incidents Feed", - "lane": "incidents", - "kind": "rss", - "lastCheckedAt": "2026-04-23T21:24:51.187Z", + "euaa-news": { + "provider": "EUAA (EU Agency for Asylum) - Press Releases", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", "lastBuiltCount": 0, "successfulRuns": 0, - "emptyRuns": 1, + "emptyRuns": 75, "failedRuns": 0, "consecutiveFailures": 0, - "consecutiveEmptyRuns": 1, + "consecutiveEmptyRuns": 75, "consecutiveBlockedFailures": 0, "consecutiveDeadUrlFailures": 0, "lastSuccessfulAt": null, "lastFailureAt": null, - "lastEmptyAt": "2026-04-23T21:24:51.187Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", "lastErrorCategory": null, "lastErrorMessage": null, "recentErrors": [], "cooldownUntil": null, "autoSkipReason": null, - "healthScore": 77, - "quarantined": false, + "healthScore": 0, + "quarantined": true, "quarantinedAt": null, - "quarantineReason": null, - "nextFetchAt": "2026-04-23T22:21:51.187Z" + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" }, - "fixture-rss-context": { - "provider": "Fixture Context Feed", - "lane": "context", + "eulisa-news-events": { + "provider": "eu-LISA - News and Events (RSS)", + "lane": "border", "kind": "rss", - "lastCheckedAt": "2026-04-23T21:24:51.187Z", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", "lastBuiltCount": 0, "successfulRuns": 0, - "emptyRuns": 1, + "emptyRuns": 75, "failedRuns": 0, "consecutiveFailures": 0, - "consecutiveEmptyRuns": 1, + "consecutiveEmptyRuns": 75, "consecutiveBlockedFailures": 0, "consecutiveDeadUrlFailures": 0, "lastSuccessfulAt": null, "lastFailureAt": null, - "lastEmptyAt": "2026-04-23T21:24:51.187Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", "lastErrorCategory": null, "lastErrorMessage": null, "recentErrors": [], "cooldownUntil": null, "autoSkipReason": null, - "healthScore": 77, - "quarantined": false, + "healthScore": 0, + "quarantined": true, "quarantinedAt": null, - "quarantineReason": null, - "nextFetchAt": "2026-04-24T00:01:51.187Z" + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" }, - "fixture-atom-oversight": { - "provider": "Fixture Oversight Feed", - "lane": "oversight", - "kind": "atom", - "lastCheckedAt": "2026-04-23T21:24:51.187Z", - "lastBuiltCount": 1, - "successfulRuns": 1, + "frontex-news-releases": { + "provider": "Frontex a News Releases", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "austria-interior-ministry-news": { + "provider": "Austrian Interior Ministry - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, "failedRuns": 0, "consecutiveFailures": 0, - "consecutiveEmptyRuns": 0, + "consecutiveEmptyRuns": 75, "consecutiveBlockedFailures": 0, "consecutiveDeadUrlFailures": 0, - "lastSuccessfulAt": "2026-04-23T21:24:51.187Z", + "lastSuccessfulAt": null, "lastFailureAt": null, - "lastEmptyAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", "lastErrorCategory": null, "lastErrorMessage": null, "recentErrors": [], "cooldownUntil": null, "autoSkipReason": null, - "healthScore": 90, - "quarantined": false, + "healthScore": 0, + "quarantined": true, "quarantinedAt": null, - "quarantineReason": null, - "nextFetchAt": "2026-04-23T22:02:51.187Z" + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" }, - "fixture-json-prevention": { - "provider": "Fixture Prevention Feed", - "lane": "prevention", - "kind": "json", - "lastCheckedAt": "2026-04-23T21:24:51.187Z", - "lastBuiltCount": 1, - "successfulRuns": 1, - "emptyRuns": 0, + "austria-interior-ministry-rss-index": { + "provider": "Austrian Interior Ministry - RSS Index", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, "failedRuns": 0, "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "bdk-rss": { + "provider": "Bund Deutscher Kriminalbeamter - RSS", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "belgium-crisis-centre-news": { + "provider": "Belgian National Crisis Centre - Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "quarantineReason": "Health score degraded to 5 after repeated failures", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "denmark-pet-news": { + "provider": "Danish Security and Intelligence Service - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ecfr-feeds-index": { + "provider": "ECFR - Feeds", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "enisa-news": { + "provider": "ENISA (EU Cybersecurity Agency) a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "enisa-rss-transition-page": { + "provider": "ENISA - RSS Feeds Transition Notice", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "euiss-home": { + "provider": "EU Institute for Security Studies", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, "consecutiveBlockedFailures": 0, "consecutiveDeadUrlFailures": 0, - "lastSuccessfulAt": "2026-04-23T21:24:51.187Z", + "lastSuccessfulAt": null, "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "euractiv-security-rss": { + "provider": "BBC News - Europe", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eurojust-press-news-html": { + "provider": "Eurojust - Press Releases and News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eurojust-press-releases": { + "provider": "Eurojust - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 72, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "europol-media-press": { + "provider": "Europol a Media and Press", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "europol-news-rss": { + "provider": "Europol - Newsroom (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", "lastErrorCategory": null, "lastErrorMessage": null, "recentErrors": [], "cooldownUntil": null, "autoSkipReason": null, - "healthScore": 90, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "europol-newsroom-html": { + "provider": "Europol - Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "finland-supo-news": { + "provider": "Finnish Security Intelligence Service - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "german-bfv-news": { + "provider": "German BfV - Press", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "german-interior-ministry-press": { + "provider": "German Federal Ministry for Economic Cooperation and Development - Feed", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 400", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Health score degraded to 20 after repeated failures", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "icct-home": { + "provider": "ICCT - Home", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "nctv-english-rss": { + "provider": "NCTV Netherlands - English RSS", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "paris-prefecture-police-rss-page": { + "provider": "Paris Prefecture of Police - RSS", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "spain-interior-ministry-news": { + "provider": "Spanish Ministry of the Interior - Press", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "statewatch-news": { + "provider": "Statewatch - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "breakingnews-ie": { + "provider": "BreakingNews.ie", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "independent-ie": { + "provider": "Independent.ie", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "belgian-federal-police-news": { + "provider": "Belgian Federal Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T11:47:27.254Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 11, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastEmptyAt": "2026-04-23T10:13:21.253Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "cooldownUntil": "2026-04-25T11:47:27.254Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-25T11:47:27.254Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "czech-police-news": { + "provider": "Police of the Czech Republic - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "dutch-police-rss-index": { + "provider": "Politie.nl - RSS", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "ertzaintza-news": { + "provider": "Ertzaintza - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "finland-police-news": { + "provider": "Finnish Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "german-bka-press": { + "provider": "German BKA - Press Releases (2026 archive)", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "quarantineReason": "Health score degraded to 5 after repeated failures", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "german-bka-press-releases-de": { + "provider": "BKA Germany - Press Releases", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T17:39:27.641Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 15, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastEmptyAt": "2026-04-22T16:17:11.443Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T07:32:24.475Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "cooldownUntil": "2026-04-24T17:39:27.641Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T08:04:04.612Z", + "quarantineReason": "Infrastructure instability — mixed timeout and network errors; auto-retry likely to recover", + "nextFetchAt": "2026-04-24T17:39:27.641Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "guardia-civil-news": { + "provider": "El Pais English - Guardia Civil", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "not-found-404", + "lastErrorMessage": "HTTP 404", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "mossos-news": { + "provider": "Mossos d'Esquadra - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "paris-prefecture-police-press-releases": { + "provider": "Paris Prefecture of Police - Press Releases", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "policia-nacional-news": { + "provider": "Policia Nacional - Press", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T18:05:04.781Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-17T20:09:53.653Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-19T18:05:04.781Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T20:09:53.653Z", + "quarantineReason": "Health score degraded to 5 after repeated failures", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "romanian-police-news": { + "provider": "Romanian Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "curia-press-rss-en": { + "provider": "Court of Justice of the European Union - RSS (EN/FR)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 65, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eppo-news-node-7": { + "provider": "European Public Prosecutor's Office - News (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 70, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 70, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-cellar-rss-atom": { + "provider": "Publications Office of the European Union (CELLAR) a RSS/Atom Feeds", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 13, + "emptyRuns": 61, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eu-commission-counter-terrorism-measures-2026": { + "provider": "European Commission - Counter Terrorism Measures 2026", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-commission-home-affairs-topic": { + "provider": "European Commission - Home Affairs", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-commission-presscorner-home": { + "provider": "Council of the EU - Press Releases (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eu-council-fight-against-terrorism": { + "provider": "Council of the EU - Fight Against Terrorism", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eu-council-jha-meetings": { + "provider": "Council of the EU - JHA Press Releases", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 72, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eu-council-jha-register-rss": { + "provider": "Council of the EU - Latest Documents RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-council-press-releases": { + "provider": "Council of the European Union a Press Releases (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-council-press-releases-html": { + "provider": "Council of the EU - Press Releases", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 70, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 70, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-council-rss-index": { + "provider": "Council of the EU - RSS Index", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eu-ct-coordinator": { + "provider": "EU Counter-Terrorism Coordinator a Council of the EU", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eu-ejustice-news-rss": { + "provider": "European e-Justice - News RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 52, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 29, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-18T13:27:18.679Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-18T13:27:18.679Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-eppo-news": { + "provider": "European Public Prosecutor's Office - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-fra-rss": { + "provider": "EU Agency for Fundamental Rights (FRA) a RSS", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T11:46:02.615Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eu-home-affairs-news": { + "provider": "European Commission a Home Affairs News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-olaf-news": { + "provider": "OLAF (EU Anti-Fraud Office) a News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eu-security-union-strategy": { + "provider": "European Commission a Security Union Strategy", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eucrim-counter-terrorism-agenda": { + "provider": "eucrim - Commission Counter Terrorism Agenda", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eucrim-judicial-counter-terrorism-register": { + "provider": "eucrim - Judicial Counter Terrorism Register", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eurojust-publications": { + "provider": "Eurojust a Publications (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 1, + "successfulRuns": 99, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:38:15.853Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "eurojust-rss-feeds-page": { + "provider": "Eurojust - RSS Feeds", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "europarl-committee-libe": { + "provider": "European Parliament - LIBE Press Releases", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 70, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 70, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "europarl-committee-sede": { + "provider": "European Parliament - SEDE Press Releases", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "europarl-pressreleases-committees": { + "provider": "European Parliament a Press Releases (Committees) (RSS)", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "europol-tesat-report": { + "provider": "Europol - TESAT Report", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "fra-rss": { + "provider": "Human Rights Watch - News RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "europol-eu-iru": { + "provider": "Europol a EU Internet Referral Unit (EU IRU)", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "isd-global-publications": { + "provider": "ISD - Publications", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ncsc-nl-rss": { + "provider": "NCSC Netherlands - RSS", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "eu-council-terrorism-sanctions": { + "provider": "Council of the EU - Sanctions Against Terrorism", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "unhcr-europe-news": { + "provider": "UNHCR Europe a News", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "clingendael-publications": { + "provider": "Clingendael Institute a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "dw-europe-rss": { + "provider": "Deutsche Welle a Europe (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ecfr-publications": { + "provider": "European Council on Foreign Relations (ECFR) a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "euronews-europe": { + "provider": "Euronews a Europe", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 28, + "emptyRuns": 21, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-22T22:53:26.529Z", + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 406", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 406", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-24T13:04:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 24, + "quarantined": true, + "quarantinedAt": "2026-04-23T03:28:47.210Z", + "quarantineReason": "Health score degraded to 24 after repeated failures", + "nextFetchAt": "2026-04-24T13:04:47.210Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "financial-times-world": { + "provider": "Financial Times a World", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 2, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "france24-europe-rss": { + "provider": "France 24 a Europe (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T05:47:56.833Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 11, + "failedRuns": 4, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T05:47:56.833Z", + "lastEmptyAt": "2026-04-17T22:12:37.099Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T16:03:49.134Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T06:12:01.477Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T05:47:56.833Z" + } + ], + "cooldownUntil": "2026-04-25T05:47:56.833Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-19T16:03:49.134Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T05:47:56.833Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "french-interior-ministry-news": { + "provider": "French Ministry of the Interior - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "icct-perspectives-on-terrorism": { + "provider": "Perspectives on Terrorism (ICCT) a Journal", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "icct-publications": { + "provider": "International Centre for Counter-Terrorism (ICCT) - Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "netherlands-nctv-news": { + "provider": "Dutch NCTV - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "norway-pst-news": { + "provider": "Norwegian Government - News and Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 72, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "politico-europe": { + "provider": "Politico Europe", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "rte-ireland-news-rss": { + "provider": "RTE News - Ireland (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 2, + "emptyRuns": 6, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 2, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T11:47:27.254Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T22:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 14, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T22:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "switzerland-fedpol-news": { + "provider": "Swiss fedpol - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T21:59:30.032Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 5, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T21:59:30.032Z", + "lastEmptyAt": "2026-04-22T20:37:31.462Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T21:59:30.032Z" + } + ], + "cooldownUntil": "2026-04-24T21:59:30.032Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T21:59:30.032Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "telegraph-world-news": { + "provider": "The Telegraph a World News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 30, + "emptyRuns": 24, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 1, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T16:07:40.227Z", + "lastFailureAt": "2026-04-19T14:11:10.963Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T21:45:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 32, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:45:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "vox-pol-publications": { + "provider": "VOX-Pol Network a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "french-gendarmerie-news": { + "provider": "Gendarmerie Nationale - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "french-police-nationale-news": { + "provider": "Police Nationale - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ireland-gardai-press": { + "provider": "An Garda Siochana - Press Releases", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "netherlands-police-news": { + "provider": "Dutch National Police - News (EN)", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "paris-police-prefecture-news": { + "provider": "France24 - France (RSS)", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "portugal-pj-news": { + "provider": "Policia Judiciaria Portugal - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 38, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T15:59:44.503Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T19:18:33.309Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T15:59:44.503Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "portugal-psp-news": { + "provider": "The Portugal News - Crime", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "coe-counter-terrorism": { + "provider": "Council of Europe a Counter-Terrorism", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "echr-key-judgments-rss": { + "provider": "European Court of Human Rights - Key Judgments RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-22T17:39:27.641Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 60, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastEmptyAt": "2026-04-22T16:17:11.443Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 400", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 400", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "cooldownUntil": "2026-04-24T17:39:27.641Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T17:39:27.641Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "echr-press-releases-rss": { + "provider": "European Court of Human Rights - Press Releases RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "french-justice-ministry-news": { + "provider": "French Ministry of Justice - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "netherlands-prosecution-news": { + "provider": "Dutch Public Prosecution Service - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bfv-de-english": { + "provider": "BfV service page (Federal Office for the Protection of the Constitution)", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 62, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 51, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T11:07:28.674Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T11:07:28.674Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "dsn-at-english": { + "provider": "DSN Austria - Aktuelles", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "isd-global": { + "provider": "Institute for Strategic Dialogue (ISD) a Articles & Reports", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ocam-be-english": { + "provider": "CUTA (Belgium) threat analysis", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 19, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T22:54:57.851Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "pet-dk-english": { + "provider": "PET (Denmark) a English News", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "pst-no-english": { + "provider": "PST (Norway) English reporting page", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ran-network": { + "provider": "RUSI - Terrorism and Conflict", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "sapo-se-english": { + "provider": "Swedish Security Service English news", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "supo-fi-english": { + "provider": "SUPO Finland news and press releases", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "iom-news": { + "provider": "IOM (International Organization for Migration) a News", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "acled-updates": { + "provider": "ACLED a Updates and Analysis", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "aljazeera-news-rss": { + "provider": "Al Jazeera English a Top Stories (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 21, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 2, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T10:13:21.253Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T21:40:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 12, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:40:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ap-top-news": { + "provider": "BBC News - Top Stories", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bbc-news-world": { + "provider": "BBC News a World", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bbc-news-world-legacy": { + "provider": "BBC News a World (Legacy RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bellingcat": { + "provider": "Bellingcat a Investigations", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "chatham-house-rss": { + "provider": "Chatham House a Research & Commentary (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 7, + "emptyRuns": 6, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T14:03:06.243Z", + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 55, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T23:59:15.853Z" + }, + "chathamhouse-events": { + "provider": "Chatham House a Events (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "chathamhouse-intl-security-feed": { + "provider": "Chatham House a International Security Programme (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 5, + "emptyRuns": 23, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 5, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T14:03:06.243Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 61, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T23:35:15.853Z" + }, + "chathamhouse-news-releases": { + "provider": "Chatham House a News Releases (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "counter-extremism-project-news": { + "provider": "Counter Extremism Project a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 5, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T12:14:24.733Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T21:04:21.166Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "crisis-group": { + "provider": "International Crisis Group a Research & Analysis", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "crisis-group-europe": { + "provider": "International Crisis Group a Europe (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "global-initiative-news": { + "provider": "Global Initiative Against Transnational Organized Crime a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "interpol-news-events": { + "provider": "INTERPOL a News and Events", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "just-security": { + "provider": "Just Security a Law, Rights & National Security", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 3, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T23:55:39.351Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T09:29:55.311Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T04:05:33.139Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T09:29:55.311Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "lawfare-blog": { + "provider": "Just Security - National Security Analysis", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "long-war-journal": { + "provider": "Long War Journal a News Feed", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 6, + "emptyRuns": 16, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 10, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-21T11:46:02.615Z", + "lastFailureAt": "2026-04-18T00:05:41.686Z", + "lastEmptyAt": "2026-04-23T10:13:21.253Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-23T22:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 32, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T22:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "nato-news-rss": { + "provider": "NATO a News (RSS)", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "occrp-news": { + "provider": "OCCRP a Organized Crime and Corruption Reporting Project", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "osce-press-releases": { + "provider": "OSCE a Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "resolve-network-research": { + "provider": "RESOLVE Network a Research", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 503", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "http-status-error", + "message": "HTTP 503", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Health score degraded to 17 after repeated failures", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "reuters-uk": { + "provider": "Reuters a UK News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "rferl-security-news-rss": { + "provider": "Radio Free Europe/Radio Liberty a Security (RSS)", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + } + ], + "cooldownUntil": "2026-04-23T22:03:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T22:03:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "soufan-center-intelbrief": { + "provider": "The Soufan Center a IntelBrief", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "tech-against-terrorism-podcast": { + "provider": "Tech Against Terrorism - Podcast", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "tony-blair-institute-news": { + "provider": "Tony Blair Institute for Global Change a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "unodc-news": { + "provider": "UNODC (UN Office on Drugs and Crime) a Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "war-on-the-rocks": { + "provider": "War on the Rocks a National Security & CT Analysis", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gctf-news": { + "provider": "Global Counterterrorism Forum (GCTF) a News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T04:05:33.139Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "unoct-news": { + "provider": "UN Office of Counter-Terrorism (UNOCT) - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "unsc-counter-terrorism-committee": { + "provider": "UN Security Council - Counter-Terrorism Committee (CTC) Updates", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gnet-artificial-intelligence-rss": { + "provider": "Global Network on Extremism & Technology (GNET) a Artificial Intelligence (RSS)", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 76, + "emptyRuns": 11, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-21T11:46:02.615Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T06:02:43.923Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 67, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T06:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gnet-radicalisation-rss": { + "provider": "Global Network on Extremism & Technology (GNET) a Radicalisation (RSS)", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-16T16:57:11.406Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T21:08:30.446Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gnet-youth-rss": { + "provider": "Global Network on Extremism & Technology (GNET) a Youth (RSS)", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-22T17:39:27.641Z", + "lastBuiltCount": 0, + "successfulRuns": 5, + "emptyRuns": 0, + "failedRuns": 10, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T08:04:04.612Z", + "lastFailureAt": "2026-04-22T17:39:27.641Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T11:07:28.674Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T12:15:37.169Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T22:00:46.520Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T17:16:47.386Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T17:39:27.641Z" + } + ], + "cooldownUntil": "2026-04-24T17:39:27.641Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T22:00:46.520Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T17:39:27.641Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "tech-against-terrorism": { + "provider": "Tech Against Terrorism a Blog", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "tech-against-terrorism-home": { + "provider": "Tech Against Terrorism - Home", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "fatf-news": { + "provider": "Financial Action Task Force (FATF) a News", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "interpol-notices": { + "provider": "INTERPOL a Notices", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "unsc-1267-press-releases": { + "provider": "UN Security Council - ISIL/Da'esh & Al-Qaeda Sanctions Committee Press Releases", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "unsc-consolidated-list": { + "provider": "UN Security Council - Consolidated Sanctions List Updates (RSS)", + "lane": "sanctions", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "barking-dagenham-council-news": { + "provider": "Barking and Dagenham Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 2, + "failedRuns": 6, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "barnet-council-news": { + "provider": "Barnet Post", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "barts-health-news": { + "provider": "Barts Health NHS Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T08:09:12.931Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T08:09:12.931Z", + "lastEmptyAt": "2026-04-23T05:47:56.833Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T08:09:12.931Z" + } + ], + "cooldownUntil": "2026-04-25T08:09:12.931Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-25T08:09:12.931Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bbc-news-london-rss": { + "provider": "BBC News - London RSS", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 27, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-18T23:43:16.267Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 52, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bexley-council-news": { + "provider": "Bexley Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "brent-council-news": { + "provider": "Brent Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "bromley-council-news": { + "provider": "Bromley Council a Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "camden-council-news": { + "provider": "Camden Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "chelsea-westminster-news": { + "provider": "Chelsea and Westminster Hospital NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "city-of-london-police-fraud-reporting": { + "provider": "City of London Police - Fraud Reporting", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cnwl-news": { + "provider": "Central and North West London NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "croydon-council-news": { + "provider": "Croydon Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "ealing-council-news": { + "provider": "Ealing Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 52, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 24, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": "2026-04-18T21:09:53.488Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T21:09:53.488Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "east-london-nhs-news": { + "provider": "East London NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "enfield-council-news": { + "provider": "Enfield Council a News and Events", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gosh-news": { + "provider": "Great Ormond Street Hospital a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "guys-st-thomas-news": { + "provider": "Guy's and St Thomas' NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "hackney-council-news": { + "provider": "Hackney Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "hammersmith-fulham-news": { + "provider": "Hammersmith and Fulham Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 2, + "failedRuns": 6, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "haringey-council-news": { + "provider": "Haringey Community Press", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "harrow-council-news": { + "provider": "Harrow Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "havering-council-news": { + "provider": "Havering Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "heathrow-media-centre": { + "provider": "Heathrow a Media Centre", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "hillingdon-council-news": { + "provider": "Hillingdon Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "homerton-healthcare-news": { + "provider": "Homerton Healthcare NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "hounslow-council-news": { + "provider": "Hounslow Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "imperial-healthcare-news": { + "provider": "Imperial College Healthcare NHS Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "islington-council-news": { + "provider": "Islington Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "kensington-chelsea-newsroom": { + "provider": "Royal Borough of Kensington and Chelsea a Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "kings-college-hospital-news": { + "provider": "King's College Hospital NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "kingston-council-news": { + "provider": "Kingston Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 62, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-21T08:24:19.478Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "lambeth-council-news": { + "provider": "Lambeth Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "lewisham-council-news": { + "provider": "Salamander News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "lnwh-news": { + "provider": "London North West University Healthcare NHS Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "london-ambulance-news": { + "provider": "London Ambulance Service a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "london-city-airport-media-centre": { + "provider": "London City Airport a Media Centre", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "london-councils-news": { + "provider": "London Councils a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "london-fire-brigade-news": { + "provider": "London Fire Brigade a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "london-gov-home": { + "provider": "London.gov.uk", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "london-gov-press-releases-html": { + "provider": "London.gov.uk - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "london-gov-rss-80603": { + "provider": "Greater London Authority a RSS Feed 80603", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "london-gov-rss-80632": { + "provider": "Greater London Authority a RSS Feed 80632", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "mayor-of-london-press-releases": { + "provider": "Mayor of London a Press Releases", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "merton-council-news": { + "provider": "Merton Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 62, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-21T08:24:19.478Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "met-police-the-met-tag": { + "provider": "Metropolitan Police - The Met Tag", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 13, + "emptyRuns": 71, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 70, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "moorfields-news": { + "provider": "Moorfields Eye Hospital NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "nelft-news": { + "provider": "North East London NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "newham-council-news": { + "provider": "Newham Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "nhs-london-ncl-news": { + "provider": "NHS North Central London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "nhs-london-nel-news": { + "provider": "NHS North East London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 62, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 6, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-21T10:07:46.576Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T10:07:46.576Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "nhs-london-nwl-news": { + "provider": "NHS North West London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "nhs-london-sel-news": { + "provider": "NHS South East London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "nhs-london-swl-news": { + "provider": "NHS South West London a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "north-middlesex-news": { + "provider": "North Middlesex University Hospital a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "oxleas-news": { + "provider": "Oxleas NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "port-of-london-authority-news": { + "provider": "Port of London Authority a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "redbridge-council-news": { + "provider": "Redbridge Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "richmond-council-news": { + "provider": "Richmond Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 65, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "royal-free-london-news": { + "provider": "Royal Free London NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "royal-greenwich-news": { + "provider": "Royal Borough of Greenwich a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 2, + "failedRuns": 6, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "slam-news": { + "provider": "South London and Maudsley NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "southwark-newsroom": { + "provider": "Southwark Council a Newsroom", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "st-georges-news": { + "provider": "St George's University Hospitals NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "sutton-council-news": { + "provider": "Sutton Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "swlstg-news": { + "provider": "South West London and St George's Mental Health NHS Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "tavistock-portman-news": { + "provider": "Tavistock and Portman NHS Foundation Trust a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "tfl-press-releases": { + "provider": "Transport for London - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "tfl-press-releases-html": { + "provider": "Transport for London - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "tower-hamlets-council-news": { + "provider": "Tower Hamlets Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uclh-news": { + "provider": "University College London Hospitals a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 58, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T11:46:02.615Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "waltham-forest-council-news": { + "provider": "Waltham Forest Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "wandsworth-council-news": { + "provider": "Wandsworth Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 65, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "westminster-city-council-news": { + "provider": "Westminster City Council a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "whittington-health-news": { + "provider": "Whittington Health a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 5, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "city-of-london-police-news": { + "provider": "National Crime Agency - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "city-of-london-police-news-html": { + "provider": "City of London Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "city-of-london-police-newsroom": { + "provider": "Metropolitan Police Service - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ct-policing-london": { + "provider": "Counter Terrorism Policing London", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "met-police-latest-news": { + "provider": "Metropolitan Police - Latest News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 2, + "successfulRuns": 100, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:38:15.853Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "met-police-news": { + "provider": "Metropolitan Police Service a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 2, + "successfulRuns": 100, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:38:15.853Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "london-assembly-press-releases": { + "provider": "London Assembly a Press Releases", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "mopac-html": { + "provider": "Mayor's Office for Policing and Crime", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "london-resilience": { + "provider": "Resilience First - Latest Updates", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T23:56:26.571Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 2, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T23:56:26.571Z", + "lastEmptyAt": "2026-04-20T11:00:44.891Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T23:15:54.554Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-22T23:56:26.571Z" + } + ], + "cooldownUntil": "2026-04-24T23:56:26.571Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T23:56:26.571Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gov-uk-fcdo-travel-advice": { + "provider": "FCDO a Foreign Travel Advice Index", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-border-force": { + "provider": "Border Force (UK) a Announcements and Publications", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-ukvi": { + "provider": "UK Visas and Immigration a Announcements and Publications", + "lane": "border", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "bbc-news-england-legacy": { + "provider": "BBC News a England (Legacy RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 28, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-18T11:15:29.208Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 6, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bbc-news-front-page-legacy": { + "provider": "BBC News a Front Page (Legacy RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 14, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bbc-news-uk": { + "provider": "BBC News a UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 25, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 15, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bbc-news-uk-politics-legacy": { + "provider": "BBC News a UK Politics (Legacy RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 10, + "failedRuns": 4, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-17T09:48:51.002Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T03:30:54.684Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T15:59:44.503Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-19T03:30:54.684Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "chatham-house-home": { + "provider": "Chatham House", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "chatham-house-security-defence": { + "provider": "Chatham House - Security and Defence", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "essex-police-news": { + "provider": "Essex Police a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gov-uk-defence-intelligence": { + "provider": "UK Defence Intelligence a GOV.UK", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-terrorism-search": { + "provider": "GOV.UK Search - Terrorism", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "guardian-uk": { + "provider": "The Guardian a UK News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 23, + "emptyRuns": 36, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T05:47:56.833Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 51, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T00:30:15.853Z" + }, + "henry-jackson-society-news": { + "provider": "RUSI - Terrorism and Conflict", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "hope-not-hate-home": { + "provider": "Hope not hate podcast", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "institute-global-home": { + "provider": "Institute for Global Change", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "kent-police-news": { + "provider": "Kent Police a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "mi5-news": { + "provider": "National Crime Agency - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "mi5-news-rss-direct": { + "provider": "MI5 - News RSS", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "national-crime-agency-news": { + "provider": "National Crime Agency a News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "npcc-releases": { + "provider": "National Police Chiefs' Council - Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "police-uk-all-crime-leicester": { + "provider": "Police.uk - Street Crime Around Leicester", + "lane": "context", + "kind": "json", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 68, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T23:55:39.351Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T23:55:39.351Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "police-uk-stops-force-leicestershire": { + "provider": "Police.uk - Force Stops (Leicestershire)", + "lane": "context", + "kind": "json", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "police-uk-stops-street-leicester": { + "provider": "Police.uk - Street Stops Around Leicester", + "lane": "context", + "kind": "json", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "report-fraud-home": { + "provider": "Report Fraud", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "report-fraud-newsroom": { + "provider": "Report Fraud - Newsroom", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "rusi-home": { + "provider": "RUSI", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 21, + "failedRuns": 2, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T03:30:54.684Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T03:30:54.684Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-19T03:30:54.684Z", + "quarantineReason": "Health score degraded to 20 after repeated failures", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "rusi-publications": { + "provider": "RUSI (Royal United Services Institute) a Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "rusi-terrorism-conflict": { + "provider": "RUSI - Terrorism and Conflict", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T12:14:24.733Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T11:15:29.208Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T12:14:24.733Z" + } + ], + "cooldownUntil": "2026-04-23T22:14:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T21:04:21.166Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T22:14:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "skwawkbox": { + "provider": "Skwawkbox", + "lane": "context", + "kind": "playwright_html", + "lastCheckedAt": "2026-04-16T22:57:09.120Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 3, + "consecutiveFailures": 3, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T22:57:09.120Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T22:57:09.120Z" + } + ], + "cooldownUntil": "2026-04-23T21:24:00.000Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 32, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:24:00.000Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "sky-news-uk-rss": { + "provider": "Sky News UK a Top Stories (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 35, + "emptyRuns": 37, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-21T11:46:02.615Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T06:02:43.923Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 67, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T06:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-sun-all": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-sun-all-english": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-sun-homepage": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-sun-news-english": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "west-yorkshire-police-coroner-appeals-rss": { + "provider": "West Yorkshire Police - Coroner Appeals Feed", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 58, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T11:46:02.615Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "wiltshire-999s": { + "provider": "Wiltshire 999s", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "belfast-live": { + "provider": "Belfast Live", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 6, + "emptyRuns": 21, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 19, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T05:46:58.069Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "empty-cooldown", + "healthScore": 43, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "birmingham-mail": { + "provider": "Birmingham Mail", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "breaking-news-today": { + "provider": "Breaking News Today", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cambridge-news": { + "provider": "Cambridge News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "cooldownUntil": "2026-04-23T21:57:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-23T21:57:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "channel-4-news": { + "provider": "Channel 4 News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 12, + "emptyRuns": 22, + "failedRuns": 4, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-19T17:13:24.435Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-20T11:00:44.891Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-20T23:15:54.554Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T00:08:15.005Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T03:57:52.244Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T08:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 10, + "quarantined": true, + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T08:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "consett-magazine": { + "provider": "Consett Magazine", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "daily-echo": { + "provider": "Daily Echo", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "daily-express": { + "provider": "Daily Express", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "daily-mail-online": { + "provider": "Daily Mail Online - Popular Stories", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 19, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 16, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T23:55:39.351Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T23:55:39.351Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "daily-mirror": { + "provider": "Daily Mirror", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "daily-politics": { + "provider": "Daily Politics", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T08:39:19.161Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T07:21:41.099Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T08:39:19.161Z" + } + ], + "cooldownUntil": "2026-04-23T22:03:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T22:03:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "deadline-news": { + "provider": "Deadline News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 23, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 500", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "cooldownUntil": "2026-04-23T23:42:46.625Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "quarantineReason": "Health score degraded to 20 after repeated failures", + "nextFetchAt": "2026-04-23T23:42:46.625Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "evening-standard": { + "provider": "Evening Standard", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 3, + "emptyRuns": 24, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 19, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T05:46:58.069Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 38, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "glasgow-times": { + "provider": "Glasgow Times", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "grimsby-telegraph": { + "provider": "Grimsby Telegraph", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "herald-scotland-news": { + "provider": "Herald Scotland - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "huffpost-uk": { + "provider": "HuffPost UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "larne-times": { + "provider": "Larne Times", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "manchester-evening-news": { + "provider": "Manchester Evening News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "metro": { + "provider": "BBC News - UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "news-uk": { + "provider": "News UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "pinknews": { + "provider": "PinkNews", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 8, + "failedRuns": 5, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T13:19:06.686Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + } + ], + "cooldownUntil": "2026-04-24T00:15:46.625Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T00:15:46.625Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "politics-co-uk": { + "provider": "Politics.co.uk", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "positive-news": { + "provider": "Positive News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "scottish-field": { + "provider": "Scottish Field", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "surgezirc-uk": { + "provider": "SurgeZirc UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T11:47:27.254Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 15, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastEmptyAt": "2026-04-23T08:09:12.931Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T14:11:10.963Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "cooldownUntil": "2026-04-25T11:47:27.254Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T08:04:04.612Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T11:47:27.254Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-argus-news": { + "provider": "The Argus", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-bolton-news": { + "provider": "The Bolton News - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "church-of-england-newspaper": { + "provider": "Church of England Newspaper", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 25, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 15, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T22:12:37.099Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-daily-mash": { + "provider": "The Daily Mash", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 9, + "failedRuns": 5, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 9, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T13:19:06.686Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + } + ], + "cooldownUntil": "2026-04-23T22:27:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-23T22:27:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "daily-record": { + "provider": "Daily Record", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "guardian-uk-top-stories": { + "provider": "The Guardian - UK Top Stories", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 12, + "failedRuns": 3, + "consecutiveFailures": 3, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-18T11:15:29.208Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T23:43:16.267Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T06:30:13.977Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "independent-top-stories": { + "provider": "The Independent - Top Stories", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 4, + "emptyRuns": 39, + "failedRuns": 2, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 10, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-19T16:03:49.134Z", + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "cooldownUntil": "2026-04-24T08:18:46.625Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T08:18:46.625Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "northern-echo-news": { + "provider": "The Northern Echo - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-poke": { + "provider": "The Poke", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "scarborough-news": { + "provider": "The Scarborough News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-scotsman-news": { + "provider": "The Scotsman - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-scottish-sun": { + "provider": "The Scottish Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-sun": { + "provider": "The Sun", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-week-uk": { + "provider": "The Week UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 11, + "emptyRuns": 13, + "failedRuns": 3, + "consecutiveFailures": 3, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T11:07:28.674Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-19T18:05:04.781Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-20T08:39:19.161Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T05:23:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 16, + "quarantined": true, + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T05:23:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-york-press-news": { + "provider": "The York Press - News", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "wales-online": { + "provider": "WalesOnline", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "a-lady-in-london": { + "provider": "A Lady in London", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 22, + "failedRuns": 2, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 8, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T18:05:04.781Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + } + ], + "cooldownUntil": "2026-04-23T22:35:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T22:35:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "a-luxury-travel-blog": { + "provider": "A Luxury Travel Blog", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "age-uk-discover": { + "provider": "Age UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "alan-malcher": { + "provider": "Alan Malcher", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "arcticdry": { + "provider": "ArcticDry", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 25, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-17T08:04:04.612Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T08:04:04.612Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "britishbeautyblogger": { + "provider": "British Beauty Blogger", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "buy-firewood-direct": { + "provider": "Buy Firewood Direct", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "carly-rowena": { + "provider": "Carly Rowena", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cherished-holiday-homes": { + "provider": "Cherished Holiday Homes", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "chique-home-living": { + "provider": "Chique Home Living", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "clubwise-blog": { + "provider": "ClubWise Blog", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "disneyrollergirl": { + "provider": "Disneyrollergirl", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "elluminet-press": { + "provider": "9to5Mac", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Health score degraded to 20 after repeated failures", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "england-naturally": { + "provider": "England, Naturally", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 18, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-24T20:52:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 11, + "quarantined": true, + "quarantinedAt": "2026-04-23T03:28:47.210Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T20:52:47.210Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "evening-shire": { + "provider": "Evening Shire", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 23, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 12, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "cooldownUntil": "2026-04-24T08:18:46.625Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T08:18:46.625Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "everything-zany": { + "provider": "Everything Zany", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 22, + "failedRuns": 3, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T14:03:06.243Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "faded-spring": { + "provider": "Emily Underworld", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "fmcg-gurus": { + "provider": "FMCG Gurus", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:18:46.625Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 22, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 7, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T17:16:47.386Z", + "lastEmptyAt": "2026-04-23T20:18:46.625Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T17:16:47.386Z" + } + ], + "cooldownUntil": "2026-04-24T00:17:46.625Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T17:16:47.386Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-24T00:17:46.625Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "foreign-office-blogs": { + "provider": "Foreign Office Blogs", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "fresh-design-blog": { + "provider": "Fresh Design Blog", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ian-neate-blog": { + "provider": "9to5Mac", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "jollydeck": { + "provider": "JollyDeck", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "lifestylelinked": { + "provider": "LifeStyleLinked", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "london-review-of-books": { + "provider": "London Review of Books", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "love-my-dress": { + "provider": "Love My Dress", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T06:12:01.477Z", + "lastErrorCategory": "http-status-error", + "lastErrorMessage": "HTTP 520", + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 520", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T06:35:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 14, + "quarantined": true, + "quarantinedAt": "2026-04-22T14:59:55.048Z", + "quarantineReason": "Health score degraded to 14 after repeated failures", + "nextFetchAt": "2026-04-24T06:35:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "manic-mum-life": { + "provider": "Manic Mum Life", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 22, + "failedRuns": 3, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T14:03:06.243Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "marie-claire-uk": { + "provider": "Marie Claire UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "office-breaks": { + "provider": "Office Breaks", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "on-the-think-of": { + "provider": "On The Think Of", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "quadrant2design-exhibiting-guides": { + "provider": "Quadrant2Design Exhibiting Guides", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T11:47:27.254Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 21, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastEmptyAt": "2026-04-23T11:47:27.254Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "cooldownUntil": "2026-04-23T23:47:27.254Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T23:47:27.254Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "really-ree": { + "provider": "Really Ree", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T18:02:43.923Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 23, + "failedRuns": 3, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T18:02:43.923Z", + "lastEmptyAt": "2026-04-23T14:03:06.243Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 401", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-23T18:02:43.923Z" + } + ], + "cooldownUntil": "2026-04-25T18:02:43.923Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T18:02:43.923Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "rocknroll-bride": { + "provider": "Rock n Roll Bride", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "semibold": { + "provider": "Semibold", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 12, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-18T07:21:41.099Z", + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T07:21:41.099Z" + } + ], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "silly-old-sod": { + "provider": "Silly Old Sod", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 24, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 10, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T04:05:33.139Z", + "lastEmptyAt": "2026-04-23T19:31:23.009Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-20T04:05:33.139Z" + } + ], + "cooldownUntil": "2026-04-24T07:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-20T04:05:33.139Z", + "quarantineReason": "Persistent timeouts — endpoint may be overloaded or unreachable", + "nextFetchAt": "2026-04-24T07:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "silverspoon-london": { + "provider": "SilverSpoon London", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "sks-business-services": { + "provider": "SKS Business Services", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "hnd-assignment-help-uk-medium": { + "provider": "Stories by HND Assignment Help UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "streetspace": { + "provider": "Streetspace", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T13:19:06.686Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "tenura": { + "provider": "Tenura", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "thank-you-for-the-days": { + "provider": "Thank you for the days", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 14, + "failedRuns": 4, + "consecutiveFailures": 2, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-19T14:11:10.963Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-17T08:04:04.612Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 401", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-curry-guy": { + "provider": "The Curry Guy", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "real-talk-uk": { + "provider": "The Real Talk UK", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "the-stratfordian": { + "provider": "The Stratfordian", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "training-express": { + "provider": "Training Express", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-constitutional-law-association": { + "provider": "UK Constitutional Law Association", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-fundraising-blog": { + "provider": "UK Fundraising", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-human-rights-blog": { + "provider": "UK Human Rights Blog", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "vershd": { + "provider": "Vershd", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "vuelio-uk": { + "provider": "Vuelio", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "avon-and-somerset-police-news-html": { + "provider": "Avon and Somerset Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "avon-somerset-police-news": { + "provider": "Avon & Somerset Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "bedfordshire-police-news": { + "provider": "Bedfordshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "bedfordshire-police-news-search": { + "provider": "Bedfordshire Police - News Search", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "british-transport-police-news": { + "provider": "British Transport Police Authority - News Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "btp-british-transport-police-news-html": { + "provider": "British Transport Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cambridgeshire-police-news-search": { + "provider": "Cambridgeshire Police - News Search", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cheshire-police-news": { + "provider": "Cheshire Constabulary - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cleveland-police-news": { + "provider": "Cleveland Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cps-news-centre": { + "provider": "Crown Prosecution Service a News Centre", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ct-policing-north-west": { + "provider": "Counter Terrorism Policing North West", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ct-policing-uk-latest-news": { + "provider": "Counter Terrorism Policing UK a Latest News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ct-policing-uk-rss-feed": { + "provider": "Counter Terrorism Policing UK - Latest News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T14:03:06.243Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T14:03:06.243Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-21T11:46:02.615Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-23T14:03:06.243Z" + } + ], + "cooldownUntil": "2026-04-25T14:03:06.243Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T14:03:06.243Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cumbria-police-news": { + "provider": "Cumbria Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "cumbria-police-newsroom": { + "provider": "Cumbria Police - Newsroom", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "derbyshire-police-news": { + "provider": "Derbyshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "devon-and-cornwall-police-newsroom": { + "provider": "Devon and Cornwall Police - Newsroom", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "devon-cornwall-police-news": { + "provider": "Devon and Cornwall Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "dorset-police-news": { + "provider": "Dorset Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "dorset-police-newsroom": { + "provider": "Dorset Police - Newsroom", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "durham-constabulary-news": { + "provider": "Durham Constabulary a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "durham-police-durham-news": { + "provider": "Durham Police - Durham News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "dyfed-powys-police-news": { + "provider": "Dyfed-Powys Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "essex-police-news-html": { + "provider": "Essex Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gloucestershire-police-news": { + "provider": "Gloucestershire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gmp-news": { + "provider": "Greater Manchester Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "greater-manchester-police-news": { + "provider": "Greater Manchester Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gwent-police-news": { + "provider": "Gwent Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "hampshire-police-news": { + "provider": "Hampshire & Isle of Wight Constabulary a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "hertfordshire-police-news": { + "provider": "Hertfordshire Constabulary a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "humberside-police-news-search": { + "provider": "Humberside Police - News Search", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "kent-police-news-html": { + "provider": "Kent Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "lancashire-constabulary-news": { + "provider": "Lancashire Constabulary a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "leicestershire-police-news": { + "provider": "National Crime Agency - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "lincolnshire-police-news": { + "provider": "Lincolnshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "merseyside-police-news": { + "provider": "Merseyside Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "merseyside-police-news-html": { + "provider": "Merseyside Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "norfolk-constabulary-news": { + "provider": "Norfolk Constabulary - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "north-wales-police-news": { + "provider": "North Wales Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "north-yorkshire-police-news-html": { + "provider": "North Yorkshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "northamptonshire-police-news-html": { + "provider": "Northamptonshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "northumbria-police-news": { + "provider": "North East Bylines", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "northumbria-police-northumbria-news": { + "provider": "Northumbria Police - Northumbria News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "nottinghamshire-police-news": { + "provider": "Nottinghamshire Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "nottinghamshire-police-nottinghamshire-news": { + "provider": "Nottinghamshire Police - Nottinghamshire News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "police-scotland-news": { + "provider": "Police Scotland news", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 25, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T19:32:35.264Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T00:05:41.686Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T00:05:41.686Z", + "quarantineReason": "Health score degraded to 23 after repeated failures", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "psni-latest-news": { + "provider": "Police Service of Northern Ireland - Latest News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "psni-news": { + "provider": "Police Service of Northern Ireland a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "south-wales-police-news": { + "provider": "South Wales Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "south-yorkshire-police-news": { + "provider": "South Yorkshire Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "staffordshire-police-news": { + "provider": "Staffordshire Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "staffordshire-police-staffordshire-news": { + "provider": "Staffordshire Police - Staffordshire News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "suffolk-constabulary-news": { + "provider": "Suffolk Constabulary - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "surrey-police-news": { + "provider": "Surrey Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "sussex-police-news": { + "provider": "Sussex Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "thames-valley-police-news": { + "provider": "Thames Valley Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "thames-valley-police-news-html": { + "provider": "Thames Valley Police - Thames Valley News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "warwickshire-police-news": { + "provider": "Warwickshire Connected - Latest Alerts", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 2, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — errors alternate between auth blocks and anti-bot; consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "west-mercia-police-news-html": { + "provider": "West Mercia Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "west-midlands-police-news": { + "provider": "West Midlands Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "west-yorkshire-police-all-rss": { + "provider": "West Yorkshire Police - All Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "west-yorkshire-police-appeals-rss": { + "provider": "West Yorkshire Police - Appeals Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "west-yorkshire-police-missing-rss": { + "provider": "West Yorkshire Police - Missing Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "west-yorkshire-police-news": { + "provider": "West Yorkshire Police a News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 59, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-21T11:46:02.615Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "west-yorkshire-police-news-appeals": { + "provider": "West Yorkshire Police - News Appeals", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "west-yorkshire-police-news-rss": { + "provider": "West Yorkshire Police - News Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "west-yorkshire-police-releases-rss": { + "provider": "West Yorkshire Police - Releases Feed", + "lane": "incidents", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 76, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 76, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "wiltshire-police-news": { + "provider": "Wiltshire Police - News", + "lane": "incidents", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "attorney-generals-office-html": { + "provider": "Attorney General's Office", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "cabinet-office-html": { + "provider": "Cabinet Office", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "cps-homepage": { + "provider": "Crown Prosecution Service", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "crown-office-news": { + "provider": "Crown Office and Procurator Fiscal Service - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "echr-uk-grand-chamber-rss": { + "provider": "European Court of Human Rights - UK Grand Chamber RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "extremism-commission-blog": { + "provider": "Commission for Countering Extremism - Blog", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "fcdo-html": { + "provider": "Foreign, Commonwealth & Development Office", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 13, + "emptyRuns": 71, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 70, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-scot-access-to-justice-latest": { + "provider": "Scottish Government - Access to Justice Latest", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-cabinet-office-atom": { + "provider": "Cabinet Office a GOV.UK Atom Feed", + "lane": "oversight", + "kind": "atom", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-hmcts": { + "provider": "HMCTS a Courts and Tribunals Announcements", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-hmic": { + "provider": "HM Inspectorate of Constabulary a GOV.UK", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gov-uk-home-office-atom": { + "provider": "UK Home Office a Atom Feed", + "lane": "oversight", + "kind": "atom", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-ipco": { + "provider": "Investigatory Powers Commissioner's Office a GOV.UK", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-mod-atom": { + "provider": "Ministry of Defence a GOV.UK Atom Feed", + "lane": "oversight", + "kind": "atom", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-moj-atom": { + "provider": "Ministry of Justice a GOV.UK Atom Feed", + "lane": "oversight", + "kind": "atom", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-news-and-communications-atom": { + "provider": "GOV.UK - News and Communications Atom", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 17, + "emptyRuns": 69, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 25, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-20T21:17:14.299Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-parliament-jcnss": { + "provider": "UK Parliament a Joint Committee on National Security Strategy", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "hmiprisons-news": { + "provider": "HM Inspectorate of Prisons - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "hmiprobation-news": { + "provider": "HM Inspectorate of Probation - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "home-office-media-blog": { + "provider": "Home Office Media Blog", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "independent-reviewer-terrorism-legislation": { + "provider": "Independent Reviewer of Terrorism Legislation a Reports", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "independent-reviewer-terrorism-legislation-html": { + "provider": "Independent Reviewer of Terrorism Legislation", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "joint-committee-human-rights-html": { + "provider": "Joint Committee on Human Rights", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T19:31:23.009Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 15, + "failedRuns": 5, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T19:31:23.009Z", + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + }, + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T19:31:23.009Z" + } + ], + "cooldownUntil": "2026-04-25T19:31:23.009Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-25T19:31:23.009Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "judiciary-rss-feeds-page": { + "provider": "Judiciary UK - RSS Feeds", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "judiciary-uk-announcements-feed": { + "provider": "Judiciary UK - Announcements Feed", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "judiciary-uk-judgments-feed": { + "provider": "Judiciary UK - Judgments Feed", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "judiciary-uk-news": { + "provider": "Judiciary of England and Wales a News", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-22T16:17:11.443Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 34, + "failedRuns": 3, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T16:17:11.443Z", + "lastEmptyAt": "2026-04-22T14:59:55.048Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "Blocked by blocked access page", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-16T22:57:09.120Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-19T11:44:44.316Z" + }, + { + "category": "blocked-or-auth", + "message": "Blocked by blocked access page", + "at": "2026-04-22T16:17:11.443Z" + } + ], + "cooldownUntil": "2026-04-24T16:17:11.443Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T16:17:11.443Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "judiciary-uk-publications-feed": { + "provider": "Judiciary UK - Publications Feed", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "lords-in-focus-rss": { + "provider": "Hansard Society - Despatch Box", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "lords-library-notes-rss": { + "provider": "Hansard Society - Despatch Box", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ministry-of-defence-html": { + "provider": "Ministry of Defence", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 70, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 70, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "ons-html": { + "provider": "Office for National Statistics", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "parliament-all-bills-rss": { + "provider": "Parliament - All Bills RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "parliament-private-bills-rss": { + "provider": "Parliament - Private Bills RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "parliament-public-bills-rss": { + "provider": "Parliament - Public Bills RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "police-ombudsman-current-investigations": { + "provider": "Police Ombudsman - Current Investigations", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "police-uk-crime-categories-2024-01": { + "provider": "Police.uk - Crime Categories (2024-01)", + "lane": "oversight", + "kind": "json", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "police-uk-crimes-street-dates": { + "provider": "Police.uk - Street Crime Dataset Dates", + "lane": "oversight", + "kind": "json", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "police-uk-outcomes-at-location-1609590": { + "provider": "Police Data UK - Outcomes At Location API Docs", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "police-uk-outcomes-for-crime-e11dade0": { + "provider": "Police.uk - Outcomes For Crime e11dade0", + "lane": "oversight", + "kind": "json", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scotcourts-fai-determinations-rss": { + "provider": "Scottish Courts - Fatal Accident Inquiry Determinations RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scotcourts-fai-hearings-rss": { + "provider": "Scottish Courts - Fatal Accident Inquiry Hearings RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scotcourts-high-court-justiciary-judgments-rss": { + "provider": "Scottish Courts - High Court of Justiciary Judgments RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scotcourts-high-court-practice-notes-rss": { + "provider": "Scottish Courts - High Court of Justiciary Practice Notes RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scotcourts-judgments-rss": { + "provider": "Scottish Courts - Judgments RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scotcourts-news-articles-rss": { + "provider": "Scottish Courts - News Articles RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scotcourts-publications-rss": { + "provider": "Scottish Courts - Publications RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scotcourts-rss-feeds-page": { + "provider": "Scottish Courts and Tribunals - RSS Feeds", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T03:28:47.210Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 65, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 1, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T03:28:47.210Z", + "lastEmptyAt": "2026-04-22T23:56:26.571Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T03:28:47.210Z" + } + ], + "cooldownUntil": "2026-04-25T03:28:47.210Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T03:28:47.210Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "scotcourts-sheriff-criminal-practice-notes-rss": { + "provider": "Scottish Courts - Sheriff Court Criminal Practice Notes RSS", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "scottish-government-justice-news": { + "provider": "Scottish Government - Justice and Safety", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "serious-fraud-office-news": { + "provider": "Serious Fraud Office a News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 58, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T04:05:33.139Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-20T04:05:33.139Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-home-office": { + "provider": "UK Home Office a Announcements and Publications", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 1, + "successfulRuns": 95, + "emptyRuns": 4, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:38:15.853Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-19T18:05:04.781Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-iopc-news": { + "provider": "Independent Office for Police Conduct a News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-ncsc-news": { + "provider": "National Cyber Security Centre (UK) a News", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 5, + "successfulRuns": 99, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:38:15.853Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-ncsc-threat-reports": { + "provider": "National Cyber Security Centre (UK) a Threat Reports", + "lane": "oversight", + "kind": "rss", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 1, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-16T16:57:11.406Z", + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T21:08:30.446Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-parliament-business-news": { + "provider": "UK Parliament - Business News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-parliament-defence-committee": { + "provider": "UK Parliament a Defence Select Committee", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 68, + "failedRuns": 1, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": "2026-04-23T08:09:12.931Z", + "lastErrorCategory": "timeout", + "lastErrorMessage": "This operation was aborted", + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-parliament-foreign-affairs-committee": { + "provider": "UK Parliament a Foreign Affairs Select Committee", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-parliament-home-affairs-committee": { + "provider": "UK Parliament a Home Affairs Committee (News)", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-parliament-isc": { + "provider": "UK Parliament a Intelligence and Security Committee (Reports & News)", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 2, + "failedRuns": 6, + "consecutiveFailures": 4, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 4, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T21:04:21.166Z", + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T22:01:43.175Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T05:49:08.723Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-parliament-justice-committee": { + "provider": "UK Parliament a Justice Select Committee", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "act-campaign": { + "provider": "ACT Awareness Campaign", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "cheshire-police-alert": { + "provider": "Cheshire Police Alert", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 54, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "ct-policing-prevent-programme": { + "provider": "Counter Terrorism Policing - Prevent", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ct-policing-what-you-can-do": { + "provider": "Counter Terrorism Policing - What You Can Do", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "dc-police-community-messaging": { + "provider": "Dorset and Cornwall Police - Community Messaging", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 54, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "devon-cornwall-alerts": { + "provider": "Devon and Cornwall Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 54, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gnet-research": { + "provider": "Global Network on Extremism & Technology (GNET) a Main Feed", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 4, + "successfulRuns": 90, + "emptyRuns": 5, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:38:15.853Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T18:02:43.923Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-24T00:21:15.853Z" + }, + "gov-uk-contest-strategy": { + "provider": "GOV.UK a CONTEST Counter-Terrorism Strategy", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-counter-extremism-commissioner": { + "provider": "Counter Extremism Commissioner a GOV.UK", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 72, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T19:01:30.233Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T19:01:30.233Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-prevent-strategy": { + "provider": "UK Home Office - Prevent duty guidance", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-report-terrorism": { + "provider": "GOV.UK - Report Terrorism", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gov-uk-terrorism-national-emergency": { + "provider": "GOV.UK - Terrorism National Emergency", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "icsr-kcl": { + "provider": "International Centre for the Study of Radicalisation (ICSR) a Updates", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "met-office-seasonal-advice": { + "provider": "Met Office - Seasonal Advice", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "mi5-terrorism-threat-levels": { + "provider": "MI5 - Terrorism Threat Levels", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "mi5-uk-threat-level": { + "provider": "MI5 (Security Service) a UK Threat Level", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "my-community-alert": { + "provider": "My Community Alert", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T11:47:27.254Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 45, + "failedRuns": 2, + "consecutiveFailures": 1, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T11:47:27.254Z", + "lastEmptyAt": "2026-04-23T10:13:21.253Z", + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-18T19:28:57.337Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "Playwright browser not installed: browserType.launch: Executable doesn't exist at /home/runner/.cache/ms-playwright/chromium_headless_shell-1217/chrome-headless-shell-linux64/chrome-headless-shell\n╔════════════════════════════════════════════════════════════╗\n║ Looks like Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ npx playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚════════════════════════════════════════════════════════════╝", + "at": "2026-04-23T11:47:27.254Z" + } + ], + "cooldownUntil": "2026-04-25T11:47:27.254Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-25T11:47:27.254Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "north-wales-community-alert": { + "provider": "North Wales Community Alert", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 39, + "failedRuns": 3, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 11, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T23:15:54.554Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-17T05:46:58.069Z" + }, + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "http-status-error", + "message": "HTTP 429", + "at": "2026-04-20T23:15:54.554Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "northamptonshire-talking": { + "provider": "Northamptonshire Talking", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "npsa-blog": { + "provider": "NPSA - Blog", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "npsa-blog-news": { + "provider": "NPSA - Blog News", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "npsa-national-protective-security-authority": { + "provider": "NPSA - Activity on GOV.UK", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "protectuk": { + "provider": "ProtectUK (NPSA) a Protective Security Guidance", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "south-yorkshire-police-alerts": { + "provider": "South Yorkshire Police Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 54, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "stay-in-the-know-home": { + "provider": "Stay In The Know - Community Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 54, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "stay-in-the-know-latest-alerts": { + "provider": "Stay In The Know - Latest Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 53, + "failedRuns": 2, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-ncsc-all-rss": { + "provider": "UK NCSC - All Updates RSS", + "lane": "prevention", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 14, + "emptyRuns": 70, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 70, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-ncsc-homepage": { + "provider": "UK NCSC - Homepage", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "uk-prevent-duty-guidance": { + "provider": "GOV.UK a Prevent Duty Guidance (Collection)", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "west-midlands-community-alerts": { + "provider": "WMNow - Community Alerts", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 54, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "west-yorkshire-community-alert": { + "provider": "West Yorkshire Community Alert", + "lane": "prevention", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 54, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-19T17:13:24.435Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T17:13:24.435Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "gov-uk-proscribed-terrorist-orgs": { + "provider": "GOV.UK a Proscribed Terrorist Organisations", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "hm-treasury-html": { + "provider": "HM Treasury", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "ofsi-blog-home": { + "provider": "OFSI - Blog", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "otsi-blog-home": { + "provider": "OTSI - Blog", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 1, + "successfulRuns": 95, + "emptyRuns": 4, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:38:15.853Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-19T18:05:04.781Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, + "quarantined": false, + "quarantinedAt": null, + "quarantineReason": null, + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-ofsi-blog": { + "provider": "Office of Financial Sanctions Implementation (OFSI) a Blog", + "lane": "sanctions", + "kind": "rss", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 2, + "successfulRuns": 99, + "emptyRuns": 0, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-23T20:38:15.853Z", + "lastFailureAt": null, + "lastEmptyAt": null, + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 100, "quarantined": false, "quarantinedAt": null, "quarantineReason": null, - "nextFetchAt": "2026-04-24T00:52:51.187Z" + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "uk-sanctions-list": { + "provider": "UK Sanctions List (FCDO) a Consolidated List (XML Service)", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "ctc-sentinel": { + "provider": "Combating Terrorism Center at West Point - CTC Sentinel", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "dhs-press-releases": { + "provider": "US Department of Homeland Security - News", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "dni-press-releases": { + "provider": "Office of the Director of National Intelligence - Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "doj-nsd-press-releases": { + "provider": "U.S. Department of Justice - National Security Division Press Releases", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 17, + "failedRuns": 4, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 17, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-20T06:30:13.977Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T15:11:26.228Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-18T05:49:08.723Z" + }, + { + "category": "not-found-404", + "message": "HTTP 404", + "at": "2026-04-20T06:30:13.977Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-16T16:57:11.406Z", + "quarantineReason": "Endpoint likely removed — all recent errors are HTTP 404", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "fbi-national-press-releases": { + "provider": "FBI - National Press Releases (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "fbi-stories": { + "provider": "FBI - Top Stories (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "blocked-or-auth", + "lastErrorMessage": "HTTP 403", + "recentErrors": [ + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "blocked-or-auth", + "message": "HTTP 403", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Access protection added — consistent 401/403 blocks; consider new endpoint", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "fbi-top-stories": { + "provider": "FBI - Top Stories (RSS)", + "lane": "context", + "kind": "rss", + "lastCheckedAt": "2026-04-23T10:13:21.253Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 7, + "consecutiveFailures": 7, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-23T10:13:21.253Z", + "lastEmptyAt": null, + "lastErrorCategory": "brittle-selectors-or-js-rendering", + "lastErrorMessage": "No items parsed from source payload", + "recentErrors": [ + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-19T10:46:47.709Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-21T08:24:19.478Z" + }, + { + "category": "brittle-selectors-or-js-rendering", + "message": "No items parsed from source payload", + "at": "2026-04-23T10:13:21.253Z" + } + ], + "cooldownUntil": "2026-04-25T10:13:21.253Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "HTML structure changed — selectors no longer match; needs parser update", + "nextFetchAt": "2026-04-25T10:13:21.253Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "gw-program-extremism": { + "provider": "George Washington University - Program on Extremism", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T16:07:40.227Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 20, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 20, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T16:07:40.227Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": "2026-04-24T04:07:40.227Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 20, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-24T04:07:40.227Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "nsa-cybersecurity-news": { + "provider": "NSA - Cybersecurity Advisories & Guidance", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "rand-terrorism-topic": { + "provider": "RAND - Terrorism Topic Updates", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 5, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "rewards-for-justice": { + "provider": "U.S. Department of State - Rewards for Justice", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "start-baad-database": { + "provider": "National Consortium for the Study of Terrorism (START) - Big Allied and Dangerous (BAAD) Database", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "start-center-publications": { + "provider": "START Center (UMD) - News & Publications", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 1, + "failedRuns": 6, + "consecutiveFailures": 5, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": "2026-04-16T19:01:30.233Z", + "lastErrorCategory": "network-failure", + "lastErrorMessage": "fetch failed", + "recentErrors": [ + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:04:21.166Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-16T21:58:32.608Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-18T03:42:22.439Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-19T18:05:04.781Z" + }, + { + "category": "network-failure", + "message": "fetch failed", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-18T03:42:22.439Z", + "quarantineReason": "Persistent network failures — DNS/connection issues; infrastructure may be down", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "state-dept-terrorism": { + "provider": "US State Department - Bureau of Counterterrorism", + "lane": "context", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "cisa-cybersecurity-advisories": { + "provider": "CISA - Cybersecurity Alerts & Advisories", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 13, + "emptyRuns": 71, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 70, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": "2026-04-17T14:10:24.787Z", + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "us-house-homeland-security": { + "provider": "US House Committee on Homeland Security - News", + "lane": "oversight", + "kind": "html", + "lastCheckedAt": "2026-04-22T14:59:55.048Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 0, + "failedRuns": 6, + "consecutiveFailures": 6, + "consecutiveEmptyRuns": 0, + "consecutiveBlockedFailures": 6, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-22T14:59:55.048Z", + "lastEmptyAt": null, + "lastErrorCategory": "anti-bot-protection", + "lastErrorMessage": "Blocked by anti-bot protection", + "recentErrors": [ + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T16:57:11.406Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-16T19:01:30.233Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-17T22:12:37.099Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-19T19:32:35.264Z" + }, + { + "category": "anti-bot-protection", + "message": "Blocked by anti-bot protection", + "at": "2026-04-22T14:59:55.048Z" + } + ], + "cooldownUntil": "2026-04-24T14:59:55.048Z", + "autoSkipReason": "health-deprioritised", + "healthScore": 0, + "quarantined": true, + "quarantinedAt": "2026-04-17T22:12:37.099Z", + "quarantineReason": "Anti-bot protection active — consider Playwright fallback or new endpoint", + "nextFetchAt": "2026-04-24T14:59:55.048Z", + "lastDeferredAt": "2026-04-23T20:38:15.853Z" + }, + "us-treasury-ofac-press-releases": { + "provider": "U.S. Treasury (OFAC) - Press Releases", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 74, + "failedRuns": 1, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 74, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": "2026-04-16T15:11:26.228Z", + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [ + { + "category": "timeout", + "message": "This operation was aborted", + "at": "2026-04-16T15:11:26.228Z" + } + ], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" + }, + "us-treasury-ofac-recent-actions": { + "provider": "U.S. Treasury (OFAC) - Recent Actions", + "lane": "sanctions", + "kind": "html", + "lastCheckedAt": "2026-04-23T20:38:15.853Z", + "lastBuiltCount": 0, + "successfulRuns": 0, + "emptyRuns": 75, + "failedRuns": 0, + "consecutiveFailures": 0, + "consecutiveEmptyRuns": 75, + "consecutiveBlockedFailures": 0, + "consecutiveDeadUrlFailures": 0, + "lastSuccessfulAt": null, + "lastFailureAt": null, + "lastEmptyAt": "2026-04-23T20:38:15.853Z", + "lastErrorCategory": null, + "lastErrorMessage": null, + "recentErrors": [], + "cooldownUntil": null, + "autoSkipReason": null, + "healthScore": 0, + "quarantined": true, + "quarantinedAt": null, + "quarantineReason": "Low health score – needs review", + "nextFetchAt": "2026-04-23T21:38:15.853Z" } } } diff --git a/source-quarantine.html b/source-quarantine.html index 21ac0907..65e2316d 100644 --- a/source-quarantine.html +++ b/source-quarantine.html @@ -269,13 +269,13 @@

Source Quarantine Review

- Generated: 2026-04-23T21:24:51.187Z - Low-health sources: 0 + Generated: 2026-04-23T20:38:15.853Z + Low-health sources: 528 Pending suggestions: 0 SLA: deprioritised, auto-recheck 24h+ - New this week: 0 - Avg health score: 0/100 - Avg time in quarantine: 0h + New this week: 235 + Avg health score: 3/100 + Avg time in quarantine: 141h Re-quarantine rate: 0%
@@ -455,7 +455,7 @@

Feed Audit

? 'Data mode: live API (restore enabled)' : 'Data mode: live read-only (restore unavailable)'; meta.innerHTML = [ - 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T21:24:51.187Z') + '', + 'Generated: ' + escapeHtml(payload.generatedAt || '2026-04-23T20:38:15.853Z') + '', 'Low-health sources: ' + escapeHtml(currentEntries.length) + '', 'Pending suggestions: ' + escapeHtml(currentSuggestions.length) + '', 'SLA: deprioritised, auto-recheck 24h+',