# 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