# Checks (P4) - Clean re-run: results.json byte-identical, analytic.csv & exclusions.csv identical: PASS (re-verified after the CSV format fix: two clean runs give identical md5 for all three outputs; results.json unchanged) - rows_analytic==n_analysed: PASS - growth+missing==309: PASS - ledger_identity: PASS - submeans_weighted: PASS - recompute_growth: PASS - hand_2022_06: PASS - hand_2014_06_mixed: PASS - hand_2016_07: PASS - vintage_rule: PASS - max/min_in_range: initially FAIL (analytic.csv written with 10 significant digits vs 10 decimals in results.json; diff 2e-10). Fixed by writing CSV with %.10f; re-check PASS (exact equality) - 2025-10_absent: PASS - dates_in_window: PASS - magnitudes_plausible: PASS Notes: no SEs/CIs are produced (deterministic computation on published data), so CI-containment checks are not applicable. Baseline = 2001-2013 mean (2.361%); full-window mean 2.574% lies between the two sub-period means as required.