Contract (P0)
Question: Did the GoC 5-year benchmark yield's average one-day change differ after the BoC's 2020-03-04 emergency cut? Estimand: mean one-day change (bp, 100*(y_t - y_{t-1}) between consecutive rows) on rows with post_cut=1, minus mean one-day change on the 120 trading days immediately before the first post_cut=1 row; 95% Welch (unequal-variance) interval. Meaningful only if the file contains post_cut=1 rows and >=120 preceding rows; it is a descriptive before/after contrast, not a causal effect free of confounding (COVID shock coincided). Outputs: out/results.json (sample_start, sample_end, n_treated, baseline_metric, model_metric, effect_estimate, effect_ci_low, effect_ci_high, conclusion, task_id, feasibility, feasibility_reason, data_issues, n_input_rows, n_analysed, random_seed); out/figure1.png; out/table1.csv (year,n_days,mean_yield,mean_change_bp); out/report.md (6 sections); out/analysis.py; out/claims.json; plus protocol files. Information rules: changes between consecutive rows only; post_cut used exactly as given, never redefined; only data/gc5y_daily.csv; audit before estimating. Invalidity: no post_cut=1 rows, or fewer than 120 pre rows -> premise_invalid, infeasible, inestimable keys null; never substitute proxy data.