1# Checks (P4)23- 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)4- rows_analytic==n_analysed: PASS5- growth+missing==309: PASS6- ledger_identity: PASS7- submeans_weighted: PASS8- recompute_growth: PASS9- hand_2022_06: PASS10- hand_2014_06_mixed: PASS11- hand_2016_07: PASS12- vintage_rule: PASS13- 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)14- 2025-10_absent: PASS15- dates_in_window: PASS16- magnitudes_plausible: PASS1718Notes: 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.19