feat(continuation): formalize continuation proofs for claim and push (closes #189)
Extend #188 continuation mode with issue claim status evidence, force-with-lease push reporting, canonical secret sweep helper, and composite final-report checks wired into assess_issue_selection_final_report.
This commit is contained in:
@@ -28,6 +28,9 @@ from review_proofs import ( # noqa: E402
|
||||
assess_capability_proof,
|
||||
assess_contradictory_no_pr_claim,
|
||||
assess_continuation_mode_report,
|
||||
assess_force_with_lease_push_report,
|
||||
canonical_secret_sweep_report,
|
||||
CANONICAL_SECRET_SWEEP_COMMAND,
|
||||
assess_controller_handoff,
|
||||
assess_edited_pr_inventory_coverage,
|
||||
assess_empty_queue_report,
|
||||
@@ -1761,6 +1764,7 @@ class TestIssueSelectionContinuation(unittest.TestCase):
|
||||
"- Continuation mode: issue #182 continuation",
|
||||
"- Existing PR: #186",
|
||||
"- PR author: jcwalker3",
|
||||
"- Issue claim status: status:in-progress",
|
||||
"- Branch: feat/issue-182-controller-handoff",
|
||||
f"- Old PR head: {self.OLD_SHA}",
|
||||
f"- New PR head: {self.NEW_SHA}",
|
||||
@@ -1773,6 +1777,8 @@ class TestIssueSelectionContinuation(unittest.TestCase):
|
||||
continuation_proof={
|
||||
"pr_number": 186,
|
||||
"pr_author": "jcwalker3",
|
||||
"issue_number": 182,
|
||||
"issue_claim_status": "status:in-progress",
|
||||
"branch": "feat/issue-182-controller-handoff",
|
||||
"old_head_sha": self.OLD_SHA,
|
||||
"new_head_sha": self.NEW_SHA,
|
||||
@@ -1785,5 +1791,136 @@ class TestIssueSelectionContinuation(unittest.TestCase):
|
||||
self.assertEqual(result["grade"], "A")
|
||||
|
||||
|
||||
class TestContinuationModeProofs(unittest.TestCase):
|
||||
"""Issue #189: formal continuation proofs beyond #188 selection wall."""
|
||||
|
||||
OLD_SHA = PINNED
|
||||
NEW_SHA = OTHER
|
||||
REMOTE_OLD = "601c608c00000000000000000000000000000000"
|
||||
LEASE_SHA = "45c5cac2bc49dd112766ea218b18a71e9c5f8e99"
|
||||
PUSHED_SHA = "45c5cac2bc49dd112766ea218b18a71e9c5f8e99"
|
||||
|
||||
def test_force_with_lease_requires_lease_evidence(self):
|
||||
report = (
|
||||
"Issue #182 continuation. force-with-lease push to "
|
||||
"feat/issue-182-controller-handoff-enforcement."
|
||||
)
|
||||
result = assess_force_with_lease_push_report(
|
||||
report,
|
||||
old_remote_head=self.REMOTE_OLD,
|
||||
expected_lease_head=self.LEASE_SHA,
|
||||
new_pushed_head=self.PUSHED_SHA,
|
||||
branch_pushed="feat/issue-182-controller-handoff-enforcement",
|
||||
used_force_with_lease=True,
|
||||
)
|
||||
self.assertTrue(result["downgraded"])
|
||||
|
||||
def test_force_with_lease_complete_with_full_evidence(self):
|
||||
report = (
|
||||
"Issue #182 continuation with git push --force-with-lease. "
|
||||
f"Old remote head {self.REMOTE_OLD}. "
|
||||
f"Lease head {self.LEASE_SHA}. "
|
||||
f"Pushed head {self.PUSHED_SHA}. "
|
||||
"Branch feat/issue-182-controller-handoff-enforcement. "
|
||||
"Push branch only: only the feature branch was pushed."
|
||||
)
|
||||
result = assess_force_with_lease_push_report(
|
||||
report,
|
||||
old_remote_head=self.REMOTE_OLD,
|
||||
expected_lease_head=self.LEASE_SHA,
|
||||
new_pushed_head=self.PUSHED_SHA,
|
||||
branch_pushed="feat/issue-182-controller-handoff-enforcement",
|
||||
used_force_with_lease=True,
|
||||
)
|
||||
self.assertTrue(result["complete"])
|
||||
|
||||
def test_continuation_requires_issue_claim_status(self):
|
||||
report = (
|
||||
"Issue #182 continuation mode. PR #186. "
|
||||
f"old head {self.OLD_SHA} new head {self.NEW_SHA}. "
|
||||
"PR author jcwalker3. Branch feat/issue-182-test."
|
||||
)
|
||||
result = assess_continuation_mode_report(
|
||||
report,
|
||||
pr_number=186,
|
||||
pr_author="jcwalker3",
|
||||
issue_number=182,
|
||||
issue_claim_status="status:in-progress",
|
||||
branch="feat/issue-182-test",
|
||||
old_head_sha=self.OLD_SHA,
|
||||
new_head_sha=self.NEW_SHA,
|
||||
)
|
||||
self.assertTrue(result["downgraded"])
|
||||
|
||||
def test_canonical_secret_sweep_helper(self):
|
||||
sweep = canonical_secret_sweep_report(clean=True)
|
||||
self.assertEqual(sweep["method"], CANONICAL_SECRET_SWEEP_COMMAND)
|
||||
self.assertTrue(sweep["clean"])
|
||||
|
||||
def test_continuation_final_report_with_push_and_sweep_earns_a(self):
|
||||
branch = "feat/issue-182-controller-handoff-enforcement"
|
||||
report = "\n".join([
|
||||
"Issue #182 continuation mode — status:in-progress already set.",
|
||||
f"PR #186 updated via git push --force-with-lease.",
|
||||
f"Old PR head {self.OLD_SHA}; new PR head {self.NEW_SHA}.",
|
||||
f"Old remote head {self.REMOTE_OLD}.",
|
||||
f"Lease head {self.LEASE_SHA}. Pushed head {self.PUSHED_SHA}.",
|
||||
f"Branch {branch}. Push branch only: only the feature branch.",
|
||||
"PR author: jcwalker3. Session authored PR: yes.",
|
||||
"Continuation allowed: operator requested rebase.",
|
||||
"Open PR inventory included PR #186.",
|
||||
"## Controller Handoff",
|
||||
"- Task: continuation",
|
||||
"- Repo: Scaled-Tech-Consulting/Gitea-Tools",
|
||||
"- Role: author",
|
||||
"- Identity: prgs-author",
|
||||
"- Issue/PR: #182 / PR #186",
|
||||
f"- Branch/SHA: {branch}",
|
||||
"- Files changed: review_proofs.py",
|
||||
"- Validation: tests passed",
|
||||
"- Mutations: push_branch",
|
||||
"- Workspace mutations: none",
|
||||
"- Current status: PR mergeable",
|
||||
"- Blockers: none",
|
||||
"- Next: review",
|
||||
"- Safety: no review/merge",
|
||||
"- Continuation mode: issue #182 continuation",
|
||||
"- Existing PR: #186",
|
||||
"- PR author: jcwalker3",
|
||||
"- Issue claim status: status:in-progress",
|
||||
f"- Branch: {branch}",
|
||||
f"- Old PR head: {self.OLD_SHA}",
|
||||
f"- New PR head: {self.NEW_SHA}",
|
||||
"- Session authored PR: yes",
|
||||
"- Why continuation allowed: operator requested rebase",
|
||||
])
|
||||
result = assess_issue_selection_final_report(
|
||||
report,
|
||||
mode="continuation",
|
||||
continuation_proof={
|
||||
"pr_number": 186,
|
||||
"pr_author": "jcwalker3",
|
||||
"issue_number": 182,
|
||||
"issue_claim_status": "status:in-progress",
|
||||
"branch": branch,
|
||||
"old_head_sha": self.OLD_SHA,
|
||||
"new_head_sha": self.NEW_SHA,
|
||||
"session_authored_pr": True,
|
||||
"continuation_allowed_reason": "operator requested rebase",
|
||||
"push_proof": {
|
||||
"old_remote_head": self.REMOTE_OLD,
|
||||
"expected_lease_head": self.LEASE_SHA,
|
||||
"new_pushed_head": self.PUSHED_SHA,
|
||||
"branch_pushed": branch,
|
||||
"used_force_with_lease": True,
|
||||
},
|
||||
"secret_sweep": canonical_secret_sweep_report(clean=True),
|
||||
},
|
||||
edited_pr_numbers=[186],
|
||||
inventoried_pr_numbers=[186],
|
||||
)
|
||||
self.assertEqual(result["grade"], "A")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user