NK-WP-0056-T02 done: all seven owners answered; founder decisions collected

approval-engine and audit-core answers recorded; open founder decisions listed
in the answer table; misattributed hub messages noted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 994874@bnt-lap001
Assistant-Session: 6017c416-d619-47eb-bd1a-f670a02d7d87
This commit is contained in:
tegwick 2026-10-31 14:34:00 +01:00
parent aeb7fd81f4
commit 522b5d08ed
3 changed files with 31 additions and 5 deletions

View file

@ -344,7 +344,7 @@
| task | NK-WP-0055-T15 | done | — | workplans/NK-WP-0055-security-platform-production-readiness.md | | task | NK-WP-0055-T15 | done | — | workplans/NK-WP-0055-security-platform-production-readiness.md |
| task | NK-WP-0055-T16 | wait | — | workplans/NK-WP-0055-security-platform-production-readiness.md | | task | NK-WP-0055-T16 | wait | — | workplans/NK-WP-0055-security-platform-production-readiness.md |
| task | NK-WP-0056-T01 | done | — | workplans/NK-WP-0056-bounded-executor-path.md | | task | NK-WP-0056-T01 | done | — | workplans/NK-WP-0056-bounded-executor-path.md |
| task | NK-WP-0056-T02 | wait | — | workplans/NK-WP-0056-bounded-executor-path.md | | task | NK-WP-0056-T02 | done | — | workplans/NK-WP-0056-bounded-executor-path.md |
| task | NK-WP-0056-T03 | done | — | workplans/NK-WP-0056-bounded-executor-path.md | | task | NK-WP-0056-T03 | done | — | workplans/NK-WP-0056-bounded-executor-path.md |
| task | NK-WP-0056-T04 | done | — | workplans/NK-WP-0056-bounded-executor-path.md | | task | NK-WP-0056-T04 | done | — | workplans/NK-WP-0056-bounded-executor-path.md |
| task | NK-WP-0056-T05 | done | — | workplans/NK-WP-0056-bounded-executor-path.md | | task | NK-WP-0056-T05 | done | — | workplans/NK-WP-0056-bounded-executor-path.md |

View file

@ -16,11 +16,11 @@ Every answer below is the owner's agreement. Nothing here assigns work to anothe
| Component | Owner (hub agent) | Asked to carry | Answer | | Component | Owner (hub agent) | Asked to carry | Answer |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| Admission carrier | approval-engine | The admission as a consumable approval | pending | | Admission carrier | approval-engine | The admission as a consumable approval | answered 2026-10-31 (approval-engine `5028fe2`, `docs/bounded-execution-admission-carrier.md`, APPROVAL-WP-0007 proposed): binding, single consume and revoke-before-start supported today; the executor creates the approval request itself (`actor` must equal its token subject, `human_control: true`), the founder approves; aal2 is recorded per entry but not enforced (APPROVAL-WP-0007-T01 adds a floor; until then the executor checks it); `request_digest` = admission digest for the pilot; independent GET before consume is the intended reading; consume does not check consumer = actor (T02 there); revoker identity not recorded (T03 there) |
| Admission as input claim | access-engine | Policy decision for executor operations under an admission | answered 2026-10-31 (access-engine `f5b7a90`, `docs/bounded-execution-admission-pdp.md`, FLEX-WP-0040 proposed): yes for production, two decisions `start` (before consume) and `execute-step` (after), new pack `net-kingdom.bounded-execution`, caller map generalised; needs approval-engine to add approver assurance and `consumed_by`/`consumed_at` to the claim; source mid/late November, live after the pilot. Pilot without the gate acceptable if the receipt records the PDP as `not-evaluated`; a second admission should not run without the gate unless the founder records an exception | | Admission as input claim | access-engine | Policy decision for executor operations under an admission | answered 2026-10-31 (access-engine `f5b7a90`, `docs/bounded-execution-admission-pdp.md`, FLEX-WP-0040 proposed): yes for production, two decisions `start` (before consume) and `execute-step` (after), new pack `net-kingdom.bounded-execution`, caller map generalised; needs approval-engine to add approver assurance and `consumed_by`/`consumed_at` to the claim; source mid/late November, live after the pilot. Pilot without the gate acceptable if the receipt records the PDP as `not-evaluated`; a second admission should not run without the gate unless the founder records an exception |
| Executor credential lanes | secrets-engine | Lifecycle of the executor's OpenBao credentials | answered 2026-10-31 (secrets-engine `8ec5aff`, `docs/bounded-executor-credential-lanes.md`, SECRETS-WP-0017 proposed): engine lanes are read-only and AppRole-only today, so railiance-platform applies the Kubernetes role and policy and secrets-engine catalogs it as metadata; proposes the role exists only during the admitted window; Q2: prefer self-rotation of the bind (proven on the pinned LLDAP, see `docs/evidence/2026-10-31-nk56-lldap-self-rotation/`), fallback a `lldap_password_manager` account. Note: its message 3e865656 carried another worker's text by mistake; 084a731e is the correct answer | | Executor credential lanes | secrets-engine | Lifecycle of the executor's OpenBao credentials | answered 2026-10-31 (secrets-engine `8ec5aff`, `docs/bounded-executor-credential-lanes.md`, SECRETS-WP-0017 proposed): engine lanes are read-only and AppRole-only today, so railiance-platform applies the Kubernetes role and policy and secrets-engine catalogs it as metadata; proposes the role exists only during the admitted window; Q2: prefer self-rotation of the bind (proven on the pinned LLDAP, see `docs/evidence/2026-10-31-nk56-lldap-self-rotation/`), fallback a `lldap_password_manager` account. Note: its message 3e865656 carried another worker's text by mistake; 084a731e is the correct answer |
| OpenBao roles and CCR types | railiance-platform | Kubernetes auth role and policies for the executor; CCR request types | answered 2026-10-31 (railiance-platform `8b57d27`, not pushed; `docs/credential-lane-designs/bounded-executor.md`, RPF-WP-0069): new request type `workload-kv-write-next-version` (read+update on one data path, `cas_required`, no metadata/delete), CCR-2026-0058 drafted `proposed` for the svc-authelia write role; one role per lane; journey read needs a `workload-kv-read` CCR that widens CCR-2026-0057; audit sender in the CCR-2026-0021/0022 shape once audit-core names it. Recommends a standing write role for the pilot (secrets-engine recommends window-only: founder decides) | | OpenBao roles and CCR types | railiance-platform | Kubernetes auth role and policies for the executor; CCR request types | answered 2026-10-31 (railiance-platform `8b57d27`, not pushed; `docs/credential-lane-designs/bounded-executor.md`, RPF-WP-0069): new request type `workload-kv-write-next-version` (read+update on one data path, `cas_required`, no metadata/delete), CCR-2026-0058 drafted `proposed` for the svc-authelia write role; one role per lane; journey read needs a `workload-kv-read` CCR that widens CCR-2026-0057; audit sender in the CCR-2026-0021/0022 shape once audit-core names it. Recommends a standing write role for the pilot (secrets-engine recommends window-only: founder decides) |
| Receipt holder | audit-core | Execution-attribution receipts from the executor | pending | | Receipt holder | audit-core | Execution-attribution receipts from the executor | answered 2026-10-31 (audit-core `1ef939b`, `docs/bounded-executor-receipts.md`, AUDIT-WP-0018 proposed): yes, from a registered in-cluster sender `nk-bounded-executor` (`secret_policy: reject`); one receipt per run with steps inside `data`, plus a separate `execution.run.started` event at consume so a crashed run is detectable; envelope ids `run:<run_id>:started/receipt`, subject `admission:<id>`; asks NetKingdom to label `decision_refs` and decide the singular target/action shape |
| Agent executors | glas-harness | Session contract so a harness-launched agent can be an executor | answered 2026-10-31 (glas-harness `92dd299`, `docs/bounded-execution-agent-executor.md`, GLAS-WP-0018-T07): not before GLAS-WP-0018-T04 (proposed; needs key-cape agent tokens with `act` and sandbox token delivery); a verifiable harness-launched assertion must be a key-cape-signed per-run token, claim set proposed; glas-harness proposes to own the agent-executor path later. Founder: approve GLAS-WP-0018 or not | | Agent executors | glas-harness | Session contract so a harness-launched agent can be an executor | answered 2026-10-31 (glas-harness `92dd299`, `docs/bounded-execution-agent-executor.md`, GLAS-WP-0018-T07): not before GLAS-WP-0018-T04 (proposed; needs key-cape agent tokens with `act` and sandbox token delivery); a verifiable harness-launched assertion must be a key-cape-signed per-run token, claim set proposed; glas-harness proposes to own the agent-executor path later. Founder: approve GLAS-WP-0018 or not |
| Runtime package | railiance-apps | Where the new `rapp-*` package lives and who creates it | answered 2026-10-31 (railiance-apps `c733e86`, `docs/rapp-bounded-executor-intake.md`): not railiance-apps; `rmgr rapp wrap` (repo-manager) creates it locally, the Forgejo remote is the founder's; the image is built in the app repo (net-kingdom), the rapp pins its digest; deploy by `kubectl` server-side apply run by the founder; recommends one Job per admission. Founder decisions F1-F4 open | | Runtime package | railiance-apps | Where the new `rapp-*` package lives and who creates it | answered 2026-10-31 (railiance-apps `c733e86`, `docs/rapp-bounded-executor-intake.md`): not railiance-apps; `rmgr rapp wrap` (repo-manager) creates it locally, the Forgejo remote is the founder's; the image is built in the app repo (net-kingdom), the rapp pins its digest; deploy by `kubectl` server-side apply run by the founder; recommends one Job per admission. Founder decisions F1-F4 open |
@ -91,3 +91,21 @@ Every answer below is the owner's agreement. Nothing here assigns work to anothe
1. The executor needs a deployment package under ADR-0015 (working name `rapp-bounded-executor`): 1. The executor needs a deployment package under ADR-0015 (working name `rapp-bounded-executor`):
an image built by Forgejo, and a Deployment or Job in `sso` with its own ServiceAccount. Who an image built by Forgejo, and a Deployment or Job in `sso` with its own ServiceAccount. Who
creates the repository, and which conventions apply? creates the repository, and which conventions apply?
## Outcome (2026-10-31)
All seven owners answered through worker agents in their repositories (founder instruction 2026-10-31). Open founder
decisions, collected:
1. Executor OpenBao role: standing (railiance-platform) or only during the admitted window (secrets-engine).
2. Directory credential: self-rotation of the bind (proven on the pinned LLDAP) or a `lldap_password_manager` account.
3. CCR-2026-0058 (`proposed`): approve or change.
4. rapp package: create `rapp-bounded-executor` (F1), executor source location and image workflow in net-kingdom (F2),
one Job per admission (F3), namespace `sso` (F4).
5. Pilot without the PDP gate (receipt records `not-evaluated`); a second admission only with the gate or a recorded exception.
6. Adopt the `execution.run.started` event; `decision_refs` labels and the admission-level target/action shape.
7. Approve the proposed owner workplans: APPROVAL-WP-0007, FLEX-WP-0040, SECRETS-WP-0017, RPF-WP-0069, AUDIT-WP-0018,
GLAS-WP-0018 (and glas-harness owning agent executors later).
Hub hygiene: messages 3e865656, b3b9e3f3, 1a5ea23d, b748ba04 and 5a2dfbfb were posted under the wrong sender by workers
sharing a scratch file; each is flagged by its worker's correction message and marked read here.

View file

@ -85,12 +85,11 @@ privacyIDEA-cache finding; recurring admissions are excluded from v0.1. The Appr
```task ```task
id: NK-WP-0056-T02 id: NK-WP-0056-T02
status: wait status: done
priority: high priority: high
assignee: claude-code assignee: claude-code
needs_human: true needs_human: true
decision_id: 6d1adce9-40e2-472a-92bb-0ae942218ae8 decision_id: 6d1adce9-40e2-472a-92bb-0ae942218ae8
blocking_reason: "Owner answers pending from approval-engine, access-engine, secrets-engine, railiance-platform, audit-core, glas-harness and railiance-apps (requests sent 2026-10-31)."
intervention_note: "Founder chooses the executor runtime owner; owner answers are agreements, not agent decisions." intervention_note: "Founder chooses the executor runtime owner; owner answers are agreements, not agent decisions."
depends_on: [NK-WP-0056-T01] depends_on: [NK-WP-0056-T01]
state_hub_task_id: "7263417b-b227-54f7-9edc-3e7f97cf132f" state_hub_task_id: "7263417b-b227-54f7-9edc-3e7f97cf132f"
@ -113,6 +112,15 @@ executors. Owner requests sent the same day through the hub to approval-engine,
railiance-platform, audit-core, glas-harness and railiance-apps railiance-platform, audit-core, glas-harness and railiance-apps
([requests and answer table](../docs/proposals/2026-10-31-nk56-t02-owner-requests.md)). Waiting on their answers. ([requests and answer table](../docs/proposals/2026-10-31-nk56-t02-owner-requests.md)). Waiting on their answers.
**Done 2026-10-31.** All seven owners answered (worker agents in each repository, founder instruction); answers and
the collected founder decisions are in the [answer table](../docs/proposals/2026-10-31-nk56-t02-owner-requests.md).
Key results: approval-engine already carries binding, single consume and revoke (aal2 recorded, not yet enforced);
access-engine accepts the pilot without the PDP gate if the receipt says `not-evaluated`; railiance-platform added
request type `workload-kv-write-next-version` and drafted CCR-2026-0058; secrets-engine prefers self-rotation, which
NetKingdom proved on the pinned LLDAP; audit-core holds receipts plus a `run.started` event; railiance-apps: repo-manager
creates the rapp, the image is built in net-kingdom, one Job per admission; glas-harness: agent executors after
GLAS-WP-0018-T04.
## Executor identity and authority ceiling ## Executor identity and authority ceiling
```task ```task