Add assess_queue_status_report and assess_proof_wording to reject contradictory queue-status-only reports: passed gates without a selected PR, prior diagnostic conflict proof, pagination assumptions, and blocker contradictions. Wire into build_final_report and document the queue-status-only schema path. Closes #339
91 lines
3.0 KiB
Python
91 lines
3.0 KiB
Python
"""Doc-contract checks for queue-status report verifier (#339)."""
|
|
import unittest
|
|
|
|
from review_proofs import assess_queue_status_report, build_final_report
|
|
|
|
BAD_QUEUE_STATUS_REPORT = """
|
|
## PR Queue Status
|
|
|
|
Loaded workflows/review-merge-pr.md. Inventory complete because gitea_list_prs
|
|
returned 6 open PRs, fewer than the default Gitea page size.
|
|
|
|
PR #286 skipped: prior diagnostic worktree simulation showed merge conflicts.
|
|
Live blocker proof for all skipped PRs.
|
|
|
|
All open PRs are conflicted or blocked. Blockers: none.
|
|
|
|
## Controller Handoff
|
|
|
|
- Task: review queue status
|
|
- Repo: Scaled-Tech-Consulting/Gitea-Tools
|
|
- Role: reviewer
|
|
- Identity: reviewer1 / prgs-reviewer
|
|
- Selected PR: none
|
|
- Inventory pagination proof: assumed complete (6 < 50)
|
|
- Already-landed gate: passed
|
|
- Author-safety result: passed
|
|
- Merge preflight: passed
|
|
- Review worktree used: false
|
|
- Review worktree dirty before validation: false
|
|
- Blockers: none
|
|
- Current status: queue inspected; no PR selected
|
|
"""
|
|
|
|
|
|
class TestQueueStatusReport(unittest.TestCase):
|
|
def test_bad_fixture_fails_closed(self):
|
|
result = assess_queue_status_report(BAD_QUEUE_STATUS_REPORT)
|
|
self.assertFalse(result["proven"])
|
|
self.assertTrue(result["block"])
|
|
self.assertTrue(result["queue_status_only"])
|
|
joined = " ".join(result["violations"]).lower()
|
|
self.assertIn("already-landed gate", joined)
|
|
self.assertIn("author-safety", joined)
|
|
self.assertIn("merge preflight", joined)
|
|
self.assertIn("prior diagnostic", joined)
|
|
self.assertIn("blockers", joined)
|
|
|
|
def test_passes_with_not_applicable_gates(self):
|
|
report = """
|
|
## Controller Handoff
|
|
- Selected PR: none
|
|
- Inventory pagination proof: is_final_page: true, has_more: false
|
|
- Already-landed gate: not applicable
|
|
- Author-safety result: not run
|
|
- Merge preflight: not applicable
|
|
- Review worktree used: false
|
|
- Review worktree dirty before validation: not applicable
|
|
- Blockers: all PRs skipped pending reviewer
|
|
"""
|
|
result = assess_queue_status_report(report)
|
|
self.assertTrue(result["proven"])
|
|
|
|
def test_rejects_passed_gates_without_selected_pr(self):
|
|
report = """
|
|
## Controller Handoff
|
|
- Selected PR: none
|
|
- Already-landed gate: passed
|
|
- Blockers: PR #1 conflicted
|
|
"""
|
|
result = assess_queue_status_report(report)
|
|
self.assertFalse(result["proven"])
|
|
self.assertIn("already-landed gate", " ".join(result["violations"]).lower())
|
|
|
|
def test_build_final_report_downgrades_bad_queue_status(self):
|
|
report = build_final_report(
|
|
{"proven": True},
|
|
{"complete": True},
|
|
{"claimable": True, "verdict": "strong"},
|
|
{"status": "clean"},
|
|
True,
|
|
False,
|
|
True,
|
|
report_text=BAD_QUEUE_STATUS_REPORT,
|
|
)
|
|
self.assertEqual(report["grade"], "downgraded")
|
|
self.assertFalse(report["queue_status_report_proven"])
|
|
self.assertTrue(report["queue_status_violations"])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main() |