# Verification checks (P4) Reproducibility: deleted out/results.json, analytic.csv, exclusions.csv; re-ran analysis.py twice; `cmp` of results.json → IDENTICAL. Internal consistency (script run 2026-10-30, all PASS): - rows analytic == n_analysed (308) - n_months_growth + n_months_missing_growth == 309 window months - exclusion ledger: n_before − n_removed = n_after each row; chaining; final n_after == n_analysed - g(2022-06), g(2014-06) [new/old vintage], g(2016-07) recomputed by hand from raw files: match to 1e-8 - mean recomputed from analytic.csv matches; 156/152-weighted sub-period means reproduce overall mean - min ≤ sub-period means ≤ max - vintage_used = 2026-10-28 exactly for months ≥ 2014-01 - 2025-10 absent; 2025-11 present (its lag 2024-11 exists); no NaN; dates span 2001-01..2026-09 Magnitude vs baseline: overall mean 2.574 lies between the 2001–2013 baseline (2.361) and 2014–2026 mean (2.793). Max 8.98% (2022-06) and min −1.96% (2009-07) are plausible for this period.