# 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 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