docs/panels/thermal-escalation.mdx
The Thermal Escalation panel turns raw thermal-satellite detections (hotspots) into clustered events and evaluates each cluster against its local baseline and context. It answers two questions: where is thermal activity abnormal, and which clusters are strategically relevant — currently conflict-adjacent, persistent, or high-FRP activity.
A card list of thermal clusters with:
normal, elevated, spike, or persistent.persistent.spike or persistent.A summary bar across the top counts: total clusters, elevated, spike, persistent, conflict-adjacent, and high-relevance.
Row interactions:
Panel id is thermal-escalation; canonical component is src/components/ThermalEscalationPanel.ts.
FULL_PANELS in src/config/panels.ts.Per the in-panel info tooltip, Thermal Escalation is seeded from:
A single RPC backs the panel: GET /api/thermal/v1/list-thermal-escalations. The backend seeder clusters raw detections, compares against the baseline, applies persistence and adjacency logic, and writes the result at thermal:escalation:v1 in Redis.
The seeder runs on a ~2-hour cron. The key is allowed up to 6 hours (maxStaleMin: 360) in api/health.js — 3× the nominal interval — before the health surface escalates. The longer grace window accommodates FIRMS refresh cycles and the clustering step's runtime.
The current scorer clusters detections within 20km, compares each 0.5-degree cell against a 7-day local baseline, tracks 18-hour persistence, and retains 30 days of history for baseline continuity. Conflict adjacency is allowlist-based rather than infrastructure-proximity based; the current payload's nearbyAssets array is intentionally empty until an asset matcher is wired.
See Thermal Escalation Methodology for thresholds, status rules, confidence bands, and the current conflict-region allowlist.
Thermal Escalation is free. No premium flag in src/config/panels.ts; the RPC is public.
list-thermal-escalations.