# Verification checks (P4) — all executed 2026-10-29 | # | check | outcome | |---|---|---| | 1 | Clean re-run (deleted results.json, forecasts.csv, exclusions.csv) regenerates byte-identical results.json and forecasts.csv | PASS | | 2 | forecasts.csv has 144 rows, 36 unique origins, first/last match results.json | PASS | | 3 | Chronology: first_origin < last_origin; target_date = origin_date + h months for all rows | PASS | | 4 | Actuals in ledger equal data values (empty where data missing) | PASS | | 5 | Naive forecast = latest non-missing obs dated ≤ origin (incl. origin 2025-10-01 → 2025-09 value 4.4) | PASS | | 6 | n_evaluated_h1 = n_evaluated_h3 = 35 (one missing target, 2025-10-01, per horizon) | PASS | | 7 | All RMSE > 0 and RMSE ≥ MAE | PASS | | 8 | rel_improvement = 1 − rmse_model/rmse_naive (|diff| < 1e-12) | PASS | | 9 | Exclusion ledger: 945 − 1 − 3 = 941 = n_analysed; n_input_rows = 945 | PASS | | 10 | Magnitudes: h=3 RMSE > h=1 RMSE for both models; model forecasts within 0.1 pp of naive (AR coefficients small) | PASS | | 11 | No look-ahead: adding +3 pp to all data after 2024-12 leaves every forecast with origin ≤ 2024-12 unchanged (and changes later ones) | PASS | | 12 | SHA-256 of data/UNRATE.csv unchanged (621ff6fa…a06c) | PASS (data not modified) |