| Clean re-run (deleted results.json/forecasts.csv, re-ran) byte-identical |
PASS |
| forecasts.csv has 192 rows, 48 per (model,horizon) |
PASS |
| last_target_date_used <= origin-2 months for all rows |
PASS |
| last_predictor_date_used <= origin-1 month for model rows; empty for naive |
PASS |
| target_date = origin + h months; actual equals data gdp_yoy of target month |
PASS |
| naive forecast equals gdp_yoy[t-2] |
PASS |
| rel_improvement = 1 - rmse_model/rmse_naive; RMSE >= MAE; RMSE > 0 |
PASS |
| exclusions.csv: 345 - sum(n_removed) = n_analysed (310), n_before-n_after=n_removed |
PASS |
| Magnitude vs baseline: model RMSE 0.74/0.90 vs naive 0.81/1.14 pp, same order |
PASS |
| Chronology: first_origin<last_origin, last_target(2026-02)<last_origin, last_predictor(2026-03)<last_origin |
PASS |