Verification checks (P4)
- Clean re-run: deleted results.json/table1/figure1/exclusions, re-ran analysis.py; results.json byte-identical (cmp) — PASS.
- Input SHA-256 equals README value — PASS.
- Counts: n_input_rows 2498 = 2497 changes + 1 (first row); exclusion ledger 2498−1−2497 = 0 = number of rows in estimand windows (n_analysed null since none) — PASS.
- n_treated = 0 consistent with sample_end 2019-12-31 < 2020-03-04 and README query end_date — PASS.
- Chronology: sample_start 2010-01-04 < sample_end 2019-12-31 — PASS.
- table1: 10 years, n_days sum = 2498; per-year means plausible (yields 0.73–2.48 %) — PASS.
- Baseline magnitude: −0.043 bp/day × 2497 ≈ −107 bp = 100·(1.68−2.75) — PASS (identity of the mean of first differences).
- Welch code path (unreachable on real data) tested on a throw-away copy in /tmp with post_cut artificially set to 1 from 2019-07-01 — estimate, CI and n matched scipy.stats.ttest_ind(equal_var=False) exactly. Test only; NOT a result, not reported as one — PASS.
- Estimand keys null, conclusion premise_invalid, feasibility infeasible, consistent with TASK rule — PASS.