feat(ai): verify canonical learning writeback
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m42s
CD Pipeline / build-and-deploy (push) Successful in 6m29s
CD Pipeline / post-deploy-checks (push) Successful in 1m48s
AI 技術雷達監控 / ai-technology-watch (push) Successful in 45s
AWOOOI Harbor 110 Local Repair / workflow-shape (push) Successful in 1s
AWOOOI Harbor 110 Local Repair / harbor-110-local-repair (push) Successful in 50s
All checks were successful
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m42s
CD Pipeline / build-and-deploy (push) Successful in 6m29s
CD Pipeline / post-deploy-checks (push) Successful in 1m48s
AI 技術雷達監控 / ai-technology-watch (push) Successful in 45s
AWOOOI Harbor 110 Local Repair / workflow-shape (push) Successful in 1s
AWOOOI Harbor 110 Local Repair / harbor-110-local-repair (push) Successful in 50s
This commit is contained in:
@@ -44,6 +44,15 @@ def _verified_receipt(source_sha: str = "abc123") -> dict[str, str]:
|
||||
"verifier_failure_marks_apply_failed": "true",
|
||||
"verifier_failure_retry_first": "true",
|
||||
"post_verifier_raw_output_not_persisted": "true",
|
||||
"canonical_learning_source_verifier": (
|
||||
"cd_tests_and_production_source_sha_v1"
|
||||
),
|
||||
"canonical_playbook_resolver_complete": "true",
|
||||
"km_row_readback_required": "true",
|
||||
"playbook_row_readback_required": "true",
|
||||
"learning_failure_fail_closed": "true",
|
||||
"trust_failure_fail_closed": "true",
|
||||
"learning_receipts_public_safe": "true",
|
||||
"db_identity_verifier": (
|
||||
"runtime_role_fingerprint_secret_projection_and_"
|
||||
"representative_preflight_v2"
|
||||
@@ -119,6 +128,10 @@ def test_executor_trust_boundary_requires_live_controls_and_matching_source() ->
|
||||
assert verifier_boundary["source_boundary_verified"] is True
|
||||
assert verifier_boundary["active_blockers"] == []
|
||||
assert all(verifier_boundary["controls"].values())
|
||||
learning_boundary = readback["canonical_learning_source_boundary"]
|
||||
assert learning_boundary["source_boundary_verified"] is True
|
||||
assert learning_boundary["active_blockers"] == []
|
||||
assert all(learning_boundary["controls"].values())
|
||||
|
||||
|
||||
def test_executor_trust_boundary_single_writer_source_controls_fail_closed() -> None:
|
||||
@@ -155,6 +168,23 @@ def test_executor_trust_boundary_post_verifier_source_controls_fail_closed() ->
|
||||
)
|
||||
|
||||
|
||||
def test_executor_trust_boundary_canonical_learning_controls_fail_closed() -> None:
|
||||
receipt = _verified_receipt()
|
||||
receipt["playbook_row_readback_required"] = "false"
|
||||
|
||||
readback = build_executor_trust_boundary_readback(
|
||||
receipt,
|
||||
deployed_source_sha="abc123",
|
||||
)
|
||||
|
||||
learning_boundary = readback["canonical_learning_source_boundary"]
|
||||
assert readback["production_boundary_verified"] is True
|
||||
assert learning_boundary["source_boundary_verified"] is False
|
||||
assert "playbook_row_readback_required_not_verified" in (
|
||||
learning_boundary["active_blockers"]
|
||||
)
|
||||
|
||||
|
||||
def test_executor_trust_boundary_rejects_stale_or_incomplete_receipt() -> None:
|
||||
stale = build_executor_trust_boundary_readback(
|
||||
_verified_receipt("old-source"),
|
||||
|
||||
Reference in New Issue
Block a user