mirror of
https://github.com/koala73/worldmonitor.git
synced 2026-05-13 18:46:21 +02:00
* feat(correlation): server-side correlation engine seed + bootstrap hydration Move correlation card computation from client-side (per-browser, 10-30s delay) to server-side (Railway cron, instant via bootstrap). Seed script reads 8 Redis keys, runs 4 adapter signal collectors (military, escalation, economic, disaster), clusters/scores/generates cards, writes to Redis with 10min TTL. - New: scripts/seed-correlation.mjs (pure JS port of correlation engine) - bootstrap.js: add correlationCards to FAST_KEYS tier - health.js + seed-health.js: register for monitoring (maxStaleMin: 15) - CorrelationPanel: consume bootstrap on construction, show "Analyzing..." only after live engine has run (not for bootstrap-only cards) - _seed-utils.mjs: support opts.recordCount override (function or number) * fix(correlation): stale timestamp fallback + coordinate-based country resolution P1: news stories lacked per-story pubDate, causing Date.now() fallback on every seed run. Now _clustering.mjs propagates pubDate through to enrichedStories, and seed-correlation reads s.pubDate then generatedAt. P2: normalizeToCode dropped signals with unparseable country names. Added centroid-based coordinate fallback (haversine nearest-match within 800km) matching the live engine's getCountryAtCoordinates behavior. * fix(correlation): add 11 missing country centroids to coordinate fallback CI, CR, CV, CY, GA, IS, LA, SZ, TL, TT, XK were in the normalization maps but missing from COUNTRY_CENTROIDS, causing coordinate-only signals in those countries to be misclassified or dropped during bootstrap. * fix(correlation): align protest/outage field names with actual Redis schema Codex review P1 findings: seed-correlation read wrong field names from Redis data. Protests (unrest:events:v1): p.time -> p.occurredAt, p.lat/lon -> p.location.latitude/longitude, severity enum SEVERITY_LEVEL_* mapping. Outages (infra:outages:v1): o.pubDate -> o.detectedAt, o.lat/lon -> o.location.latitude/longitude, severity enum OUTAGE_SEVERITY_* mapping. Both escalation and disaster adapters updated. Old field names kept as fallbacks for data shape compatibility.
6.3 KiB
6.3 KiB