---
title: "Thermal Escalation"
description: "FIRMS/VIIRS thermal anomaly clusters with baseline comparison, persistence tracking, and conflict-adjacency flags — for spotting abnormal thermal activity that may signal conflict, industrial disruption, or escalation."
---

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.

## What the panel shows

A card list of thermal clusters with:

- **Status label** per cluster: `normal`, `elevated`, `spike`, or `persistent`.
- **Baseline comparison** — how the current detection density differs from the cluster's baseline.
- **Persistence tracking** — clusters that re-appear across successive windows are flagged `persistent`.
- **Conflict-adjacent flag** — clusters whose region label is in the current conflict-region allowlist.
- **High-relevance flag** — conflict-adjacent clusters that are `spike` or `persistent`.

A summary bar across the top counts: total clusters, elevated, spike, persistent, conflict-adjacent, and high-relevance.

**Row interactions**:

- Click a cluster card to jump the map to that cluster's coordinates.

Panel id is `thermal-escalation`; canonical component is `src/components/ThermalEscalationPanel.ts`.

## How you reach it

- **Cmd+K**: type *thermal* or *escalation*.
- **Availability by variant**: registered and enabled by default in the **full/geopolitical** variant only. Not present in the tech, finance, commodity, or happy variants. Source: `FULL_PANELS` in `src/config/panels.ts`.

## Data sources

Per the in-panel info tooltip, Thermal Escalation is seeded from:

- **FIRMS / VIIRS** — NASA's Fire Information for Resource Management System and the Visible Infrared Imaging Radiometer Suite thermal anomaly feeds.

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.

## Refresh cadence

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.

## Methodology

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](/methodology/thermal-escalation) for thresholds, status rules, confidence bands, and the current conflict-region allowlist.

## Tier & gating

Thermal Escalation is **free**. No `premium` flag in `src/config/panels.ts`; the RPC is public.

## API reference

- [Thermal service](/api/ThermalService.openapi.yaml) — `list-thermal-escalations`.
- Related: [Natural Disasters / Wildfires](/natural-disasters) for the raw-detection map layer that feeds this clustering.
