# Checks (P4) 1. Reproducibility: analysis.py run twice from scratch; results.json byte-identical (cmp) — PASS. 2. Exclusion ledger sums: 1200 − (0+0+12) = 1188 = n_analysed — PASS. 3. SEs positive (effect_se 0.0098, naive_se 0.0146) — PASS. 4. CIs contain estimates (naive and effect) — PASS. 5. RMSE positive; model_metric (1.98) < baseline_metric (3.86), as expected when adding a strong predictor — PASS. 6. Conclusion code consistent with CI: effect_ci_low 0.234 > 0 → positive_effect — PASS. 7. Linearity/homogeneity: joint robust Wald test of training², skill², training×skill p = 0.86 (spec_check_nonlinear_terms_joint_pvalue) — no evidence against linear model — PASS. 8. Heteroskedasticity: Breusch–Pagan p ≈ 0.28 (ad hoc check, not in results); conventional SE 0.00984 vs HC1 0.00981 — negligible difference — info only. 9. Sensitivity incl. negative-hour rows: effect 0.2522 vs 0.2535 — robust — PASS. 10. Magnitude vs baseline: sign reversal (naive −0.13 → adjusted +0.25), explained by skill_index correlated +0.68 with training and negatively with growth (omitted-variable bias direction negative) — consistent.