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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user