From 42426db0c46babd656700943f2c49cc9b9305dbb Mon Sep 17 00:00:00 2001 From: Eva Date: Mon, 1 Jun 2026 21:24:11 +0700 Subject: [PATCH] Expose structured handoff evidence in RRI --- qa/release_readiness.py | 4 ++++ qa/test_release_readiness.py | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/qa/release_readiness.py b/qa/release_readiness.py index dfd042ef..6710dfcd 100644 --- a/qa/release_readiness.py +++ b/qa/release_readiness.py @@ -649,6 +649,10 @@ def main() -> int: "missing_release_personas": missing_release_personas, "harness_failures": harness_failures, "evidence_gaps": evidence_gaps, + "handoff_evidence": { + **handoff_proof, + "evidence_gaps": handoff_evidence_gaps, + }, "gates_passed": passed, "gates_total": total_gates, "failed_gates": failed, diff --git a/qa/test_release_readiness.py b/qa/test_release_readiness.py index 825cef33..a431c50e 100644 --- a/qa/test_release_readiness.py +++ b/qa/test_release_readiness.py @@ -1157,6 +1157,14 @@ def test_split_vm_persona_evidence_uses_handoff_json_for_native_gate(self): self.assertEqual(payload["signals"]["native_gate_source"], str(handoff)) self.assertEqual(payload["artifact_sources"]["handoff_json"], str(handoff)) self.assertTrue(payload["signals"]["handoff_proof"]["valid"]) + self.assertEqual(payload["handoff_evidence"]["path"], str(handoff)) + self.assertTrue(payload["handoff_evidence"]["valid"]) + self.assertEqual(payload["handoff_evidence"]["evidence_gaps"], []) + self.assertEqual( + sorted(payload["handoff_evidence"]["gates"]), + ["built_app_codex_playtest", "built_app_scripted_smoke", "web_scripted_smoke"], + ) + self.assertEqual(payload["handoff_evidence"]["gates"]["built_app_codex_playtest"]["manifest_verdict"], "passed") self.assertIn("handoff_json=", payload["gate_detail"]["native_gate"]) def test_handoff_json_must_prove_engine_state_authority(self):