# Verification checks (P4) - Clean re-run (deleted results.json/forecasts.csv, ran twice): byte-identical outputs — PASS - ledger has 144 rows: PASS - 36 unique origins, 2023-07-01..2026-06-01: PASS - target = origin + h months: PASS - naive = last non-missing obs <= origin: PASS - actuals match data: PASS - n_evaluated = 36 - missing targets: PASS - RMSE >= MAE > 0: PASS - rel_improvement recomputed: PASS - exclusion ledger sums: 945 - removed = n_analysed: PASS - h3 error >= h1 error (plausible magnitudes): PASS - model forecasts within 0.2pp of naive (consistent with near-zero AR coefs): PASS - first_origin < last_origin: PASS - Information rule: each origin's estimation uses `s.loc[:t]` only (code inspection); targets strictly after origins (checked above) — PASS