Verification checks (P4)
- Clean re-run (deleted results.json, table1.csv, figure1.png, exclusions.csv; re-ran analysis.py): results.json byte-identical — PASS. (A first attempt compared against a copy in shared /tmp that had been overwritten by an unrelated process; repeated with a workspace-local copy — PASS.)
- n_sub1 + n_sub2 = n_analysed = 240 — PASS
- Exclusion ledger: 319 − (5+2+72) = 240; n_before − n_after = n_removed each row — PASS
- effect_se > 0 — PASS
- CI contains estimate; half-width = 1.959964·SE — PASS
- model_metric < baseline_metric; R² = 1 − (model/baseline)² — PASS
- ssr_pooled = 240·model_metric² — PASS
- Chow F and p recomputed independently from SSRs, df (2,236) — PASS
- ssr_unrestricted ≤ ssr_pooled — PASS
- stability_conclusion consistent with p<0.05 — PASS
- conclusion code = negative_effect and CI upper < 0 — PASS
- table1 slopes and n match results.json — PASS
- sample_start/end = 1960-01-01/2019-10-01; code asserts index == 240 consecutive quarters (no post-2019 data) — PASS
- hac_lags = floor(4(240/100)^(2/9)) = 4 — PASS
- Magnitude vs baseline: residual RMSE 0.250 vs 0.325 pp; β ≈ −0.26 in line with conventional Okun estimates (~ −0.3 to −0.5 for annualised quarterly diff form scaled). Sensible.