Part of #5097. P1. Verified against code + prod 2026-07-09.
The forecast generator's ACLED (near-real-time conflict events) input is absent in production, and the outage is invisible to health monitoring.
Evidence
- Generator reads
conflict:acled:v1:all:0:0 unguarded (seed-forecasts.mjs:758,844); on miss it silently sets acledEvents = [] (:845).
- Prod:
EXISTS conflict:acled:v1:all:0:0 = 0, and seed-meta:conflict:acled-intel is absent → seed-conflict-intel.mjs (which should write it, TTL 900s, :23/:283) is not producing output. (Fresh time-windowed ACLED keys conflict:acled:v1:all:<ts>:<ts> exist with ~90s TTL from the live API path, so ACLED reaches the product but not the forecaster's cache.)
acledEvents feeds computeEmaWindows(priorWindows, acledEvents, ucdpEvents) (:15482) — the conflict escalation EMA, a core driver of the flagship conflict domain.
api/health.js does not monitor acled/conflict-intel → nothing flagged it.
Consequence
Conflict-escalation is computed with zero near-real-time ACLED, leaning only on UCDP — the ~months-lagged academic feed. The whole conflict-forecast domain has been running partially blind, silently.
Fix
- Get
seed-conflict-intel running/producing in prod (Railway; likely crashed/de-scheduled — see the diagnose-railway-seeders skill).
- Add health coverage for
conflict:acled:v1:all:0:0 (+ seed-meta:conflict:acled-intel) so this can't recur silently.
Related: #5097, #4930, #5072.
Part of #5097. P1. Verified against code + prod 2026-07-09.
The forecast generator's ACLED (near-real-time conflict events) input is absent in production, and the outage is invisible to health monitoring.
Evidence
conflict:acled:v1:all:0:0unguarded (seed-forecasts.mjs:758,844); on miss it silently setsacledEvents = [](:845).EXISTS conflict:acled:v1:all:0:0= 0, andseed-meta:conflict:acled-intelis absent →seed-conflict-intel.mjs(which should write it, TTL 900s,:23/:283) is not producing output. (Fresh time-windowed ACLED keysconflict:acled:v1:all:<ts>:<ts>exist with ~90s TTL from the live API path, so ACLED reaches the product but not the forecaster's cache.)acledEventsfeedscomputeEmaWindows(priorWindows, acledEvents, ucdpEvents)(:15482) — the conflict escalation EMA, a core driver of the flagship conflict domain.api/health.jsdoes not monitoracled/conflict-intel→ nothing flagged it.Consequence
Conflict-escalation is computed with zero near-real-time ACLED, leaning only on UCDP — the ~months-lagged academic feed. The whole conflict-forecast domain has been running partially blind, silently.
Fix
seed-conflict-intelrunning/producing in prod (Railway; likely crashed/de-scheduled — see the diagnose-railway-seeders skill).conflict:acled:v1:all:0:0(+seed-meta:conflict:acled-intel) so this can't recur silently.Related: #5097, #4930, #5072.