access-engine/workplans/FLEX-WP-0040-bounded-execution-pdp-gate.md
tegwick 2cdce7eb8a
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 4s
State Hub ids written back (FLEX-WP-0040)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5502@bnt-lap001
Assistant-Session: 68b3b02f-5d0f-4e71-8421-796f62e50196
2026-11-01 04:02:34 +01:00

5.5 KiB

id type title domain repo status flavor owner created updated related state_hub_workstream_id
FLEX-WP-0040 workplan Bounded execution PDP gate: decide executor steps under an approved admission infotech access-engine active implementation access-engine 2026-10-31 2026-10-31
NK-WP-0056
FLEX-WP-0039
FLEX-WP-0031
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

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

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

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

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)

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

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.

7. Review policy v14: present-existing requester for founder approval

id: FLEX-WP-0040-T07
status: done
priority: high
state_hub_task_id: "77c43b54-e3dd-5dbb-a295-79361030fa2c"

informed-decision INFD-WP-0010 (present_existing, commit 0e66a33) lets the executor's own approval be presented to the founder; v13 refuses it with requester_mismatch. Compact-sitting v14 (proposed, sha256:8911458f36f1a60598aa19592a2d752a74dffe2617fd86238407ac87bc300fde, examples/informed-decision-present-existing-review/) keeps every v13 decision and admits requester service:nk-bind-executor only from submitter nk-bind-executor, memo class and approval action bounded-execution, a human reviewer at KeyCape aal2, and never the approval actor itself (gate-house GH-DEC-2026-026, class C2). Owner note: docs/compact-sitting-v14-present-existing.md. Gate met: 46 embedded tests and the Go pin/evaluation tests pass; v13 untouched. Live use waits on informed-decision carrying approval_action and a founder release (image, values, consumer pin); no deployment from this task.

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.