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.