From 24d88914243b590da7cb9c787a1e4f6335b8be4f Mon Sep 17 00:00:00 2001 From: Jason Walker <913443@dadeschools.net> Date: Mon, 6 Jul 2026 14:36:18 -0400 Subject: [PATCH] fix(issue-filing): enforce mutation-scope denials in generic loop (#191) The forbidden-mutation loop in assess_issue_filing_mutation_scope never appended reasons; align aggregation with issue-selection handoff checks. Co-Authored-By: Claude Opus 4.8 (1M context) --- review_proofs.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/review_proofs.py b/review_proofs.py index 5df0ef8..c539a0b 100644 --- a/review_proofs.py +++ b/review_proofs.py @@ -2282,18 +2282,22 @@ def assess_issue_filing_mutation_scope( "comment_issue", "create_issue", ): continue - if absent in text and f"no {absent}" not in text: - if any( - phrase in text - for phrase in ( - f"no {absent}", - f"no {absent}s", - f"without {absent}", - "none performed", - "none.", - ) - ): - continue + if absent not in text: + continue + denial_phrases = ( + f"no {absent}", + f"no {absent}s", + f"without {absent}", + "none performed", + "none.", + "confirm no", + ) + if any(phrase in text for phrase in denial_phrases): + continue + reasons.append( + f"single-mutation run mentions '{absent}' without " + f"confirming it was not performed" + ) if performed == ["create_issue"]: for check in ("label", "comment", "pr", "review", "merge"): if check in text and f"no {check}" not in text: @@ -2424,7 +2428,8 @@ def assess_issue_filing_final_report( reasons = [] downgraded = False for name, result in checks.items(): - if result.get("verdict") == "missing": + verdict = result.get("verdict") + if verdict in ("missing", "incomplete"): downgraded = True reasons.extend(result.get("reasons") or []) elif result.get("downgraded") or not result.get("complete", True):