# Verification checks (P4) - Clean re-run (deleted outputs, ran twice): results.json byte-identical -> PASS - numpy lstsq reproduces effect_estimate -> PASS - numpy lstsq reproduces skill coef -> PASS - model_metric = sqrt(mean e^2) -> PASS - CIs contain estimates -> PASS - CI = est +/- 1.96 se -> PASS - SE positive; RMSEs positive -> PASS - model_metric <= baseline_metric (nested OLS same sample) -> PASS - 1200 - removed = n_analysed -> PASS - conclusion consistent with CI -> PASS - table1 main row == results -> PASS - omitted variable bias sign: skill coef<0 and corr(skill,hours)>0 imply naive PASS - OVB identity naive = b1 + b2*delta -> PASS