Verification checks (P4)
- Clean re-run (deleted outputs, re-ran analysis.py): SHA-256 of results.json, analytic.csv, exclusions.csv identical: PASS
- Independent recomputation using csv module (no pandas):
- n window 309 = growth+missing: PASS
- independent n_growth: PASS
- independent mean: PASS
- independent sub-means: PASS
- weighted sub-means = overall: PASS
- independent growth_2014_06: PASS
- independent growth_2016_07: PASS
- independent growth_2020_05: PASS
- independent growth_2022_06: PASS
- independent growth_2026_09: PASS
- max/min: PASS
- min<=means<=max: PASS
- analytic rows == n_analysed: PASS
- analytic growth recomputes: PASS
- vintage_used rule: 2026 vintage iff date>=2014-01: PASS
- exclusions identities: PASS
- 2025-10 absent from analytic: PASS
- magnitudes plausible (-3<g<10): PASS
- Input file hashes unchanged after work (incl. after misplaced-directory incident): PASS