# Verification checks (P4) All executed 2026-10-30 by code against out/results.json, out/table1.csv, out/exclusions.csv. - Clean re-run (deleted results/table/figure, re-ran analysis.py): results.json byte-identical — PASS - n_train + n_test == n_analysed (2500+2501=5001) — PASS - table1 n sums to n_analysed — PASS - Exclusion ledger: 5217 − (215+1) = 5001 = n_analysed — PASS - n_missing_rows equals ledger step 1 (215) — PASS - Monday-contrast CI contains estimate — PASS - SEs positive (contrast and weekday) — PASS - F > 0, 0 < p < 1 — PASS - RMSE magnitudes plausible vs sd of changes (5.72 bp overall) — PASS - Contrast recomputed from table1 weighted means matches effect_estimate — PASS - Conclusion follows rule (ANOVA p = 0.90 ≥ 0.05 → no_detectable_effect) — PASS - Information rule: train/test split by date with assertion that partition is exhaustive; forecast means computed from `train` only (code inspection) — PASS - Baseline comparison: model RMSE 4.8838 vs zero-change 4.8757 (model slightly worse) — consistent with null ANOVA.