Problem
Fresh exact-head review of PR #65 found a distinct issuance-provenance bypass after #169's direct-constructor repair. AuthorizationDecision(...) was sealed, but module-level _decision(...) remained directly callable. It accepted caller-constructible _RequestSnapshot / _PolicySnapshot values plus allowed=True, entered a temporary decision-issuance ID capability itself, and returned fully issued authority without evaluate_purpose_bound_access(...). Python's leading underscore is a naming convention, not an executable trust boundary.
Test-first repair in #65
RED 7aebe4e4190c8742ed9047db9886778a0f010b42 captured fabricated-snapshot helper issuance. Production 2b522170adfadcc2b3803183482a23cad4efca3c removed _DECISION_ISSUANCE_IDS, made the public constructor permanently non-authoritative, made the legacy helper fail closed, and moved actual issuance under canonical evaluation. Successor 1e0c124ad5a5f24c62d310b7268c5e5ebd7721c8 fixed absence of the global temporary issuance capability as an invariant.
Independent review of that successor then found #171: the decision snapshot registry itself was still consumer-mutable. That is a separate authority-storage capability defect, not evidence that #170 should be closed. #171 RED 98ad797a…/fc4fb5c… and production 3ea988edf6bf50d15765784b8b85725d055f4af5 move backing registry mutation into evaluator-private closure state and expose only a read-only mapping view.
Acceptance
Keep #170 open together with #171 until canonical #65 exact head 3ea988edf6bf50d15765784b8b85725d055f4af5 has fresh terminal Keyverse/People/repository-integrity/security evidence at the owned 100% statement/branch contract and independent current-head review. Predecessor evidence does not transfer. Do not copy owner source into #163/#165 or consume mutable #65 as a released dependency.
Problem
Fresh exact-head review of PR #65 found a distinct issuance-provenance bypass after #169's direct-constructor repair.
AuthorizationDecision(...)was sealed, but module-level_decision(...)remained directly callable. It accepted caller-constructible_RequestSnapshot/_PolicySnapshotvalues plusallowed=True, entered a temporary decision-issuance ID capability itself, and returned fully issued authority withoutevaluate_purpose_bound_access(...). Python's leading underscore is a naming convention, not an executable trust boundary.Test-first repair in #65
RED
7aebe4e4190c8742ed9047db9886778a0f010b42captured fabricated-snapshot helper issuance. Production2b522170adfadcc2b3803183482a23cad4efca3cremoved_DECISION_ISSUANCE_IDS, made the public constructor permanently non-authoritative, made the legacy helper fail closed, and moved actual issuance under canonical evaluation. Successor1e0c124ad5a5f24c62d310b7268c5e5ebd7721c8fixed absence of the global temporary issuance capability as an invariant.Independent review of that successor then found #171: the decision snapshot registry itself was still consumer-mutable. That is a separate authority-storage capability defect, not evidence that #170 should be closed. #171 RED
98ad797a…/fc4fb5c…and production3ea988edf6bf50d15765784b8b85725d055f4af5move backing registry mutation into evaluator-private closure state and expose only a read-only mapping view.Acceptance
Keep #170 open together with #171 until canonical #65 exact head
3ea988edf6bf50d15765784b8b85725d055f4af5has fresh terminal Keyverse/People/repository-integrity/security evidence at the owned 100% statement/branch contract and independent current-head review. Predecessor evidence does not transfer. Do not copy owner source into #163/#165 or consume mutable #65 as a released dependency.