Skip to main content

Scope

The country commodity-vulnerability score answers a narrow question: how exposed is one country to a supply interruption for one reviewed commodity? It is not a price forecast, a shortage prediction, or a measure of domestic demand. Methodology version: supply-vulnerability-v2.0.0. Each record includes its score components, source evidence, coverage state, freshness state, reasons, and methodology version. A missing measurement stays missing. The scorer never changes a missing value to zero.

Score

The score is an absolute 0–100 scale. The components are normalized to 0–1:
  • C: source concentration. This combines import-partner HHI with global mine and refining HHI.
  • T: maritime transit exposure. This combines all observed chokepoint shares without double-counting overlapping shares.
  • B: buffer vulnerability. A larger value means less available cover.
The C × T term makes concentration and transit risk compound. It does not let transit exposure alone outrank complete single-source concentration. When buffer data is unknown, the scorer removes the buffer weight and normalizes the other weights. Unknown is therefore neutral, not zero.

Source concentration

Import HHI is the sum of squared partner shares. A residual share bucket covers import value outside the returned top suppliers. The mineral-production source publishes standard HHI values on a 0–10,000 scale; the scorer divides those values by 10,000 before combining them with unit-scale import HHI. When mine and refining HHI are both available:
Refining has the larger production-stage weight because processing concentration can remain high even when mine supply is more diverse. If only one production stage exists, that stage is used. If only import or production concentration exists, the available leg is used and the coverage label says which leg is present.

Transit exposure and disruption sensitivity

For chokepoint shares t1...tn:
An active chokepoint disruption multiplies that chokepoint’s share by 1.35, capped at 1.0, before the union is calculated. Clearing the disruption restores the baseline score. The model uses the existing HS2 country-chokepoint exposure index and the current PortWatch/EIA flow-status record. A missing flow status is treated in one of two ways, depending on whether the route has a status source at all.
  • unknown — covered route, status row temporarily absent. For a route with positive transit share, the country-commodity score is null with state: insufficient_data and missing_transit_status until the evidence returns. This applies only to routes the flow-status source publishes.
  • uncovered — no flow-status source exists for the route. The exposure index tracks more chokepoints than the PortWatch/EIA flow record covers. Waiting for evidence that is never published would null every score on those corridors, so an uncovered route contributes its transit share at the baseline multiplier and the record carries a transit_status_uncovered coverage label. The score is real; the absence of live disruption data for that route is disclosed rather than hidden.
An uncovered route can therefore never be shown as disrupted: its share is always counted at baseline. Zero-share routes remain visible for reconciliation, but their missing or stale flow status does not affect score eligibility or freshness.

Buffers

Known buffers are converted to vulnerability as follows: An SPR policy with capacity but no consumption denominator is evidence, but it is not a numeric buffer. The record remains buffer_unknown.

Bands and data states

The band is absolute. It is not a percentile rank. Freshness budgets are 45 days for bilateral trade, 2 days for chokepoint exposure, 400 days for mineral production, 3 days for flow status and gas storage, 120 days for food stocks, 90 days for fuel stocks, and 400 days for reviewed SPR policy. A stale input does not become fresh because the derived job ran.

Reviewed commodity mappings

The versioned registry uses UN Comtrade HS 2022 (H6) headings. The HS2 column selects the existing transit-exposure sector. The JSON registry is the executable source of truth and carries a rationale, caveat, and source URL for every row.

Provenance

Each score component includes the source key, source name, source URL, value, source year when available, fetch time, stale flag, and a short detail. The source families are: Source licenses and attribution requirements are listed in Source Attribution. The mineral snapshot preserves provider identity per mine or refining stage. USGS stages can cross the programmatic redistribution boundary. The canonical cohort retains BGS stages with the required BGS credit and link for internal audit. Every direct RPC and MCP response fails closed, including requests that replay a freely mintable anonymous browser-session token: the affected score and BGS-derived values are absent, the record is insufficient_data, and redistribution_blocked is included in its reasons. This policy never changes an unavailable value to zero.

Publication and freshness

The Railway seed-bundle-static-ref-heavy service starts daily at 04:00 UTC and runs the Supply-Vulnerability section after its mirrored inputs. The section reads upstream Redis envelopes, computes one in-memory snapshot, and projects both indexes in the same run. The canonical keys are compact manifests:
  • supply-chain:vulnerability:v1: country identifiers plus the bounded global ranking index
  • supply-chain:chokepoint-dependencies:v1: chokepoint identifiers
Full country and chokepoint records are stored in deterministic per-entity shards. Publication alternates between two slots: all inactive-slot shards and both public manifests are written first, then one authoritative cohort descriptor and the durable activation marker switch atomically. Every reader uses that shared descriptor. The descriptor and every shard carry the current redistribution-policy version. A reader rejects an older unmarked cohort as unavailable, so an API deployment cannot expose pre-policy persisted evidence while the matching publisher is still pending. A failed country or inverse manifest write therefore leaves the prior complete compatible cohort visible, and the next run cannot overwrite a slot that a reader still references. This keeps each Redis value and pipeline request below its publication limit and prevents a partial shard write from replacing the last complete cohort. Manifests and the cohort descriptor have a 72-hour TTL; shards have a six-day TTL so both bounded slots survive a normal daily rotation. Publication must meet the configured country and chokepoint floors. It also measures the commodity IDs with source evidence, the HS4 headings seen in bilateral inputs, the HS2 sectors seen in transit inputs, and the countries that contain every reviewed mapping row; registry constants do not count as observed coverage. Those measurements are persisted in seed metadata and enforced by health. Health probes the authoritative cohort descriptor used by every RPC plus the inverse manifest and both seed metadata keys. Before the first complete cohort, the probes stay pending; after atomic activation, missing, stale, or partial output is strict. The inverse index is built in the same pass as the country index, so each dependency carries the same score, state, transit share, and method version as its country record. The three audience-dependent RPCs are no-store; a browser cache cannot reuse dashboard evidence for a later API-key response at the same URL. The public RPCs are GetCountryVulnerabilities, GetChokepointDependencies, and ListVulnerabilityRankings. The MCP tools are get_supply_vulnerabilities and get_chokepoint_dependencies.

Reproducible hand checks

These are synthetic, fixed inputs. They verify expected direction and arithmetic; they are not claims about current live country conditions. The automated hand-check test calculates these values through the production scorer. Other tests prove component monotonicity, unknown-buffer neutrality, disruption restore behavior, absolute band boundaries, and country/inverse-index reconciliation.

Changelog

  • supply-vulnerability-v2.0.0 — First published country commodity-vulnerability method. Adds refining-dominant production HHI, concentration-transit compounding, neutral unknown buffers, disruption sensitivity, explicit coverage and freshness states, and a single-pass chokepoint inverse index.