# Contract — F3-conf-01 **Question.** At the end of each month t (48 origins, 2022-05 … 2026-04), forecast Canadian monthly real GDP y/y growth (`gdp_yoy`) for month t+h, h∈{1,3}, using only data published by then (GDP ≤ t−2, LFS employment ≤ t−1). Does a model using LFS employment growth beat the naive forecast (gdp_yoy of t−2)? **Estimands.** Out-of-sample RMSE and MAE over the 48 origins per horizon for (a) naive, (b) one model; relative improvement 1 − RMSE_model/RMSE_naive per horizon. Meaningful under: current-vintage data (timing simulation only, not real-time vintages), fixed origin set, squared/absolute loss. **Outputs.** out/forecasts.csv (192 rows; origin_date,target_date,horizon,forecast,actual,model,last_target_date_used,last_predictor_date_used); out/results.json (task_id, model_name, model_description, n_origins, first_origin, last_origin, last_target_date_available, last_predictor_date_available, rmse/mae naive/model h1/h3, rel_improvement_rmse_h1/h3, feasibility, feasibility_reason, data_issues, n_input_rows, n_analysed, random_seed); out/report.md (Question; Data and exclusions; Method; Results; Uncertainty; Limitations and open issues); out/analysis.py; out/claims.json; plus protocol files (state/, exclusions.csv). **Information rules.** At origin t: gdp_* only months ≤ t−2, emp_* only months ≤ t−1; estimation, selection, transforms and plug-in values must obey this; training targets must be observed at the origin. **Invalidity / impossibility.** Any use of GDP > t−2 or employment > t−1; missing targets for t+h (max target 2026-07 is available, so feasible); claiming real-time validity.