| 1 |
Clean rerun (delete results.json/forecasts.csv/exclusions.csv, rerun) reproduces byte-identical files |
PASS (cmp identical) |
| 2 |
forecasts.csv has 192 rows, 48 per (model,horizon), no missing actual/forecast |
PASS |
| 3 |
last_target_date_used <= origin-2 months for every row (asserted in analysis.py) |
PASS |
| 4 |
last_predictor_date_used <= origin-1 month for every model row (asserted) |
PASS |
| 5 |
Independent masked re-estimation (GDP>t-2, emp>t-1 set to NaN per origin; out/state/leakage_check.py) reproduces model forecasts |
PASS (max abs diff 4.9e-7 = 6-dp rounding in csv) |
| 6 |
Exclusion ledger: 345 - (8+2+25) = 310 = n_analysed |
PASS |
| 7 |
RMSE >= MAE >= 0 for every model/horizon; all RMSE > 0 |
PASS (0.814>=0.642; 1.140>=0.872; 0.743>=0.604; 0.902>=0.753) |
| 8 |
rel_improvement = 1 - rmse_model/rmse_naive recomputed |
PASS |
| 9 |
Magnitudes plausible vs baseline: naive h3 error > h1 error (longer gap) |
PASS |
| 10 |
Chronology: first_origin < last_origin; last_target_date_available (2026-02-01) and last_predictor_date_available (2026-03-01) < last_origin |
PASS |
| 11 |
data/ unchanged (SHA-256 re-verified after accidental data/out creation was removed) |
PASS |
| 12 |
Gate pgar_gate.py |
see phases.json receipts |