railiance-platform/workplans/RPF-WP-0069-bounded-executor-lanes.md
codex 702ca22069
All checks were successful
CCR intake gate / gate (push) Successful in 1m10s
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
CCR-2026-0059 applied, CCR-2026-0058 policy set up; RPF-WP-0069-T04 done
Founder-run net-kingdom executor-lanes.py (setup lanes_prepared, verify
lanes_verified; evidence net-kingdom ef6284c). 0059 verified after its first
journey run (NK-WP-0056-T10). 0058 role stays per admitted window.

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-10-31 19:49:11 +01:00

160 lines
6.3 KiB
Markdown

---
id: RPF-WP-0069
type: workplan
title: "Bounded executor lanes: write-next-version type, journey read and audit sender (NK-WP-0056)"
domain: financials
repo: railiance-platform
status: active
flavor: implementation
owner: claude
topic_slug: railiance
created: "2026-10-31"
updated: "2026-10-31"
related:
- NK-WP-0056
- NK-WP-0040
- RPF-WP-0067
state_hub_workstream_id: "6eb39172-babd-57d1-8a3b-f23c41347c22"
---
# RPF-WP-0069 — Bounded executor lanes (NK-WP-0056-T02 owner answer)
Receiving workplan for NetKingdom's owner request (State Hub message
`9d08288d-e866-4e1c-9c0b-f1cc0968bd4d`; net-kingdom
`docs/proposals/2026-10-31-nk56-t02-owner-requests.md`). Owner answer:
`docs/credential-lane-designs/bounded-executor.md`. No live, cluster or OpenBao action is
part of T01; every CCR stays `proposed` until its approvers act.
## Answer the request and add the write-next-version request type
```task
id: RPF-WP-0069-T01
status: done
priority: high
state_hub_task_id: "27432a77-e111-5aa9-9c23-34fb4c9a2984"
```
Answer doc written; new contract-only request type `workload-kv-write-next-version`
(`scripts/workload_kv_write_next_version.py`, `tests/test_workload_kv_write_next_version.py`,
dispatch in `scripts/credential-change.py`); CCR-2026-0058 drafted `proposed` with policy artifact
`openbao/policies/net-kingdom-bind-executor-svc-authelia-write.hcl`.
## Review CCR-2026-0058 (founder gate)
```task
id: RPF-WP-0069-T02
status: done
priority: high
needs_human: true
decision_id: c29c6eda-fa13-4d53-8293-17261eb437c1
blocked_on: human
blocking_reason: "Founder approval of CCR-2026-0058 and choice of standing or window-scoped write role (hub decision c29c6eda)"
state_hub_task_id: "3d4c818e-0c5f-5a14-9735-8056ff9fc7c3"
```
platform-owner and net-kingdom-owner approve or change CCR-2026-0058. The founder chooses
standing or window-scoped write role (recommendation: standing for the pilot). Binding is
confirmed only after `sso/nk-bind-executor` exists from the reviewed rapp-* package.
## Attended setup and verification of CCR-2026-0058
```task
id: RPF-WP-0069-T03
status: wait
priority: high
depends_on: [RPF-WP-0069-T02]
state_hub_task_id: "6b456804-c408-53bf-8e1d-49723108fca6"
```
After T02: an attended platform-admin (aal2) session sets `cas_required` on the svc-authelia key,
re-checks the coding-agent fence, applies policy and role, and records value-free positive and
negative receipts. This needs an owner setup script modelled on net-kingdom `bind-lane.py`
setup/verify; write it once approval exists. The founder runs it.
## Journey-secret read lane for the executor (NK-WP-0056-T10)
```task
id: RPF-WP-0069-T04
status: done
priority: medium
state_hub_task_id: "5615be47-2b25-5f7d-a1c2-d4391b1377d0"
```
Draft a `workload-kv-read` CCR (native login, data read only, 15m) for
`platform/workloads/net-kingdom/synthetic-journey/syn-journey`, stating that it widens
CCR-2026-0057's `runtime_access: false`. Waits for T10 scheduling and the ServiceAccount.
**2026-10-31, drafted** at the founder's request (net-kingdom session):
- `CCR-2026-0059-net-kingdom-bind-executor-syn-journey-read.yaml` and the policy
`openbao/policies/net-kingdom-bind-executor-syn-journey-read.hcl`: read on the data path, plus
`lookup-self` and `revoke-self`.
- Role `net-kingdom-bind-executor-syn-journey-read`: `sso/nk-bind-executor`, audience `openbao`, 15m, exactly one
policy. It is separate from the CCR-2026-0058 write role.
- `supersedes_boundary` names the CCR-2026-0057 change.
- `lifecycle.role_window` proposes a standing reader (founder decides; window-scoped is the alternative).
- `bound_claims_confirmed: false` until the ServiceAccount exists. Validates with only that warning. The
pre-existing failures (CCR-2026-0035 and 2 tests) are unrelated.
**Done 2026-10-31.**
- Approved by the founder (`831a0f9`). The binding was confirmed after the rapp deploy (`b4bafb0`).
- The founder ran net-kingdom `tools/service-binds/executor-lanes.py`:
- `setup`: the policy and standing role were applied; the CCR-2026-0058 policy and `cas_required` too.
- `verify`: exact policy, lease of at most 15m, reads only its path, and the negatives held.
- CCR-2026-0059 is `applied`. It becomes `verified` after the first journey run through the role (NK-WP-0056-T10).
- Finding: platform-admin has no `patch` on `platform/*`. KV metadata changes therefore use a write that names only the
changed field.
## Executor audit-core sender (NK-WP-0040)
```task
id: RPF-WP-0069-T05
status: wait
priority: medium
blocked_on: dependency
blocking_reason: "audit-core admits and names the sender (AUDIT-WP-0018-T02)"
state_hub_task_id: "5c582aef-ee9d-56ab-a4eb-2019933f00ac"
```
After audit-core admits the sender and names it, draft a `workload-kv-read` CCR in the
CCR-2026-0021/0022 shape: custody `platform/workloads/net-kingdom/bounded-executor/audit-sender`,
ESO into `sso/nk-bind-executor-audit`, ClusterSecretStore restricted to `sso`.
## LLDAP credential custody for the executor
```task
id: RPF-WP-0069-T06
status: cancel
priority: medium
needs_human: true
decision_id: 3d0c8f86-7b9c-456b-8951-5ae889829118
blocked_on: human
blocking_reason: "Founder chooses bind self-rotation (no account needed) or a lldap_password_manager account"
state_hub_task_id: "1456b467-f7c9-529d-9f3e-39404aaa36c6"
```
After secrets-engine answers the lane shape for the executor's LLDAP credential (its Q2),
draft the custody CCR here.
## Founder decisions 2026-10-31
Approved as `ready`. CCR-2026-0058 amended to a window-scoped role (created per admitted run, deleted after the
receipt; hub decision c29c6eda) and approved by platform-owner and net-kingdom-owner. T06 is cancelled: the bind
rotates its own password (hub decision 3d0c8f86), so the executor needs no LLDAP custody lane.
## Approve tool refuses the second approval for workload-kv-write-next-version
```task
id: RPF-WP-0069-T07
status: todo
priority: medium
state_hub_task_id: "b458e369-73b4-515e-ae01-e8afc0dd35eb"
```
`credential-change.py approve` sets `status: approved` after the first reviewer; for this request type, validation
then requires every role approval, so the second `approve` is refused before it can record itself (CCR-2026-0058's
net-kingdom-owner approval was recorded by hand in the tool's format). Make validation accept an `approved` request
that is still collecting role approvals, or have `approve` set `approved` only once all required roles are present,
with a test.