How verification works
The hash chain
Every forecast row carries a SHA-256 commitment_hash computed over a canonical serialization of its fields, plus a prev_hash pointer to the row before it. Together these form an append-only log: tampering with any past row would invalidate every hash downstream.
What the chain proves
The chain shows these forecasts have not been altered relative to each other since each row's commit. It does NOT yet prove when each row was written — external timestamp anchoring (OpenTimestamps) is on the Phase 3 roadmap.
Verify it yourself
The TypeScript canonical-serialization implementation lives at web/lib/forecasts/verify.ts and is byte-equivalent to the Postgres forecasts_canonical_hash function. A known-answer test cross-checks the two on every CI run.
The JSON feed is available at /api/v1/forecasts — paginated, versioned, ordered by seq.
Track record
The ledger started 2026-05-22. Most rows resolve between 2026-12 and 2027-12. Calibration measurements (Brier / RPS by domain) publish here as forecasts resolve.