{"P0":{"status":"passed","checks":["TASK.md read fully","contract.md written with estimand, outputs, info rules, invalidity conditions"],"notes":""},
"P1":{"status":"passed","checks":["SHA-256 of both inputs computed and match README","row/col counts, date ranges, gaps, duplicates, missing values inspected","exclusion ledger written and sums to n_analysed (319-79=240)","info-availability: post-2019 / pre-1959Q4 data excluded by window"],"notes":"One missing UNRATE value (2025-10) outside window."},
"P2":{"status":"passed","checks":["baseline se_iid and iid CI computed (baseline_beta_ci_low_iid/high_iid) with same estimator and critical value"],"notes":""},
"P3":{"status":"passed","checks":["analysis.py reads only data/, writes results.json, exclusions.csv, figure1.png","HAC SE cross-checked against statsmodels (assert)","no randomness; random_seed null"],"notes":"hac_lags=4 via floor(4*(T/100)^(2/9))."},
"P4":{"status":"passed","checks":["clean re-run produced byte-identical results.json","CI contains estimate; SEs positive; alpha identity; ledger sums; hand check 1960Q1; bandwidth sensitivity -- see out/state/checks.md"],"notes":""},
"P5":{"status":"passed","checks":["report.md has all 6 required sections with result keys cited","claims.json keys all exist in results.json"],"notes":""}}
