Verification checks (P4)
- Reproducibility: deleted out/results.json, ran analysis.py twice; SHA-256 identical both times (709edfbe…3683). PASS
- Printed source lines echoed by the script match every extracted value (see stdout). PASS
- Stars vs printed SE (normal z): 5 km ATT z=-2.05, p≈0.040 → ** OK; 3 km z=-1.01 → no star OK; narcotics 3 km z=2.94, p≈0.003 → *** OK; fatal 1 km z=-8.8 → *** OK; HIV 5 km z=-1.16, p≈0.25 → no star OK (and significant_10pct=false). PASS
- The derived DCR 95% CI [-0.8426, -0.0194] contains -0.431 and excludes 0, consistent with ** (p<0.05). PASS
- RESEA wage CI [166, 2141] contains 1153; midpoint 1153.5 ≈ estimate (symmetric). The derived SE of 503.83 gives p=0.0221 vs the printed 0.022. PASS
- Weeks CI [-2.24, -1.75] contains -1.99, and the lower bound comes first. PASS
- SEs positive; dcr_obs_5km integer 17250. PASS
- Table 3 "Difference in means" wage cell equals the Table 2 ATE cell (assert in script). PASS
- Every non-boolean key has a locator; n_input_rows equals wc -l (10/134/58). PASS
- Note: JSON stores 0.210 as 0.21 and -0.340 as -0.34 (the numeric value is the same; the printed decimals are recorded in the locators/report). Not a failure.