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