Iran Escalation Dashboard
A public tracker of military and diplomatic actions involving Iran, built from English-language news coverage. Each article is scored against a fixed rubric and then clustered into an event with its media links; the escalation index takes the median of per-article scores across five conflict axes.
Methodology
Every in-scope article receives its own score on a 0–10 ladder that spans routine diplomacy to existential escalation. The headline index per conflict axis is the unweighted median of article scores in a trailing seven-day window. It resists single-outlet spikes, weights no outlet more than another, and breaks down cleanly by outlet.
- Ingestion
01RSS ingestion
Fetch articles from feeds & licensed APIs.
02Data preprocessing
Canonical article per story, routed to one of six conflict axes.
- Scoring
03LLM scoring (local model)
Per-article score on the 0–10 rubric ladder.
- Aggregation
04Per-axis median
Unweighted 7-day median + corroboration count.
05Postgres · index_points
Daily point per axis (value, momentum, n).
- Publishing
06Static JSON export
/api/index.json on every pipeline run.
07Finished Dashboard
Client-fetched charts + data tables.
Current state (October 2026): the corpus is single-outlet. Only The Guardian — via its licensed Open Platform API — feeds the dashboard while other outlets are paused pending feed and permission changes, so index, corroboration and event views currently reflect one outlet.
Sources are typed by sourcing, not nationality: independent (weight 1.0) versus official relay (weight 0.5). Military claims from any party's official channels, whether IDF, IRGC, MoD, or intelligence services, are unverified by default until independently corroborated; an IDF-sourced Israeli outlet and an IRGC-sourced Iranian outlet are treated identically. A secondary corroboration indicator (mean of source weight × claim coefficient) sits next to each index value. A high median with low corroboration means the conflict is hot but claims are thin or one-sided.
Scores carry model name and rubric version; any change triggers an explicit, logged re-score rather than silent drift. No full article text is stored long-term: each source runs under a documented ingest mode (full body, excerpts only, or metadata only), Guardian content arrives via its official Open Platform API with a 24-hour retention cap, and a documented takedown procedure covers removal requests.
The scoring ladder (rubric v1)
| Score | Band |
|---|---|
| 0 | No Iran-related military or diplomatic action (excluded) |
| 1 | Routine diplomacy |
| 2 | Diplomatic friction |
| 3 | Significant diplomatic act |
| 4 | Military posturing |
| 5 | Indirect / proxy engagement |
| 6 | Limited direct action |
| 7 | Retaliation cycle |
| 8 | Sustained campaign |
| 9 | Major escalation |
| 10 | Existential / great-power |
The score reflects the highest action stated as fact in an article. Rumors and speculation score one band lower and are marked unverified.
Escalation index by axis
Median of per-article scores (0–10) in a trailing 7-day window. Momentum compares the current value with one week earlier; corroboration is the mean source-weight × claim-coefficient in the same window. Select an axis card to open its full history with adjustable time range.
Events
Incidents clustered from coverage, newest first. Each event aggregates its reporting articles and media links (links only; no media bytes are stored).
Per-outlet comparison
Under maintenance.
Per-outlet comparison is paused while only one outlet — The Guardian, via its Open Platform API — feeds the dashboard. It resumes when other outlets' feeds and permissions are re-enabled.
Each view fetches one of three typed JSON endpoints: /api/index,/api/events, and /api/sources. Their contracts mirror the Postgres tables index_points, events (with member articles and media), and sources + source_stats_daily. The pipeline exports them as static JSON on every run (workers/pipeline/src/export-site.js), so the deploy stays fully static. Guardian headlines and excerpts are provided via The Guardian Open Platform (attribution per its terms of use); as of September 2026 all other outlets are paused pending feed and permission changes, and when re-enabled will be ingested under their respective feed, robots.txt, and permission policies. No full article text is displayed or stored long-term. Scores, summaries, and the escalation index are LLM-assisted analysis of public reporting; they are not official information and not a forecast.













