Skip to content

P2 F5.1a: extend the fail-closed PEP core to typed proposal admission #230

Description

@gnanirahulnutakki

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

  1. Accept only a cryptographically verified tenancy Scope and ActionProposeIntent role permission.
  2. Accept only a canonical action verb from internal/intent; do not duplicate the vocabulary.
  3. 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.
  4. Carry no raw args, target attributes, file content, justification, evidence payload, credential, header, or signature into policy audit events or metrics.
  5. Send the normalized proposal request through the existing PolicyHook and mandatory Auditor.
  6. Distinguish deny and require-approval as fail-closed outcomes suitable for later F5.9 handling; neither outcome may be mistaken for authorization.
  7. Preserve all existing read behavior and keep AllowReadHook write-denying.
  8. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureFeature / child issuegovernancePDP / audit / decision-ledger / tenancyphase-2Phase 2: first governed writepolicy-federationFan-out policy / approvals / abstentionsecuritySecurity hardening / isolation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions