feat: merge-report lease proof fields and handoff audit (#535)

Surface lease_proof_source / recovery reason from sanctioned session
provenance on gitea_merge_pr results, and block final reports that claim
manual/seeded/injected lease proof without MCP adoption evidence.

Closes #535
This commit is contained in:
2026-07-09 12:56:12 -04:00
parent c738e5b10d
commit 2b4c291f12
5 changed files with 330 additions and 0 deletions
+90
View File
@@ -42,6 +42,96 @@ def _lease_comment(
HEAD = "f" * 40
class TestDescribeSessionLeaseProof(unittest.TestCase):
def setUp(self):
leases.clear_session_lease()
def test_empty_session_is_none_kind(self):
proof = mla.describe_session_lease_proof(None)
self.assertIsNone(proof["lease_proof_source"])
self.assertEqual(proof["lease_proof_kind"], "none")
self.assertFalse(proof["lease_proof_sanctioned"])
def test_manual_seed_without_provenance(self):
leases.record_session_lease({
"pr_number": 536,
"session_id": "manual",
"comment_id": 1,
})
proof = mla.describe_session_lease_proof(leases.get_session_lease())
self.assertIsNone(proof["lease_proof_source"])
self.assertEqual(proof["lease_proof_kind"], "unsanctioned_manual_seed")
self.assertFalse(proof["lease_proof_sanctioned"])
def test_sanctioned_adopt_fields(self):
leases.record_session_lease(
{
"pr_number": 536,
"session_id": "merger-sess",
"comment_id": 700,
},
lease_provenance=mla.build_lease_provenance(
source=mla.SOURCE_ADOPT,
comment_id=700,
adopted_from_session_id="reviewer-sess",
adoption_reason=mla.DEFAULT_ADOPTION_REASON,
),
)
proof = mla.describe_session_lease_proof(leases.get_session_lease())
self.assertEqual(proof["lease_proof_source"], mla.SOURCE_ADOPT)
self.assertEqual(proof["lease_proof_kind"], "sanctioned_adoption")
self.assertTrue(proof["lease_proof_sanctioned"])
self.assertEqual(
proof["lease_recovery_reason"], mla.DEFAULT_ADOPTION_REASON
)
self.assertEqual(proof["lease_proof_comment_id"], 700)
self.assertEqual(proof["lease_adopted_from_session_id"], "reviewer-sess")
def test_sanctioned_acquire_fields(self):
leases.record_session_lease(
{
"pr_number": 536,
"session_id": "rev",
"comment_id": 50,
},
lease_provenance=mla.build_lease_provenance(
source=mla.SOURCE_ACQUIRE,
comment_id=50,
),
)
proof = mla.describe_session_lease_proof(leases.get_session_lease())
self.assertEqual(proof["lease_proof_source"], mla.SOURCE_ACQUIRE)
self.assertEqual(proof["lease_proof_kind"], "sanctioned_acquire")
self.assertTrue(proof["lease_proof_sanctioned"])
class TestManualLeaseProofHandoffAudit(unittest.TestCase):
def test_clean_merge_report_passes(self):
text = (
"Merged via gitea_merge_pr after gitea_adopt_merger_pr_lease. "
"lease_proof_source: gitea_adopt_merger_pr_lease"
)
result = mla.assess_manual_lease_proof_handoff(text)
self.assertTrue(result["proven"])
self.assertFalse(result["block"])
def test_manual_seeded_claim_without_mcp_evidence_blocks(self):
text = "Merged using manually seeded lease proof from prior session."
result = mla.assess_manual_lease_proof_handoff(text)
self.assertFalse(result["proven"])
self.assertTrue(result["block"])
self.assertTrue(any("#535" in r for r in result["reasons"]))
def test_historical_manual_mention_allowed_with_adoption_evidence(self):
text = (
"Historical incident used manually seeded lease; this merge used "
"gitea_adopt_merger_pr_lease with adoption_comment_id: 8288."
)
result = mla.assess_manual_lease_proof_handoff(text)
self.assertTrue(result["proven"])
self.assertFalse(result["block"])
class TestSanctionedProvenance(unittest.TestCase):
def setUp(self):
leases.clear_session_lease()