Goal
Extend the existing P1 read-only PEP so a closed-vocabulary typed proposal can reach the same policy hook and mandatory audit boundary without gaining any provider mutation capability.
This is a buildable F5.1 seam. It does not complete F5.1, F5.3, F5.9, or gitops.open-pr execution.
Reconciled starting state
Required contract
- Accept only a cryptographically verified tenancy Scope and ActionProposeIntent role permission.
- Accept only a canonical action verb from internal/intent; do not duplicate the vocabulary.
- Bind the policy request to a SHA-256 digest of a canonical, fully resolved intent envelope, including workspace, actor, intent identifier, verb, normalized target, and validated args.
- Carry no raw args, target attributes, file content, justification, evidence payload, credential, header, or signature into policy audit events or metrics.
- Send the normalized proposal request through the existing PolicyHook and mandatory Auditor.
- Distinguish deny and require-approval as fail-closed outcomes suitable for later F5.9 handling; neither outcome may be mistaken for authorization.
- Preserve all existing read behavior and keep AllowReadHook write-denying.
- Keep the PEP pure: no network, connector execution, hub server, MCP, local operation, filesystem, shell, credential, or dispatch dependency.
Acceptance
- Operator can present a valid proposal request to the PEP; reader, approver, admin, foreign workspace, forged actor, unknown verb, malformed digest, and nil context are refused and audited where a safe normalized request exists.
- Policy allow, deny, require-approval, hook error, invalid decision, and audit failure have distinct bounded behavior; no raw input is echoed.
- Changing any bound resolved-intent field changes the digest and invalidates the prior decision input.
- Concurrent calls are deterministic and race-clean; fuzzing proves malformed proposal inputs never panic or leak caller material.
- Boundary tests prove no mutation-capable imports or interfaces enter internal/pep.
- Existing read PEP tests and all repository gates remain green.
Deliberate non-goals
- no Ardur network adapter or built-in allow policy for writes
- no approval issuance or consumption
- no MCP elicitation or UI endpoint
- no credential minting or custody
- no connector execute or verify capability
- no F5.1 parent checkbox until all write surfaces are structurally forced through one orchestrator
Security basis
Cost
This pure in-process seam adds no provider, KMS, database, or network charge. Future Ardur, audit persistence, and credential-mint calls will add latency and external-service cost and must be measured separately.
Goal
Extend the existing P1 read-only PEP so a closed-vocabulary typed proposal can reach the same policy hook and mandatory audit boundary without gaining any provider mutation capability.
This is a buildable F5.1 seam. It does not complete F5.1, F5.3, F5.9, or gitops.open-pr execution.
Reconciled starting state
Required contract
Acceptance
Deliberate non-goals
Security basis
Cost
This pure in-process seam adds no provider, KMS, database, or network charge. Future Ardur, audit persistence, and credential-mint calls will add latency and external-service cost and must be measured separately.