feat(review-workflow): add repo-name disambiguation and complete-inventory proofs (#184)
This commit is contained in:
@@ -25,6 +25,7 @@ from review_proofs import ( # noqa: E402
|
||||
assess_self_review_contamination,
|
||||
assess_validation_report,
|
||||
build_final_report,
|
||||
resolve_repos_from_user_reference,
|
||||
verify_pinned_head_checkout,
|
||||
)
|
||||
|
||||
@@ -489,5 +490,91 @@ class TestStdoutIsolation(unittest.TestCase):
|
||||
self.fail(f"stderr write failed: {exc}")
|
||||
|
||||
|
||||
class TestRepoNameDisambiguation(unittest.TestCase):
|
||||
"""Harness assertions for repo name disambiguation (new blind-review hardening).
|
||||
|
||||
"MCP Gitea tool" etc. must resolve to Gitea-Tools, not silently default to
|
||||
mcp-control-plane. "open PRs" or ambiguous must check both. Single-repo
|
||||
zero-result must not hide PRs in the other configured repo.
|
||||
"""
|
||||
|
||||
CONFIGURED = [
|
||||
"Scaled-Tech-Consulting/Gitea-Tools",
|
||||
"Scaled-Tech-Consulting/mcp-control-plane",
|
||||
]
|
||||
|
||||
def test_gitea_tools_aliases_resolve_to_gitea_tools_only(self):
|
||||
for ref in [
|
||||
"MCP Gitea tool",
|
||||
"gitea tool",
|
||||
"Gitea-Tools",
|
||||
"gitea mcp tool",
|
||||
"gitea-tools repo",
|
||||
]:
|
||||
result = resolve_repos_from_user_reference(ref, self.CONFIGURED)
|
||||
self.assertEqual(result, ["Scaled-Tech-Consulting/Gitea-Tools"])
|
||||
|
||||
def test_mcp_control_plane_alias_resolves_only_to_it(self):
|
||||
result = resolve_repos_from_user_reference(
|
||||
"mcp-control-plane", self.CONFIGURED
|
||||
)
|
||||
self.assertEqual(result, ["Scaled-Tech-Consulting/mcp-control-plane"])
|
||||
|
||||
def test_ambiguous_or_empty_defaults_to_both(self):
|
||||
self.assertEqual(
|
||||
resolve_repos_from_user_reference("open PRs", self.CONFIGURED),
|
||||
self.CONFIGURED,
|
||||
)
|
||||
self.assertEqual(
|
||||
resolve_repos_from_user_reference("", self.CONFIGURED),
|
||||
self.CONFIGURED,
|
||||
)
|
||||
self.assertEqual(
|
||||
resolve_repos_from_user_reference("review the queue", self.CONFIGURED),
|
||||
self.CONFIGURED,
|
||||
)
|
||||
|
||||
def test_single_repo_zero_result_does_not_hide_other(self):
|
||||
# Simulate a run that only inventoried mcp because of bad alias resolution.
|
||||
# The inventory must still require Gitea-Tools to claim "no open PRs".
|
||||
mcp_only_reports = [
|
||||
{
|
||||
"repo": "Scaled-Tech-Consulting/mcp-control-plane",
|
||||
"state_filter": "open",
|
||||
"pagination_complete": True,
|
||||
"open_pr_count": 0,
|
||||
}
|
||||
]
|
||||
result = assess_inventory_completeness(
|
||||
repo_reports=mcp_only_reports,
|
||||
required_repos=self.CONFIGURED,
|
||||
)
|
||||
self.assertFalse(result["complete"])
|
||||
self.assertTrue(
|
||||
any("Gitea-Tools" in r for r in result["reasons"])
|
||||
)
|
||||
|
||||
def test_full_inventory_of_both_is_required_for_exhaustive_claim(self):
|
||||
both_reports = [
|
||||
{
|
||||
"repo": "Scaled-Tech-Consulting/Gitea-Tools",
|
||||
"state_filter": "open",
|
||||
"pagination_complete": True,
|
||||
"open_pr_count": 1,
|
||||
},
|
||||
{
|
||||
"repo": "Scaled-Tech-Consulting/mcp-control-plane",
|
||||
"state_filter": "open",
|
||||
"pagination_complete": True,
|
||||
"open_pr_count": 0,
|
||||
},
|
||||
]
|
||||
result = assess_inventory_completeness(
|
||||
repo_reports=both_reports, required_repos=self.CONFIGURED
|
||||
)
|
||||
self.assertTrue(result["complete"])
|
||||
self.assertTrue(result["can_claim_exhaustive"])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user