1# Verification checks (P4) — 2026-10-3021. Reproducibility: re-ran out/analysis.py; results.json and forecasts.csv byte-identical (cmp). PASS32. Independent recomputation (integer indexing, ridge via augmented least squares) at all 60 origins: max |Δ ridge forecast| = 4.7e-11; naive, mean, actual match to 1e-8. PASS43. Leakage test: in a temp copy, all rows dated > 2024-01 corrupted with N(0,100) noise; forecasts at origins ≤ 2024-01 unchanged (max change 0.0). Confirms standardisation stats and fits use only data ≤ origin. PASS54. forecasts.csv: 180 rows, 60 per model, horizon all 1, target_date = origin_date + 1 month. PASS65. Identities: rel_improvement_vs_naive = 1 − rmse_ridge/rmse_naive, same for mean (|diff|<1e-12). PASS76. MAE ≤ RMSE for each model; all RMSE > 0. PASS87. Exclusion ledger: 417 − (2+2) = 413 = n_analysed = training rows at last origin. PASS98. Chronology: first_origin 2021-09-01 < last_origin 2026-08-01; n_origins 60. PASS109. Magnitudes: ridge RMSE (0.561) between mean (0.544) and naive (0.883) baselines; plausible for monthly IP growth (sd ≈1.0 full sample incl. COVID). PASS11