{
  "name": "Warconomy source-readable refresh harness",
  "asOf": "2026-06-05",
  "note": "The human-maintainer path to promote each source-gated candidate safely. Documentation only — no scraping, no automation, and no value is added unless directly verifiable from an authoritative source.",
  "doc": "docs/source-readable-refresh-harness.md",
  "count": 8,
  "byRisk": {
    "low": 3,
    "medium": 4,
    "high": 1
  },
  "candidates": [
    {
      "id": "crea-may-2026",
      "title": "CREA May 2026 Russian fossil-fuel export revenue",
      "dataNeedId": "crea-next-period",
      "targetMetric": "russia-fossil-export-revenue (EUR million/day, monthly)",
      "sourceOfRecord": "CREA — Monthly analysis of Russian fossil fuel exports and sanctions",
      "acceptableFormat": "Headline figure stated in the monthly analysis HTML page (directly readable text).",
      "blocker": "The May 2026 analysis is not published yet (CREA publishes ~6 weeks in arrears; April 2026 was published 2026-06-01).",
      "verificationSteps": [
        "Open the CREA monthly-analysis page for May 2026 once published.",
        "Read the headline 'EUR X mn per day' figure and the month-on-month % change verbatim.",
        "Confirm the reporting month is May 2026 and the figure is stated in text (not chart-only).",
        "Second-pass: re-read the figure to confirm transcription."
      ],
      "fieldsToPromote": [
        "value",
        "unit",
        "asOf",
        "periodLabel",
        "lastReviewed",
        "sourceId",
        "confidence",
        "dataMode",
        "note"
      ],
      "expectedChanges": "Append a new monthly observation (or update obs-sanctions-export-revenue's asOf/value/lastReviewed); add a provenance row; no new source (crea-russia-fossil-tracker exists).",
      "routeSurfaces": [
        "/sanctions/russia-energy-trade/economic-impact",
        "/data-coverage",
        "/freshness",
        "/data-needs"
      ],
      "testsRequired": [
        "obs value/asOf updated",
        "provenance covers the obs",
        "no-overclaim audit"
      ],
      "risk": "low"
    },
    {
      "id": "eu-21st-package",
      "title": "EU 21st sanctions package — shadow-fleet vessel count",
      "dataNeedId": "ofac-eu-vessel-refresh",
      "targetMetric": "eu-shadow-fleet-vessels (cumulative vessels)",
      "sourceOfRecord": "European Commission / Council of the EU sanctions-package press release",
      "acceptableFormat": "Cumulative total stated verbatim in the official press release HTML ('a total of N vessels ... now listed').",
      "blocker": "No 21st package is published yet; the 20th package (632 vessels, 23 April 2026) remains the latest.",
      "verificationSteps": [
        "Open the EU press release for the next package once adopted.",
        "Read the cumulative listed-vessel total and the +added/-delisted counts verbatim.",
        "Confirm scope matches the existing metric (port-access / maritime-service bans).",
        "Second-pass verification of the total."
      ],
      "fieldsToPromote": [
        "value",
        "unit",
        "asOf",
        "periodLabel",
        "lastReviewed",
        "sourceId",
        "confidence",
        "dataMode",
        "note"
      ],
      "expectedChanges": "Update obs-shadow-eu-vessels value/asOf/note + add a new eu-council source for the package; add provenance row.",
      "routeSurfaces": [
        "/sanctions/shadow-fleet-shipping-insurance/economic-impact",
        "/sanctions/dashboard",
        "/data-needs"
      ],
      "testsRequired": [
        "vessel count updated",
        "source + provenance added",
        "no-overclaim audit"
      ],
      "risk": "medium"
    },
    {
      "id": "ofac-vessel-count",
      "title": "OFAC cumulative shadow-fleet vessel count",
      "dataNeedId": "ofac-eu-vessel-refresh",
      "targetMetric": "ofac-designated-vessels (cumulative)",
      "sourceOfRecord": "OFAC SDN list / official Treasury action press releases",
      "acceptableFormat": "A cumulative total directly stated in an official Treasury release, OR a deterministic manual count from the official list documented step-by-step.",
      "blocker": "OFAC publishes per-action designations, not a cumulative shadow-fleet total; deriving one requires parsing the large binary SDN list (no scraping allowed).",
      "verificationSteps": [
        "Prefer an official Treasury statement that states a cumulative figure directly.",
        "If deriving manually, document the exact inclusion rule (program tag, vessel type) and de-duplication, with the list date.",
        "Do NOT scrape; a manual derivation must be reproducible and recorded."
      ],
      "fieldsToPromote": [
        "value",
        "unit",
        "asOf",
        "periodLabel",
        "lastReviewed",
        "sourceId",
        "confidence",
        "dataMode",
        "note"
      ],
      "expectedChanges": "Add/Update an OFAC cumulative observation only if a directly-stated or deterministically-derived count exists; add provenance.",
      "routeSurfaces": [
        "/sanctions/shadow-fleet-shipping-insurance/economic-impact",
        "/data-needs"
      ],
      "testsRequired": [
        "count basis documented",
        "provenance added",
        "no-overclaim audit"
      ],
      "risk": "high"
    },
    {
      "id": "sipri-nato-series",
      "title": "Longer SIPRI / NATO defense-spending series",
      "dataNeedId": "sipri-nato-deepening",
      "targetMetric": "country-military-expenditure / global-defense-spending (annual)",
      "sourceOfRecord": "SIPRI Military Expenditure Database / NATO defence-expenditure releases",
      "acceptableFormat": "Exact country-year values stated in the official press release HTML or a directly-readable table; same basis only.",
      "blocker": "Prior-year and additional-country values are largely in the SIPRI fact-sheet PDF; only the latest press release states a subset in text.",
      "verificationSteps": [
        "Identify the basis of each figure (current USD vs constant USD) from the source's own wording.",
        "Only combine values of the SAME basis and source family into one metric.",
        "Transcribe each country-year exactly; do not infer from charts.",
        "Second-pass verification."
      ],
      "fieldsToPromote": [
        "value",
        "unit",
        "asOf",
        "periodLabel",
        "lastReviewed",
        "sourceId",
        "confidence",
        "dataMode",
        "note",
        "basis (current/constant USD)"
      ],
      "expectedChanges": "Add country-military-expenditure observations (same basis as existing top-10) and/or a longer annual global series; add provenance; bump version (record-additive — provenance now per-version safe).",
      "routeSurfaces": [
        "/defense",
        "/defense/comparison",
        "/series",
        "/data-needs"
      ],
      "testsRequired": [
        "same-basis check",
        "provenance coverage",
        "version snapshot integrity"
      ],
      "risk": "low"
    },
    {
      "id": "pink-sheet",
      "title": "World Bank Pink Sheet — wheat / fertilizer / gas",
      "dataNeedId": "wheat-fertilizer-gas",
      "targetMetric": "commodity benchmark prices (monthly)",
      "sourceOfRecord": "World Bank 'Pink Sheet' (Commodity Markets monthly data)",
      "acceptableFormat": "Exact cell values read by a human from the official Pink Sheet XLSX/PDF (the page itself states only index % changes).",
      "blocker": "Exact USD/mt and USD/mmbtu levels are only in the downloadable XLSX/PDF, not in readable HTML; no scraping/parsing.",
      "verificationSteps": [
        "Open the official Pink Sheet monthly XLSX/PDF.",
        "Record the exact sheet name, row, column/cell, the displayed value, unit, and month.",
        "Note the price basis is a nominal commodity benchmark, not a conflict-causal figure.",
        "Second-pass verification of the cell."
      ],
      "fieldsToPromote": [
        "value",
        "unit",
        "asOf",
        "periodLabel",
        "lastReviewed",
        "sourceId",
        "confidence",
        "dataMode",
        "note",
        "sheet/cell reference"
      ],
      "expectedChanges": "Add commodity benchmark observations (or a series) with the Pink Sheet as source; add provenance; bump version.",
      "routeSurfaces": [
        "/commodities/dashboard",
        "/commodities/oil-benchmarks/economic-impact",
        "/data-needs"
      ],
      "testsRequired": [
        "unit/basis explicit",
        "provenance added",
        "no causal overclaim"
      ],
      "risk": "medium"
    },
    {
      "id": "suez-transit",
      "title": "Suez / Red Sea official transit metric",
      "dataNeedId": "suez-refresh",
      "targetMetric": "suez-transit-change / transit count / tonnage",
      "sourceOfRecord": "Suez Canal Authority navigation reports / UNCTAD maritime publications",
      "acceptableFormat": "Exact value from an official PDF table/page read by a human, OR a directly-stated figure in accessible HTML.",
      "blocker": "UNCTAD's review page returns HTTP 403; SCA statistics are downloadable PDF reports; no chart-only values.",
      "verificationSteps": [
        "Open the SCA navigation report PDF or a UNCTAD publication with a stated figure.",
        "Record the exact metric (transits / net tonnage / revenue — these are different), value, unit, and period.",
        "Do not conflate distinct metrics; pick one per observation.",
        "Second-pass verification."
      ],
      "fieldsToPromote": [
        "value",
        "unit",
        "asOf",
        "periodLabel",
        "lastReviewed",
        "sourceId",
        "confidence",
        "dataMode",
        "note",
        "metric kind (transits/tonnage/revenue)"
      ],
      "expectedChanges": "Update obs-redsea-suez / add a new transit observation; add provenance; bump version.",
      "routeSurfaces": [
        "/chokepoints/red-sea-shipping/economic-impact",
        "/chokepoints/dashboard",
        "/data-needs"
      ],
      "testsRequired": [
        "metric-kind explicit",
        "provenance added",
        "no-overclaim audit"
      ],
      "risk": "medium"
    },
    {
      "id": "grain-volumes",
      "title": "Black Sea grain export volumes",
      "dataNeedId": "grain-volumes",
      "targetMetric": "ukraine-grain-exports (million tonnes/month)",
      "sourceOfRecord": "UN / FAO / WTO or Ukraine official corridor statistics",
      "acceptableFormat": "An exact monthly tonnage stated in an official/intergovernmental table or directly-readable report.",
      "blocker": "The UN Black Sea Grain Initiative ended in 2023; current corridor tonnage is in dashboards/PDFs, not a directly-stated accessible figure.",
      "verificationSteps": [
        "Identify an official monthly tonnage series (UN/FAO/Ukraine).",
        "Record the exact value, unit (million tonnes), and month.",
        "Confirm it is a corridor/export volume, not a derived estimate from news.",
        "Second-pass verification."
      ],
      "fieldsToPromote": [
        "value",
        "unit",
        "asOf",
        "periodLabel",
        "lastReviewed",
        "sourceId",
        "confidence",
        "dataMode",
        "note"
      ],
      "expectedChanges": "Promote obs-ukr-grain from sample to live (value/asOf/source/confidence) or add a new series; add provenance; bump version.",
      "routeSurfaces": [
        "/conflicts/russia-ukraine/economic-impact",
        "/commodities/dashboard",
        "/data-needs"
      ],
      "testsRequired": [
        "sample→live transition recorded",
        "provenance added",
        "no causal overclaim"
      ],
      "risk": "medium"
    },
    {
      "id": "fao-next",
      "title": "FAO Food Price Index — next release after May 2026",
      "dataNeedId": null,
      "targetMetric": "fao-food-price-index + fao-food-subindex (monthly)",
      "sourceOfRecord": "FAO Food Price Index (monthly HTML release)",
      "acceptableFormat": "Headline FFPI and sub-index values stated verbatim on the FAO page (directly readable).",
      "blocker": "May 2026 is the latest published month; the June 2026 release is not out yet (FAO publishes early the following month).",
      "verificationSteps": [
        "Open the FAO Food Price Index page after the next monthly release.",
        "Read the FFPI value and each sub-index value (cereal, vegetable oil, dairy, meat, sugar) verbatim with the month.",
        "Confirm the index basis (2014–2016 = 100).",
        "Second-pass verification."
      ],
      "fieldsToPromote": [
        "value",
        "unit",
        "asOf",
        "periodLabel",
        "lastReviewed",
        "sourceId",
        "confidence",
        "dataMode",
        "note"
      ],
      "expectedChanges": "Update the FFPI + 5 sub-index observations' value/asOf/lastReviewed (or append a series point); add provenance; bump version.",
      "routeSurfaces": [
        "/commodities/food-prices/economic-impact",
        "/conflicts/russia-ukraine/economic-impact",
        "/data-coverage"
      ],
      "testsRequired": [
        "values/asOf updated",
        "index basis explicit",
        "no-overclaim audit"
      ],
      "risk": "low"
    }
  ]
}