Audit log

The administrator's append-only record of every verification, defect, fix and decision — including decisions to change nothing. Rulebook §8 and §11 commit to keeping it public; this is it, published verbatim from the engine repository on every print.

AUDIT — append-only

Dated log of every bug, verification, and decision — including decisions to change nothing. Newest entries at the bottom.

2026-08-23 — repo created; planning-time verification summary

Facts verified during planning (live probes + Census documentation), which this build relies on:

2026-08-23 — day-one key-gated checks: ALL PASS

Key activated ~15:45 UTC. Incidentally, the unactivated key earlier today exercised the 302/X-DataWebAPI-KeyError FATAL path against the live API — the failure drill passed for free.

Backfill battery results + the three manual DataWeb spot-checks: recorded below after the full run.

2026-08-23 — backfill attempt 1 aborted by API timeout streak; retries hardened

First full backfill FATALed at month ~60 of ~198: three consecutive 60s read-timeouts (~650 calls had succeeded before it). The fail-loud design held: no ledger write, no publish. Diagnosis: transient Census-side flakiness under sustained sequential load; 3 retries × short backoff (~7s total) cannot ride out a multi-minute blip. Fix: shared requests.Session (connection reuse) + retries 3→5 with backoff 2·2^n capped at 45s (~1 min of backoff + up to 5×60s timeouts ≈ 6 min tolerance per call). Also a tooling lesson: the run was invoked as backfill.py | tail, so the shell reported tail's exit 0 and masked Python's exit 1 — background runs are now invoked bare so exit codes are truthful. Selftest re-passed after the change.

2026-08-23 — backfill attempt 2 failed identically; diagnosis upgraded to throttling

Attempt 2 (session + 5 retries, ~45s backoff cap) died the same way at ~72 months (~800 calls, ~12 min of sustained traffic): five consecutive 60s read-timeouts. Two failures at similar depth is not random flakiness — Census appears to throttle sustained query streams by stalling connections rather than returning 429s. Fixes for attempt 3: (a) timeouts now back off in minutes (15s→60s→240s→300s→300s ≈ 16 min tolerance — a stall is a cooldown signal, not a retry-fast signal); (b) steady pace slowed (POLITE_PAUSE 0.2→0.35s); (c) backfill.py now checkpoints each completed month to backfill_checkpoint.jsonl (gitignored) and resumes from it, so a failure never again costs completed work. Checkpoint deletes itself after a successful ledger write. Selftest re-passed.

2026-08-23 — attempt 3: the wall is call-volume, not pacing; supervisor loop deployed

Attempt 3 (0.35s pace, minutes-long cooldowns) died at month 63 (~650 calls) after riding out ~20 minutes of stalls — same depth as attempts 1 (~650) and 2 (~800) despite different pacing. Conclusion: an undocumented per-key/per-IP call-volume wall around 600–800 calls per window; cooldowns of minutes don't clear it. The checkpoint held: 62 months banked, reruns resume instantly. Remedy: an auto-resuming supervisor (rerun backfill.py until exit 0, 10-min cooldowns between attempts, max 10) — each window banks another ~60 months. The daily print engine is immune (~10 calls on no-op days, ~40 on print days — two orders of magnitude below the wall). Backfill is a once-ever event; no engine changes warranted beyond what's already in.

2026-08-24 — backfill COMPLETE on supervisor attempt 5; battery PASS

198 months (2010-01 → 2026-06), 2,574 ledger rows, all stamped backfill. Full report in backfill_report.md (code b66f19d). Verdicts:

A DataWeb UI confirmation remains available as a third path if a licensee ever asks for one; it would test the same source through a different front end rather than a different aggregation.

2026-08-24 — launch plumbing shipped (plan v2 steps 1–4)

Site rebuilt as a static multi-page set from one generator: index, series list + 13 series pages (deep-linkable, each with cite-as block and stats), methodology (rulebook rendered from the versioned markdown), verify (worked example with real dollar inputs + one-URL API reproduction + DataWeb route), data (downloads, dictionary, license), calendar (FT-900 dates + signup slot), about (brand-first, independence statement), press (boilerplate, chart pack), revisions log. Credited standalone chart SVGs for every series, rendered to PNG via rsvg-convert (CI installs librsvg2-bin; local brew). Per-series JSON + llms.txt for machine consumers. /print-day skill (draft-only, ledger-grounded) and policy_events.md seeded with 26 actions 2018→2026 (2026 entries flagged for primary-source verification). Visual verification: index, series, verify, methodology pages screenshot-checked at 1440px; PNG headline chart inspected. 55 artifacts + 13 PNGs per publish; publish remains deterministic from the ledger.

2026-08-24 — agent seats, launch package, products, ledger rebuild