--- id: FLEX-WP-0040 type: workplan title: "Bounded execution PDP gate: decide executor steps under an approved admission" domain: infotech repo: access-engine status: ready flavor: implementation owner: access-engine created: "2026-10-31" updated: "2026-10-31" related: [NK-WP-0056, FLEX-WP-0039, FLEX-WP-0031] state_hub_workstream_id: "1b0a9f9e-9d09-52da-8dd0-8269dd3d27ec" --- # FLEX-WP-0040 — Bounded execution PDP gate NetKingdom's proposed Bounded Execution Admission v0.1 (NK-WP-0056) lets the founder approve, at `aal2`, an exact digested admission that a bounded executor consumes once. Owner answer: `docs/bounded-execution-admission-pdp.md`. PDP gating is in scope and recommended for production; the T06 pilot may run on local enforcement without it. Today the typed task path (`docs/trusted-service-task-source.md`) serves only the secrets-engine v2 contract, requires an unconsumed claim, and the Approval claim carries no approver assurance. Everything below lands as `proposed` source, evaluated in tests only. No deployment, caller trust or credential is admitted by this workplan. ## 1. Settle the claim inputs with approval-engine ```task id: FLEX-WP-0040-T01 status: wait priority: high state_hub_task_id: "2fe53d9e-738c-5b1f-ab05-96d83894d47e" ``` Wait: approval-engine answers to NK-WP-0056-T02 (binding to `{admission_id, admission_digest}`, approver assurance `aal2`, consume scope) plus our two additions: `consumed_by` and `consumed_at` in the claim. Record the agreed claim fields here. Gate: written claim field list with owner ack. ## 2. Pack owner and semantic review ```task id: FLEX-WP-0040-T02 status: wait priority: medium state_hub_task_id: "a7f9a307-01a5-56a6-9c96-fdb4c83118f5" ``` Wait: founder confirms the proposal — access-engine owns pack mechanics and fixtures; NetKingdom (BEA owner) owns what a ceiling admits; gate-house reviews authority-ceiling semantics. Gate: decision recorded. ## 3. Generalise the typed path caller map ```task id: FLEX-WP-0040-T03 status: todo priority: medium state_hub_task_id: "c9382486-55d9-5b40-b64e-d7c14343bbf6" ``` Replace the single hard-wired secrets-engine mapping with an owner-installed caller map; first new entry `system:serviceaccount:sso:nk-bind-executor` → `service:nk-bind-executor`. Gate: existing secrets-engine v2 tests unchanged and passing; unknown service accounts refuse; generic `/v1/check` still refuses task execution. ## 4. Vocabulary and admission digest ```task id: FLEX-WP-0040-T04 status: todo priority: medium depends_on: [FLEX-WP-0040-T01] state_hub_task_id: "226afa23-3f6f-5b25-a2e6-48e7d086d597" ``` Add actions `start` and `execute-step` on resource type `bounded-execution-admission` (system `net-kingdom`). The executor submits the admission document; access-engine recomputes its digest by NK's BEA digest rule and requires equality with the claim's admission digest. Gate: digest fixtures shared with NetKingdom's validator agree byte-for-byte. ## 5. Policy pack `net-kingdom.bounded-execution` (DENY by default) ```task id: FLEX-WP-0040-T05 status: todo priority: medium depends_on: [FLEX-WP-0040-T02, FLEX-WP-0040-T03, FLEX-WP-0040-T04] state_hub_task_id: "cc5e1435-57e0-5011-b8f3-dbffe959b91c" ``` `start`: claim valid and unconsumed, approver HUMAN at `aal2` and not the executor, executor equals admission executor, now inside `window`. `execute-step`: claim consumed once by this executor inside the window; step id/operation/target/mode/scope match the digested `plan.steps` and lie inside `scope_ceiling`; `max_concurrent` respected. Fixtures from `net-kingdom/examples/bounded-execution-admission/bind-rotation-svc-authelia.yaml` including out-of-ceiling, wrong executor, expired window, replayed consume and missing assurance. Gate: pack validates, all fixtures pass, the existing `apply` gap test stays as characterisation. ## 6. Live gate readiness ```task id: FLEX-WP-0040-T06 status: wait priority: low depends_on: [FLEX-WP-0040-T05, FLEX-WP-0039-T01] state_hub_task_id: "f62be506-96d0-50fd-9874-b2a4df6f1dc8" ``` Wait: FLEX-WP-0039 readiness surface and a founder rollout decision for a pin serving the pack, with the executor's declared fail-closed stance. Gate: founder-approved rollout; no live change from this repo's agents. ## Founder decision 2026-10-31 Approved by the founder (`proposed` -> `ready`) after the NK-WP-0056-T02 owner answers (hub decision 19afd15e). The T06 pilot runs without the gate and records it as `not-evaluated`; a second admission needs this gate or a founder-recorded exception.