Warning of War
LIVE --:-- UTC

METHODOLOGY · REFERENCE DOCUMENT

How each brief is generated, scored, and published.

A full reference for the pipeline behind every score on this site — from RSS ingest to clinical sector decomposition to the final composite. Written so risk managers, journalists, AdSense reviewers, and AI agents can understand exactly what each number means, what it does not mean, and where the constraints lie.

  • Last reviewed:
  • Refresh cadence: every 3 hours (UTC, on the even hour)
  • Model: Anthropic Claude Sonnet 4.6
  • License: CC BY 4.0

1. Purpose & intended audience

Warning of War is an open-access geopolitical & supply-chain risk monitor for corporate risk teams, institutional investors, and maritime logistics operators. The product is not a war-news feed; it is a clinical, brand-safe second opinion on cross-region geopolitical pressure decomposed into four corporate-relevant sector axes:

  • Maritime Logistics & Infrastructure — shipping lanes, port operations, freight insurance premiums, vessel technical service and marine-maintenance networks, container traffic, choke-point access.
  • Energy Markets — oil production, LNG terminals, pipelines, refineries, electricity grid, and energy price volatility.
  • Commodities & Raw Materials — export bans, mining operations, agricultural yields, metals, rare earths, critical minerals, fertilizer.
  • Macroeconomic Impact — currency stability, sanctions and counter-sanctions, FDI shifts, sovereign credit, capital controls, trade balance.

It is explicitly not designed to count casualties, narrate humanitarian outcomes, or assess the morality of any actor. Where headlines describe kinetic activity, the model is required to translate that into operational, commercial, or financial impact — not human consequence.

2. The four-step pipeline

Every three hours a single GitHub Actions workflow runs end-to-end. Each step is small, auditable, and documented in source code at github.com/vency964/warningofwar.

2.1 Ingest

The Node.js scorer pulls a curated list of RSS feeds per region — biased toward business desks (Reuters, BBC Business), commodity trackers (S&P Global, OPEC), sanctions feeds (OFAC, EU Sanctions Map), shipping authorities (Lloyd’s List, Suez Canal Authority, Panama Canal Authority, MPA Singapore), and region-specific Google News queries scoped to economic / supply-chain / sanctions terminology. A separate global maritime pool feeds the choke-point pass.

Before any model call, headlines pass through a regex de-noiser that drops sports leagues, entertainment, and lifestyle items that frequently slip into general-news RSS feeds. Duplicate URLs are removed; headlines older than seven days are excluded; the most-recent twenty-five per region are retained.

2.2 Decompose

For each region the scorer issues one Anthropic Messages API call with a strict tool-use schema. The system prompt instructs the model to take the role of a Corporate Geopolitical & Supply Chain Risk Analyst, to apply categorical brand-safety rules (see section 4), and to decompose the supplied headlines into the four sector axes plus an executive brief, long analysis, sector-specific impact bullets, a forward outlook, named disruption events, and per-headline business-impact briefs.

The tool schema is strongly typed: every required field has a documented JSON-schema constraint, the four sector scores are integers in [1, 10], and the status of each disruption event is a closed enum (active / rising / stable / easing). Output that does not conform is rejected before it reaches the data layer.

2.3 Score

The four 1–10 sector axes are combined into the 0–100 composite using fixed weights chosen to over-weight the two sectors with the most direct physical-asset exposure for the reader audience:

composite = maritime × 3
            + energy × 3
            + commodities × 2
            + macro × 2

max = 30 + 30 + 20 + 20 = 100

The composite drives the 0–100 gauge on the homepage and each region brief, and is the value snapshotted to data/history.json on every cycle (30-day rolling window).

Threat bands on the composite:

CompositeBandMeaning
0–19LowNo significant supply-chain or geopolitical indicators.
20–39GuardedMild stress; isolated indicators with limited operational reach.
40–59ElevatedNotable sector stress; ongoing pressure on prices or operations.
60–79HighSignificant cross-sector disruption; material impact to lanes or prices.
80–100CriticalMajor systemic disruption with cross-border spillover.

2.4 Publish

A second Node.js step prerenders the entire site as static HTML — homepage, seven region briefs, four industry hubs (maritime, energy, commodities, macro) with vertical detail pages, nine choke-point detail pages, sitemap, and Open Graph imagery — and commits everything back to main. Cloudflare Pages auto-deploys on each commit. JSON feeds carry a five-minute max-age at the edge so updates reach visitors within minutes of the cron firing.

3. The four sector axes — what counts, what doesn’t

Each axis has explicit inclusion rules that the model is asked to apply consistently. The goal is that two analysts looking at the same headline pool would arrive at similar scores within ±1 point on each axis.

3.1 Maritime Logistics & Infrastructure

Counts: port closures and operational delays, choke-point access restrictions, vessel rerouting around capes, freight insurance / war-risk premium increases, vessel attacks affecting shipping decisions, container terminal disruption, marine-maintenance and bunkering network impacts, AIS-spoofing or sanctions-evasion enforcement actions.

Does not count: generic naval exercises with no commercial transit impact, single-vessel incidents without route implications.

3.2 Energy Markets

Counts: oil-production outages, LNG export terminal incidents, pipeline shutdowns or sabotage, refinery fires or strikes, OPEC+ output decisions, electricity-grid attacks or shortages, sanction tranches against producers, hub-price moves attributable to a specific geopolitical event.

Does not count: routine seasonal price moves, demand-only news with no supply driver, retail fuel-price noise.

3.3 Commodities & Raw Materials

Counts: export bans, mine closures (artisanal or industrial), grain-corridor disruption, fertilizer sanctions, critical-minerals export controls, port congestion affecting bulk shipments, agricultural-yield shocks tied to climate or conflict.

Does not count: pure demand-side price moves, futures-market technicals, retail consumer-goods inflation.

3.4 Macroeconomic Impact

Counts: currency interventions, sovereign-credit downgrades or watch actions, sanctions tranches, FDI freezes or expulsions, capital-control announcements, trade-balance shocks attributable to geopolitical events, central-bank emergency actions.

Does not count: ordinary monetary-policy cycles, election-day news without policy substance, equity-market commentary.

4. Brand-safety & YMYL compliance

The product serves a B2B audience and runs Google AdSense as its monetization layer. Both audiences require strict editorial discipline, particularly around YMYL (Your Money or Your Life) topics that intersect with geopolitical risk. The system prompt enforces four categorical rules:

  1. No casualty references. The words killed, wounded, dead, casualty, victims, humanitarian, atrocity, massacre, and horror are categorically excluded from output.
  2. No alarm language. Emotionally charged or sensationalist phrasing is replaced with clinical, financial vocabulary. The tone target is the kind of risk note an investment-grade research desk would publish.
  3. Reframe kinetic events as operational impact. A missile strike on a chemical plant becomes "industrial disruption to chemical-sector capacity"; a drone attack on a port becomes "operational disruption to container throughput." The model is instructed to describe assets, lanes, prices, supply, and capital flows — never human consequence.
  4. Soft fallback when there is no economic signal. If a region’s headline pool contains only humanitarian content with no commercial signal, the model returns the prior cycle’s scores and a one-line "limited new economic signal this cycle" note. We prefer this honest carry-forward to fabrication. Such cycles are flagged with a carryForward: true field in the JSON.

These rules are enforced at three levels: in the system prompt, in the per-field schema descriptions, and in the post-merge consistency checks before the JSON is written.

5. Maritime risk decomposition

The maritime industry receives two layers of attention beyond its 1–10 weighting inside the four-sector regional model. Both produce dedicated, separately scored data feeds and dedicated pages.

5.1 Choke-point assessment

Nine global maritime choke points are assessed in a single bundled Anthropic call per cycle. They were selected for their disproportionate share of global commercial transit, their cross-border sensitivity, and their relevance to enterprise supply chains:

Each choke point is scored 1–10 with a closed status enum (normal / elevated / disrupted), a clinical summary, up to three named current events, and a 30-day operational outlook. Sources are documented per choke point and link to operator and regulator authorities (canal authorities, maritime agencies, EIA, IMO, UNCTAD).

5.2 Maritime industry hub — 5 axes, 5 verticals

A separate, single Anthropic call per cycle scores the global maritime industry from a dedicated headline pool (industry desks, maritime regulators, choke-point queries, vertical-specific keyword searches, commercial bunker / insurance feeds). The output drives the Maritime Hub and five vertical detail pages.

The five commercial axes (each scored 1–10):

  • Choke Point Stress — physical access to major waterways; rerouting cost, transit delay, war-risk premiums.
  • Port Congestion — major-port operational delays, berth-wait times, labour actions, terminal-automation issues, weather impacts.
  • Sanctions & Compliance — OFAC / EU / UN / OFSI actions on flags, vessels, and operators; oil-price-cap enforcement; shadow-fleet activity; flag-state-of-convenience scrutiny.
  • Bunker Volatility — VLSFO / MGO / HFO / LNG bunker price moves, supply tightness, IMO 2020/2030 fuel-switch dynamics, alternative-fuel adoption.
  • Crew & Labour — seafarer availability, ITF / MLC compliance, port-state-control campaigns, crew-change frictions, training/certification bottlenecks.

The five industry verticals (each scored 1–10):

  • Tanker Markets — crude, product, chemical, LNG/LPG tankers; VLCC / Suezmax / Aframax dynamics; shadow-fleet enforcement.
  • Dry Bulk — Capesize / Panamax / Supramax / Handysize; iron ore, coal, grain, bauxite; sensitive to Chinese steel demand and Panama / Suez transit.
  • Container Shipping — boxship operators, alliances, spot & contract rates, schedule reliability, transshipment hubs, port congestion.
  • Offshore & Energy Services — OSV / jackup / semi-sub / FPSO; offshore-wind installation vessels; tied to upstream capex cycles.
  • Yacht & Leisure — superyacht / megayacht operations, cruise industry, marina infrastructure, refit yards, classification & PSC for passenger and large-yacht tonnage.

Composite formula: the maritime composite (0–100) is a weighted blend of the five axes, with the two most operationally consequential axes (choke-point stress and the operational axes) carrying the most weight. The 0–10 vertical scores have no formal weighting into the composite — they are independent commercial indicators of each segment.

maritime_composite = chokePointStress    × 2.5
                   + portCongestion      × 2.0
                   + sanctionsCompliance × 2.0
                   + bunkerVolatility    × 1.5
                   + crewLabor           × 2.0

max = 25 + 20 + 20 + 15 + 20 = 100

Additional feed sources beyond the regional feed pool, grouped by tier:

  • Industry news: Splash247, gCaptain, Maritime Executive, MarineLink, Hellenic Shipping News, Seatrade Maritime, Riviera Maritime Media, Lloyd’s List.
  • Regulatory & authority: IMO News, US Coast Guard MSIB, EMSA, MPA Singapore, ICC International Maritime Bureau (piracy), BIMCO.
  • Choke-point & regional: dedicated queries for Strait of Hormuz, Red Sea / Bab-el-Mandeb, Suez Canal, Strait of Malacca, Panama Canal, Taiwan Strait — each scoped to shipping / tanker / insurance / transit terminology.
  • Vertical-specific: tanker (VLCC, Suezmax, shadow fleet); dry-bulk (Capesize, Baltic Dry Index); container (spot rates, schedule reliability); offshore (rig dayrates, FPSO awards); yacht & leisure (superyacht regulation, cruise industry).
  • Commercial signals: bunker fuel (VLSFO / MGO / HFO / LNG bunkering), marine insurance (war-risk, P&I, Lloyd’s market).

5.3 Energy markets hub — 5 axes, 5 verticals

A separate, single Anthropic call per cycle scores the global energy industry from a dedicated energy-only headline pool. Output drives the Energy Hub and five vertical detail pages.

The five axes (each scored 1–10): Crude Oil Supply (OPEC+ posture, sanctioned-flow visibility, choke-point transit, pipeline integrity); Natural Gas & LNG (pipeline flows, LNG cargoes, TTF / JKM / Henry Hub price action); Refining & Products (refinery runs, crack spreads, product trade flows); Power & Grid (generation mix, grid reliability, capacity-market signals); Transition & Policy (renewables auctions, EV adoption, carbon markets, energy-sanctions tranches).

The five verticals: Upstream Oil & Gas, LNG & Natural Gas, Refining & Products, Power & Utilities, Renewables & Transition.

energy_composite = crudeOilSupply   × 2.5
                 + naturalGasLNG    × 2.0
                 + refiningProducts × 2.0
                 + powerGrid        × 1.5
                 + transitionPolicy × 2.0
                 = 0–100

5.4 Commodities & raw materials hub — 5 axes, 5 verticals

A separate, single Anthropic call per cycle scores the global commodities complex from a dedicated headline pool (LME, USDA, mining trade press, Argus / Fastmarkets, OFAC commodity tranches). Output drives the Commodities Hub and five vertical detail pages.

The five axes: Critical Minerals & Metals (REE, lithium, cobalt, nickel; Chinese export controls; EV / defence supply-chain exposure); Agricultural Markets (grains, softs; WASDE, weather, Black Sea corridor); Base & Industrial Metals (iron ore, aluminum, copper, zinc; LME / SHFE benchmarks; smelter availability); Export Controls & Sanctions (OFAC / EU / OFSI tranches affecting commodity flows); Logistics & Throughput (bulk shipping availability, port-of-loading congestion, choke-point transit for commodities).

The five verticals: Critical Minerals & Rare Earths, Agricultural Grains, Agricultural Softs, Base & Industrial Metals, Fertilizers.

commodities_composite = criticalMineralsMetals  × 2.5
                      + agriculturalMarkets     × 2.0
                      + baseIndustrialMetals    × 2.0
                      + exportControlsSanctions × 1.5
                      + logisticsThroughput     × 2.0
                      = 0–100

5.5 Macroeconomic hub — 5 axes, 5 verticals

A separate, single Anthropic call per cycle scores global macroeconomic and sovereign risk from a dedicated headline pool (IMF, World Bank, BIS, central banks, rating agencies, OFAC / EU / OFSI tranches). Output drives the Macro Hub and five vertical detail pages.

The five axes: Sovereign Credit & Default (ratings, CDS spreads, default proximity, IMF programs); FX & Currency (currency crises, interventions, capital controls); Sanctions & Capital Flows (OFAC / EU / OFSI tranches, asset freezes, FDI freezes, secondary sanctions); Central Bank Policy (G10 + EM policy paths, balance sheets, forward guidance, CBDC activity); Trade & Balance of Payments (tariffs, export controls, FDI screening regimes, BoP shocks).

The five verticals: Sovereign Credit & Debt, FX & Currency Markets, Sanctions & Capital Flows, Central Banks & Policy, Trade Policy & Tariffs.

macro_composite = sovereignCreditDefault × 2.0
              + fxCurrency             × 2.0
              + sanctionsCapitalFlows  × 2.5
              + centralBankPolicy      × 1.5
              + tradeBalancePayments   × 2.0
              = 0–100

6. Sources

The scorer is biased toward business-grade and authoritative sources. The full per-region feed list is published transparently on each region detail page under "Sources Analysed." Primary external references include:

News-feed selection is rebalanced ad hoc as the threat landscape shifts; the canonical list lives in backend/sources.js in the open-source repository.

7. Technology stack

The site is intentionally simple — no framework, no build step, no JavaScript bundler — so the entire pipeline is auditable end-to-end.

  • Scorer: Node.js 20+ (backend/scorer.js), rss-parser for ingest, native fetch for the Anthropic API.
  • Model: Anthropic Claude Sonnet 4.6 via the Messages API with tool_choice forced to a strongly-typed schema.
  • Prerender: Hand-written Node.js (backend/build-html.js) mutates HTML in place; per-page builders for region, sector, choke-point, and methodology pages.
  • Hosting: Cloudflare Pages, deploying from the main branch on every push. JSON feeds are served from edge with a five-minute max-age (_headers).
  • Scheduling: GitHub Actions cron 0 */2 * * * (every 3 hours, on the hour, UTC); also manually triggerable.
  • Front-end JS: Single script.js (~600 lines) shared across all pages; no dependencies; uses native fetch and IntersectionObserver.
  • Privacy: Google Consent Mode v2 with denied defaults; visitor consent unlocks Analytics / AdSense personalization. Detailed in the privacy & cookie policy.

8. Limitations & known biases

This is a research and intelligence tool, not an oracle. Honest limitations include:

  • Headline-pool bias. The model only sees what the configured RSS feeds return. A topic that breaks slowly, or in non-English sources outside the configured list, may register late or not at all.
  • Sample size. ~25 headlines per region per cycle is a small window. We compensate by re-running every three hours, but a sudden, contained event may be missed in any single cycle.
  • Model variability. Two runs over identical inputs can yield ±1-point sector differences. The composite formula damps this somewhat but does not eliminate it.
  • Sector taxonomy. Four sectors is a deliberate simplification. Important risks — cyber, climate-driven supply shocks, pandemic — sit at the edge of this taxonomy. We surface them via the macro axis when they have first-order economic effect.
  • No primary research. Warning of War does not interview sources, dispatch correspondents, or verify claims against operator data. It distills public reporting; primary verification is the reader’s responsibility.
  • Reactive, not predictive. The forward outlook is a probabilistic extrapolation conditioned on the current cycle’s signal. It is not a forecast in any statistical sense.

Where confidence is below 0.5 on a region’s self-reported confidence score, treat that cycle’s output as directional only.

9. Frequently asked questions

Q01What is Warning of War, in one sentence?

An open-access, AI-driven monitor that re-reads global open-source news every three hours and decomposes geopolitical pressure into four corporate-relevant sector axes (maritime logistics, energy markets, commodities & raw materials, macroeconomic impact) for seven world regions plus nine global maritime choke points.

Q02Who is this dashboard for?

Enterprise risk teams, supply-chain and logistics operators, institutional investors, and analysts who need a clinical second opinion on cross-region geopolitical pressure. It is explicitly not designed as a casualty or war-news feed — coverage is framed around operational, commercial, and financial impact.

Q03How often does it update, and what is the lag?

A GitHub Actions cron runs at the top of every even UTC hour (00, 02, 04, 06, …). End-to-end latency from cron fire to deployed HTML is typically 60–120 seconds. The JSON feeds are served from Cloudflare's edge with a five-minute max-age, so users see fresh numbers within five minutes of each scorer run.

Q04Which AI model generates the briefs?

Anthropic's Claude Sonnet 4.6, called via the official Anthropic Messages API with strict tool-use schemas. The model is operated under a system prompt that enforces clinical, brand-safe output (no casualty references, no humanitarian framing, no alarm language).

Q05How are the four sector axes scored?

Each axis is rated 1–10 by the model per region, with explicit calibration anchors: 1–2 negligible, 3–4 low, 5–6 elevated, 7–8 high, 9–10 critical. The composite 0–100 score is a weighted blend (maritime ×3, energy ×3, commodities ×2, macro ×2, summing to 100) chosen to over-weight the two sectors with the most direct physical-asset exposure for our reader audience.

Q06How are the nine maritime choke points scored?

One bundled Anthropic call per cycle assesses all nine choke points (Hormuz, Bab-el-Mandeb, Suez, Malacca, Taiwan Strait, Panama, Bosphorus/Dardanelles, Danish Straits, Dover) against a global maritime-headline pool. Output is a 1–10 risk score and a normal / elevated / disrupted status, with named current events and a 30-day operational outlook for each choke point.

Q07What are the industry hubs?

Four dedicated industry hubs each decompose their sector into 5 commercial axes and 5 verticals from an industry-specific RSS pool, scored by a dedicated bundled Anthropic call per cycle. The hubs live at /maritime/, /energy/, /commodities/, and /macro/, and each persists to its own JSON file (data/maritime.json, data/energy.json, data/commodities.json, data/macro.json). The four sector axes also appear as a 1–10 heatmap on every region brief and on the homepage — that is the cross-region rollup, computed deterministically from the regional outputs.

Q08How many Anthropic calls does one scoring cycle make?

Twelve per cycle: 7 region calls (one per world region), 1 bundled choke-point call (all 9 choke points at once), and 4 bundled industry-hub calls (maritime, energy, commodities, macro — each scoring its 5 axes and 5 verticals from its own headline pool).

Q09What happens when there is no economic signal for a region in a given cycle?

The system prompt instructs the model to invoke a soft-fallback rule: it returns the prior cycle's scores with an "executive brief" note that no new economic signal was visible. We prefer this honest carry-forward to having the model fabricate disruption events. Such cycles are flagged with a carryForward boolean in the JSON.

Q10Is this investment advice?

No. Warning of War provides informational risk intelligence distilled from public open-source news by a large language model. Output is probabilistic, biased by the headlines selected, and should never be the sole basis for any commercial, investment, or operational decision. Always consult primary sources and qualified analysts.

Q11Is the data free to use? Can I cite it?

Yes. All JSON feeds and HTML are released under the Creative Commons Attribution 4.0 International licence (CC BY 4.0). Attribution to "Warning of War (warningofwar.com)" is appreciated. A suggested citation format is published at the bottom of this page.

Q12How do you handle PII or personal data?

The scorer reads only publicly available news headlines and summaries. No reader-level personal data is collected by the scorer pipeline. Analytics (Google Analytics) and advertising (Google AdSense) are subject to Google Consent Mode v2 — defaults are denied until the visitor explicitly opts in. See the privacy and cookie policy for details.

10. Methodology version & changelog

This is methodology v2.3 (the "industry hubs" rev — /sectors/ retired).

  • v2.3 — 2026-05-19. Retired the /sectors/ subtree (hub + 4 per-sector detail pages). Cross-region rollups are still rendered on the homepage and on every region brief as 1–10 axis bars, but no longer have their own URL space. The four sector axes are now best explored via the four dedicated industry hubs at /maritime/, /energy/, /commodities/, /macro/, each with its own 5-axis + 5-vertical decomposition. data/sectors.json is no longer published. Legacy /sectors/<id>/ URLs 301-redirect to the matching industry hub.
  • v2.2 — 2026-05-19. Added three more industry hubs: Energy, Commodities, Macro. Cycle moved from 9 to 12 sequential Anthropic calls. Watchdog raised 12 → 16 min, workflow timeout-minutes raised 15 → 20.
  • v2.1 — 2026-05-18. Added the dedicated Maritime Hub and five vertical detail pages (tanker, dry-bulk, container, offshore, yacht & leisure). New 5-axis maritime decomposition with its own 0–100 composite and dedicated data/maritime.json feed.
  • v2.0 — 2026-05-18. Full rebuild around the four sector axes (maritime, energy, commodities, macro). Composite 0–100 introduced as a weighted blend. Strict brand-safety constraint introduced. Choke-point hub and sector dashboard added. Editorial voice moved to clinical / financial.
  • v1.x — 2024-2026. Single 0–100 "probability of armed conflict" score per region, derived from a single Anthropic call per region. Retained the 7-region taxonomy. Source of the JSON schema that history.json is built on.

11. Citation

If you cite Warning of War in research, journalism, or commercial reporting, the suggested format is:

Warning of War. (2026). “Geopolitical & Supply Chain Risk Intelligence.”
  Retrieved 2026-06-05 from https://warningofwar.com/

All data and HTML are released under Creative Commons Attribution 4.0 International (CC BY 4.0). Direct links to the canonical JSON feeds:

12. Contact & corrections

For corrections, methodology questions, partnership enquiries, or licensing of derivative analytics, the canonical contact channel is GitHub Issues on the open-source repository:

For privacy and data-protection requests, see the privacy & cookie policy.

Important: Warning of War provides AI-generated risk intelligence from public open-source data. Output is informational only — not investment advice, official assessment, or operational guidance. Always consult primary sources and qualified analysts before any commercial decision.