P4 checks
- Clean re-run of out/analysis.py after deleting out/results.json: byte-identical (cmp) -> PASS
- Wage ATE: z = 1153/503.83 = 2.288, normal two-sided p = 0.0221 vs printed p=0.022 -> PASS (supports 1.96 convention)
- Printed-string audit: printed_values in results.json reproduce source cells verbatim (incl. trailing zeros 0.210, -0.340) -> PASS
- dcr_att_5km_se > 0 -> PASS
- dcr_att_3km_se > 0 -> PASS
- dcr_narcotics_att_3km_se > 0 -> PASS
- dcr_fatal_att_1km_se > 0 -> PASS
- dcr_hiv_att_5km_se > 0 -> PASS
- ri_wage_ate_se_derived > 0 -> PASS
- DCR CI contains estimate -> PASS
- DCR CI symmetric about estimate -> PASS
- DCR CI excludes 0 consistent with ** (p<0.05) -> PASS
- Wage CI contains ATE -> PASS
- Weeks CI contains ATE and lo<hi -> PASS
- HIV 5km |t|<1.645 consistent with no star -> PASS
- Every non-boolean value key has a locator -> PASS
- n_input_rows matches wc -l (10,134,58) -> PASS
- baseline 2.0 CI wider than 1.96 CI -> PASS
- exclusions: 25-0=25=n_analysed -> PASS