{
  "name": "Warconomy data audit",
  "asOf": "2026-06-05",
  "page": "https://warconomy.com/data-audit",
  "basis": "2026-06-05",
  "note": "Static build-time checks over the committed fixtures — not runtime monitoring, not scheduled. The same invariants run in `npm run audit:data`.",
  "totalChecks": 41,
  "passed": 41,
  "failed": 0,
  "groups": [
    {
      "id": "source-references",
      "label": "Source references",
      "description": "Every quantitative claim links to a resolvable source.",
      "checks": [
        {
          "name": "every observation has a sourceId",
          "pass": true
        },
        {
          "name": "every observation sourceId resolves",
          "pass": true
        },
        {
          "name": "every fact has a resolvable sourceId",
          "pass": true
        }
      ]
    },
    {
      "id": "observation-integrity",
      "label": "Observation integrity",
      "description": "Observations carry a data mode, as-of date, and confidence.",
      "checks": [
        {
          "name": "dataMode is live or sample",
          "pass": true
        },
        {
          "name": "every observation has an asOf date",
          "pass": true
        },
        {
          "name": "every observation has a confidence",
          "pass": true
        }
      ]
    },
    {
      "id": "graph-integrity",
      "label": "Graph integrity",
      "description": "The citation graph has no dangling edges and a consistent summary.",
      "checks": [
        {
          "name": "no dangling edges",
          "pass": true
        },
        {
          "name": "nodeCount matches nodes",
          "pass": true
        },
        {
          "name": "edgeCount matches edges",
          "pass": true
        }
      ]
    },
    {
      "id": "route-integrity",
      "label": "Route / path integrity",
      "description": "Subject pages resolve for live indicators.",
      "checks": [
        {
          "name": "live observations resolve to a page",
          "pass": true
        }
      ]
    },
    {
      "id": "distribution-integrity",
      "label": "Dataset distribution integrity",
      "description": "CSV/JSONL distributions are enumerated with format and path.",
      "checks": [
        {
          "name": "at least 25 distributions",
          "pass": true
        },
        {
          "name": "each distribution has a format and path",
          "pass": true
        }
      ]
    },
    {
      "id": "snapshot-integrity",
      "label": "Version snapshot integrity",
      "description": "Frozen payloads exist for materialized versions and the registry is consistent.",
      "checks": [
        {
          "name": "each frozen version has a committed payload",
          "pass": true
        },
        {
          "name": "each frozen version has a manifest fingerprint",
          "pass": true
        },
        {
          "name": "current version is materialized",
          "pass": true
        }
      ]
    },
    {
      "id": "structured-data-visibility",
      "label": "JSON-LD / FAQ visibility",
      "description": "FAQ JSON-LD only where a visible FAQ is rendered.",
      "checks": [
        {
          "name": "every FAQ path has visible questions",
          "pass": true
        }
      ]
    },
    {
      "id": "promotion-log",
      "label": "Promotion log integrity",
      "description": "Promoted entries are sourced and link real observations; dry-run/blocked entries carry no value; the log routes and exports are cataloged.",
      "checks": [
        {
          "name": "every promoted entry has a source id",
          "pass": true
        },
        {
          "name": "no dry-run/blocked entry carries a promoted value or observation",
          "pass": true
        },
        {
          "name": "promoted entries link to real observation ids",
          "pass": true
        },
        {
          "name": "every blocked entry states a blocker reason",
          "pass": true
        },
        {
          "name": "the promotion-log page + machine exports are cataloged",
          "pass": true
        }
      ]
    },
    {
      "id": "refresh-harness",
      "label": "Source-readable refresh harness",
      "description": "Every source-gated candidate has a documented gate and route checklist, the manual workflows define their required fields, and no blocked candidate is marked live.",
      "checks": [
        {
          "name": "every refresh candidate has a source of record, blocker, and verification steps",
          "pass": true
        },
        {
          "name": "every candidate has a route/update checklist + fields to promote",
          "pass": true
        },
        {
          "name": "every source workflow defines accepted formats, required fields, and rules",
          "pass": true
        },
        {
          "name": "the manual-transcription + promotion checklists are populated",
          "pass": true
        },
        {
          "name": "every candidate linked to a data need resolves to a real one",
          "pass": true
        }
      ]
    },
    {
      "id": "coverage-depth",
      "label": "Coverage-depth integrity",
      "description": "Live values are sourced, every coverage-depth candidate is triaged, and no gated item was promoted without a source.",
      "checks": [
        {
          "name": "every live observation resolves to a source (provenance)",
          "pass": true
        },
        {
          "name": "every coverage-depth data need has a triage status",
          "pass": true
        },
        {
          "name": "every attempted/blocked candidate documents its gate",
          "pass": true
        },
        {
          "name": "the SIPRI 2025 deepening is applied with a source",
          "pass": true
        },
        {
          "name": "no blocked grain/commodity sample was silently promoted to live",
          "pass": true
        }
      ]
    },
    {
      "id": "answer-engine",
      "label": "Answer-engine surfaces",
      "description": "The answer-hub, query-matrix, FAQ-caveat, structured-data, crawler, and methodology surfaces are all registered (Trains 126–140).",
      "checks": [
        {
          "name": "answer hubs + query matrix pages registered",
          "pass": true
        },
        {
          "name": "query + FAQ CSV/JSONL exports registered",
          "pass": true
        },
        {
          "name": "FAQ-by-caveat + structured-data surfaces registered",
          "pass": true
        },
        {
          "name": "full crawler brief + crawl priorities registered",
          "pass": true
        },
        {
          "name": "standing answer-engine methodology pages registered",
          "pass": true
        }
      ]
    },
    {
      "id": "route-budget",
      "label": "Static route budget",
      "description": "Static page counts stay under the hard build-cost budgets (warnings allowed).",
      "checks": [
        {
          "name": "no route family is over its hard page budget",
          "pass": true
        },
        {
          "name": "total static pages under hard budget",
          "pass": true
        },
        {
          "name": "per-version expansion under hard budget",
          "pass": true
        }
      ]
    },
    {
      "id": "no-overclaim",
      "label": "No real-time / complete-coverage overclaim",
      "description": "Public status copy negates real-time and complete-coverage claims.",
      "checks": [
        {
          "name": "site status says not real-time",
          "pass": true
        },
        {
          "name": "site status discloses partial coverage",
          "pass": true
        }
      ]
    }
  ]
}