Verification checks
- Re-run of out/analysis.py: results.json byte-identical (cmp) — PASS
- Manual CR1 sandwich computed in-script equals statsmodels clustered SE (assert, tol 1e-10) — PASS
- Exclusion ledger: 2000 − 0 = 2000 = n_analysed (assert in script) — PASS
- se_ols = 0.0241 > 0, se_cluster = 0.0731 > 0 — PASS
- CI [0.658, 0.952] contains beta_hat 0.805 and is symmetric around it — PASS
- n_clusters 50 = unique firm_id; 50×40 = 2000 — PASS
- Magnitude vs baseline: se_cluster/se_ols = 3.03; plausible given firm-level shocks with 40 obs/firm (a design effect of ~9 implies sizable within-firm correlation in both x and residuals) — PASS (noted)
- Gate runs: see phases.json