{
  "name": "Warconomy QA report",
  "asOf": "2026-06-05",
  "note": "Static QA report. Warconomy is fully prerendered; these are build-time invariants, not runtime monitoring. There is no uptime, latency, or SLA claim. The authoritative, per-check results are on /data-audit and in the local `npm run audit:data` suite.",
  "page": "https://warconomy.com/qa",
  "auditPage": "https://warconomy.com/data-audit",
  "auditJson": "https://warconomy.com/data-audit/data.json",
  "summary": {
    "sections": 9,
    "htmlRoutes": 160,
    "machineRoutes": 186,
    "schemas": 15,
    "distributions": 25
  },
  "sections": [
    {
      "id": "routes",
      "title": "Routes",
      "basis": "Every cataloged HTML page and machine endpoint resolves to a real prerendered file (checked in audit:data).",
      "detail": "160 HTML pages and 186 machine endpoints, plus dynamic patterns.",
      "representative": [
        "/economic-impact",
        "/topics",
        "/sources",
        "/datasets/conflict-economic-impact"
      ]
    },
    {
      "id": "data-exports",
      "title": "Data exports",
      "basis": "data.json, provenance, and the CSV/JSONL distributions build deterministically from the fixtures.",
      "detail": "59 observations, 34 sources, 38 facts, 8 series.",
      "representative": [
        "/datasets/conflict-economic-impact/data.json",
        "/datasets/conflict-economic-impact/provenance.json"
      ]
    },
    {
      "id": "schemas",
      "title": "Schemas / data contract",
      "basis": "Conservative draft-07 JSON Schemas pin the required stable fields; real records validate against them.",
      "detail": "6 published schemas + an OpenAPI 3.1 static contract.",
      "representative": [
        "/datasets/conflict-economic-impact/schema.json",
        "/api/openapi.json"
      ]
    },
    {
      "id": "graph",
      "title": "Citation graph",
      "basis": "Every edge connects two existing nodes (no dangling edges); totals match the frozen snapshot header.",
      "detail": "234 nodes / 431 edges.",
      "representative": [
        "/graph",
        "/datasets/conflict-economic-impact/graph.json"
      ]
    },
    {
      "id": "source-links",
      "title": "Source links",
      "basis": "Every quantitative claim resolves to a real source with a deep link and accessed date.",
      "detail": "24 sources of record; 21 high-readiness.",
      "representative": [
        "/sources",
        "/source-quality",
        "/source-health"
      ]
    },
    {
      "id": "sample-labels",
      "title": "Sample labelling",
      "basis": "Every sample observation is labeled sample in the UI and the data; never presented as current.",
      "detail": "5 sample rows, all labeled.",
      "representative": [
        "/data-coverage",
        "/indicators"
      ]
    },
    {
      "id": "review",
      "title": "Review status",
      "basis": "Freshness/review is computed deterministically against site.dataAsOf (no runtime clock).",
      "detail": "54 live observations under review; 20 high-priority.",
      "representative": [
        "/data-review",
        "/review-actions"
      ]
    },
    {
      "id": "structured-data",
      "title": "Structured data",
      "basis": "JSON-LD mirrors visible content; FAQ structured data only where a visible FAQ is rendered.",
      "detail": "Dataset, CollectionPage, ItemList, DefinedTermSet, and WebSite SearchAction in use.",
      "representative": [
        "/structured-data",
        "/faq"
      ]
    },
    {
      "id": "sitemaps",
      "title": "Sitemaps & crawler guide",
      "basis": "Pages and data endpoints appear in the sitemaps; llms.txt lists the major entry points.",
      "detail": "sitemap.xml, sitemap-pages.xml, sitemap-data.xml, llms.txt.",
      "representative": [
        "/sitemap.xml",
        "/sitemap-data.xml",
        "/llms.txt"
      ]
    }
  ],
  "caveats": [
    "Not runtime monitoring; no uptime/latency/SLA claim.",
    "Per-check pass/fail lives on /data-audit and in `npm run audit:data`.",
    "Partial coverage; not real-time."
  ]
}