# Verification checks (P4, 2026-10-30) | # | check | outcome | |---|---|---| | 1 | Clean re-run (deleted results.json/forecasts.csv, re-ran analysis.py): byte-identical outputs | PASS | | 2 | Independent ridge implementation (augmented least squares, separate code) vs script forecasts, 60 origins | PASS (max abs diff 4.7e-11) | | 3 | Leakage test: replace all data dated > t with random noise (×100), recompute ridge per origin | PASS (max forecast change 0) | | 4 | Naive = ip_growth_t; mean = mean(ip_growth 1992-04..t); actual = ip_growth_{t+1} | PASS | | 5 | target_date = origin_date + 1 month; 180 rows, 60 per model | PASS | | 6 | n_analysed = 413 training rows at last origin (1992-03..2026-07) = 417 − 2 − 2 per exclusions.csv | PASS | | 7 | rel improvements equal 1 − RMSE ratio; RMSE ≥ MAE > 0 for all models | PASS | | 8 | Chronology first_origin 2021-09-01 < last_origin 2026-08-01; last target 2026-09-01 exists in data | PASS | | 9 | Magnitudes: ridge RMSE (0.561) between mean (0.544) and naive (0.883) baselines; plausible for monthly IP growth | PASS | | 10 | Gate run (see phases.json P4) | see receipt |