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) <[email protected]>
This commit is contained in:
2026-07-06 14:36:18 -04:00
co-authored by Claude Opus 4.8
parent 27922c67f8
commit 24d8891424
+18 -13
View File
@@ -2282,18 +2282,22 @@ def assess_issue_filing_mutation_scope(
"comment_issue", "create_issue", "comment_issue", "create_issue",
): ):
continue continue
if absent in text and f"no {absent}" not in text: if absent not in text:
if any( continue
phrase in text denial_phrases = (
for phrase in ( f"no {absent}",
f"no {absent}", f"no {absent}s",
f"no {absent}s", f"without {absent}",
f"without {absent}", "none performed",
"none performed", "none.",
"none.", "confirm no",
) )
): if any(phrase in text for phrase in denial_phrases):
continue continue
reasons.append(
f"single-mutation run mentions '{absent}' without "
f"confirming it was not performed"
)
if performed == ["create_issue"]: if performed == ["create_issue"]:
for check in ("label", "comment", "pr", "review", "merge"): for check in ("label", "comment", "pr", "review", "merge"):
if check in text and f"no {check}" not in text: if check in text and f"no {check}" not in text:
@@ -2424,7 +2428,8 @@ def assess_issue_filing_final_report(
reasons = [] reasons = []
downgraded = False downgraded = False
for name, result in checks.items(): for name, result in checks.items():
if result.get("verdict") == "missing": verdict = result.get("verdict")
if verdict in ("missing", "incomplete"):
downgraded = True downgraded = True
reasons.extend(result.get("reasons") or []) reasons.extend(result.get("reasons") or [])
elif result.get("downgraded") or not result.get("complete", True): elif result.get("downgraded") or not result.get("complete", True):