From ac7fadf3ecc30fc09b7c8a737a9af591f08662e0 Mon Sep 17 00:00:00 2001 From: zzzzzzzzzzzzzzm Date: Thu, 28 May 2026 09:41:23 +0800 Subject: [PATCH] Accept resolve reference verbs in bounty checks --- scripts/pr_queue_health.py | 5 ++++- scripts/submission_quality_gate.py | 5 ++++- tests/test_pr_queue_health.py | 27 +++++++++++++++++++++++++++ tests/test_submission_quality_gate.py | 22 ++++++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/scripts/pr_queue_health.py b/scripts/pr_queue_health.py index e96ed86d..6743cae8 100644 --- a/scripts/pr_queue_health.py +++ b/scripts/pr_queue_health.py @@ -8,7 +8,10 @@ from collections import defaultdict from typing import Any -BOUNTY_REF_RE = re.compile(r"\b(?:bounty|refs?|fixes|closes|claims?)\s+#(\d+)", re.IGNORECASE) +BOUNTY_REF_RE = re.compile( + r"\b(?:bounty|refs?|references?|fixes|closes|claims?|resolves?)\s+#(\d+)", + re.IGNORECASE, +) NOISY_TITLE_PREFIX_RE = re.compile(r"^\s*(?:\[[^\]]+\]\s*)+") UNSTABLE_MERGE_STATES = {"blocked", "conflicting", "dirty", "unknown", "unstable"} GH_TIMEOUT_SECONDS = 30 diff --git a/scripts/submission_quality_gate.py b/scripts/submission_quality_gate.py index 6abca939..6cf70049 100644 --- a/scripts/submission_quality_gate.py +++ b/scripts/submission_quality_gate.py @@ -11,7 +11,10 @@ from urllib.error import HTTPError, URLError from urllib.request import urlopen -BOUNTY_REF_RE = re.compile(r"\b(?:bounty|refs?|fixes|closes|claims?)\s+#(\d+)", re.IGNORECASE) +BOUNTY_REF_RE = re.compile( + r"\b(?:bounty|refs?|references?|fixes|closes|claims?|resolves?)\s+#(\d+)", + re.IGNORECASE, +) EVIDENCE_RE = re.compile( r"\b(pytest|ruff|mypy|validation|verified|test evidence|checks? passed)\b", re.IGNORECASE, diff --git a/tests/test_pr_queue_health.py b/tests/test_pr_queue_health.py index 58ff8fbe..4a772287 100644 --- a/tests/test_pr_queue_health.py +++ b/tests/test_pr_queue_health.py @@ -127,6 +127,33 @@ def test_pr_queue_health_accepts_claim_command_reference() -> None: assert report["missing_bounty_references"] == [] +def test_pr_queue_health_accepts_resolve_and_reference_words() -> None: + report = analyze_queue( + { + "bounties": [{"number": 310, "state": "OPEN", "awards_remaining": 1}], + "pull_requests": [ + { + "number": 8, + "title": "Harden bounty submission checks", + "body": "Resolves #310", + "merge_state": "clean", + "labels": [], + }, + { + "number": 9, + "title": "Harden bounty queue checks", + "body": "References #310", + "merge_state": "clean", + "labels": [], + }, + ], + } + ) + + assert report["summary"]["missing_bounty_references"] == 0 + assert report["missing_bounty_references"] == [] + + def test_pr_queue_health_markdown_report_includes_required_sections() -> None: report = analyze_queue( { diff --git a/tests/test_submission_quality_gate.py b/tests/test_submission_quality_gate.py index 29eee86f..ac3154ef 100644 --- a/tests/test_submission_quality_gate.py +++ b/tests/test_submission_quality_gate.py @@ -66,6 +66,28 @@ def test_submission_quality_gate_accepts_claim_command_reference() -> None: } in result["checks"] +def test_submission_quality_gate_accepts_resolve_and_reference_words() -> None: + for text in ("Resolves #319", "Reference #319", "References #319"): + result = evaluate_submission( + { + "submission_text": f""" + Summary: + Harden the bounty reference parser. + + {text} + + Validation: + - pytest passed. + """, + "bounties": [{"number": 319, "state": "OPEN", "awards_remaining": 1}], + "pull_requests": [], + } + ) + + assert result["status"] == "pass" + assert result["bounty_reference"] == 319 + + def test_submission_quality_gate_fails_missing_reference() -> None: result = evaluate_submission( {