1# Verification checks (P4)2| check | outcome |3|---|---|4| Clean re-run (deleted outputs, ran twice) gives byte-identical results.json | PASS (cmp identical) |5| Exclusion ledger: 1200 − 0 − 0 − 12 = 1188 = n_analysed | PASS |6| n_input_rows firms.csv = 1200 = wc -l − 1 | PASS |7| SEs positive (naive_se 0.0146, effect_se 0.0098, skill_index_se 0.078) | PASS |8| CIs contain estimates (naive, effect) | PASS |9| CI = est ± 1.96·SE (HC1, normal) | PASS (0.2535 ± 0.0192 = [0.2343, 0.2728]) |10| RMSE positive; model_metric (1.98) < baseline_metric (3.86), expected since adjusted model nests unadjusted | PASS |11| conclusion consistent with CI (lo>0 → positive_effect) | PASS |12| Magnitude vs baseline: sign flip from −0.132 to +0.254 explained by positive skill–hours correlation and negative skill–growth coefficient (omitted-variable bias formula: bias = β_skill·cov(h,s)/var(h) < 0) | PASS (consistent) |13| Robustness: skill² term (p=0.57) and hours×skill interaction (p=0.96) not significant; effect unchanged (0.2538, 0.2536) | PASS |14| Sensitivity incl. 12 negative-hour rows: effect 0.2522 | PASS (conclusion unchanged) |15| Information rules: only data/firms.csv read; control is pre-treatment | PASS |16| OVB identity: effect + β_skill·cov(h,s)/var(h) = naive slope (−0.131698 both) | PASS (exact to 1e-15) |17