Extend the policy with the investigation veto: should_retrain(s) returns ["VETO: fix the data first - retraining would bake the bug into the model"] immediately when s["upstream_bug"] is true — BEFORE any other trigger is considered. Otherwise the usual three families (schedule > 90 days, drift as f"drift on {list}", outcome floor < 0.80 with the None guard). Print the same drifted week twice: once with the bug flag, once without.