CUST-WP-0075-T03: route human gates to hub decisions
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: fable
Assistant-Process: 3775@bnt-lap001
Assistant-Session: cfacb6a5-ad5b-4f79-ac67-053e3b0d34a3
This commit is contained in:
codex 2026-10-03 03:14:01 +02:00
parent 6cfc7e5f73
commit 4e007e46b9
7 changed files with 58 additions and 7 deletions

View file

@ -9,7 +9,7 @@ flavor: implementation
owner: codex
topic_slug: railiance
created: "2026-08-22"
updated: "2026-09-27"
updated: "2026-10-03"
related:
- AUDIT-WP-0008
- WH-ENG-20260822-AUDIT-E2-01
@ -180,6 +180,7 @@ live window after the Whitehat engagement cleanup.
id: RPF-WP-0015-T03
status: wait
needs_human: true
decision_id: 2fd5849c-240e-4d0a-bf07-5ebf8dfce3fd
blocked_on: message-from:railiance-infra
blocking_reason: "Single-node outage exercise needs operator access and a declared restart order coordinated with railiance-infra, railiance-cluster, audit-core and the OpenBao package owner."
priority: high
@ -267,6 +268,8 @@ be retried. A future window requires a login adapter that proves isolated
writable token-helper state and output suppression on persistence failure,
followed by fresh owner receipts and a fresh human decision.
2026-10-03: human gate routed to hub decision 2fd5849c-240e-4d0a-bf07-5ebf8dfce3fd (D5: Production risk acceptance and live-host authorizations) by CUST-WP-0075; resolving that decision raises C-40 here.
## T04 — Route the contracts and approval gates
```task

View file

@ -9,7 +9,7 @@ flavor: implementation
owner: codex
topic_slug: railiance
created: "2026-08-23"
updated: "2026-09-27"
updated: "2026-10-03"
related:
- KEY-WP-0011
origin: routed
@ -59,6 +59,7 @@ predecessor revocation, and sanitized evidence.
id: RPF-WP-0027-T03
status: wait
needs_human: true
decision_id: 62aa95e4-3ccc-4867-8806-5e3db005b483
blocked_on: message-from:net-kingdom
blocking_reason: "Attended resolver run: postchecks outstanding; NetKingdom asked to package the complete sequence as one receipt-producing command for the next attended session."
priority: high
@ -96,6 +97,8 @@ The Railiance-side custody contract is drafted at
OpenBao path and field names unfilled pending owner confirmation; the routing
lane remains unresolved and no credential fetch or retry is authorized.
2026-10-03: human gate routed to hub decision 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1: Attended OpenBao provisioning window: one session clears the pending credential lanes) by CUST-WP-0075; resolving that decision raises C-40 here.
## T04 — Execute the attended rotation
```task
@ -129,6 +132,7 @@ status, timestamps, and cleanup receipts.
id: RPF-WP-0027-T06
status: wait
needs_human: true
decision_id: 62aa95e4-3ccc-4867-8806-5e3db005b483
blocking_reason: "Platform/OpenBao owner must publish the non-secret routing receipt for both lanes through the attended handoff; values are never inferred."
priority: high
state_hub_task_id: "3b9748c4-2906-5ba7-9d34-0a7067a59283"
@ -147,6 +151,8 @@ Do not invent mount/path/field names. The KeyCape factor service lane from
RPF-WP-0040 remains the separate active custody; it does not close these
incident lanes.
2026-10-03: human gate routed to hub decision 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1: Attended OpenBao provisioning window: one session clears the pending credential lanes) by CUST-WP-0075; resolving that decision raises C-40 here.
## Portfolio review — 2026-09-05
INTENT binding: secure custody and incident closure. The goal above is historical;

View file

@ -8,7 +8,7 @@ status: blocked
flavor: implementation
owner: codex
created: "2026-09-05"
updated: "2026-09-27"
updated: "2026-10-03"
related:
- RPF-WP-0032
- RPF-WP-0033
@ -45,6 +45,7 @@ the signing dependency belongs to the proposed FLEX-WP-0020-T05 cutover.
id: RPF-WP-0035-T02
status: wait
needs_human: true
decision_id: 62aa95e4-3ccc-4867-8806-5e3db005b483
blocking_reason: "KEY-WP-0009 finished; remaining gate is human: attended platform provisioning of the exact JWT mount/role/policy; KeyCape issuer/JWKS and service registration under KEY-WP-0009."
priority: high
state_hub_task_id: "e0c82ea9-05a5-537e-8fbf-67534263572e"
@ -69,12 +70,15 @@ issuer/audience/subject/claims and unrelated secret access fail, bounded TTL
and revocation are proven, the consumer explicitly opts into the verified
contract, and rollback/cleanup receipts contain no secret material.
2026-10-03: human gate routed to hub decision 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1: Attended OpenBao provisioning window: one session clears the pending credential lanes) by CUST-WP-0075; resolving that decision raises C-40 here.
## Implement the platform operator-write CCR contract and Fluid lane
```task
id: RPF-WP-0035-T03
status: wait
needs_human: true
decision_id: 62aa95e4-3ccc-4867-8806-5e3db005b483
depends_on: [MASON-WP-0005-T02]
blocking_reason: "Attended platform policy/schema apply after MASON-WP-0005 construction coordination confirms the capability schema."
priority: high
@ -101,6 +105,8 @@ only the exact matrix, negative/expiry/revocation checks pass, custody is seeded
through the separate writer, and the verified route has a safe handoff receipt.
The unattended adapter remains a separate demand and gets no operator session.
2026-10-03: human gate routed to hub decision 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1: Attended OpenBao provisioning window: one session clears the pending credential lanes) by CUST-WP-0075; resolving that decision raises C-40 here.
## Accept the needed signing lane and deliver it to the owning runtime
```task
@ -255,6 +261,7 @@ Rotation is a distinct, version-guarded operation.
id: RPF-WP-0035-T07
status: wait
needs_human: true
decision_id: 1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa
blocking_reason: "Founder HOLD (2026-09-21) on the legacy whynot-design npm pointer; custody disposition is an attended decision."
priority: high
state_hub_task_id: "0dd7c9a5-65a0-53fc-b6c3-5ad96ee56f7b"
@ -297,12 +304,15 @@ disposition is recorded. Do not bring the legacy duplicate under a CCR. If the v
ungoverned, treat it as an exposure with the same custody rules as RPF-WP-0027:
never record the value, fingerprint, length or shape.
2026-10-03: human gate routed to hub decision 1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa (D3: Trust root and secret custody: unseal/recovery holders, break-glass, and the deferred rotation of exposed material) by CUST-WP-0075; resolving that decision raises C-40 here.
## Admit the separate approval client-side readers
```task
id: RPF-WP-0035-T06
status: wait
needs_human: true
decision_id: 62aa95e4-3ccc-4867-8806-5e3db005b483
blocking_reason: "INFD-WP-0001-T07/T08 terminal; remaining gate is human approval of the scoped delivery proof; front door stays non-resolvable."
priority: high
intervention_note: ""
@ -419,12 +429,15 @@ receipts to HFACT-WP-0001-T03, SECRETS-WP-0009-T03 and APPROVAL-WP-0002-T01/T05.
Audit receiver/sender custody remains AUDIT-WP-0009-T09 and must not be folded
into this client-identity grant.
2026-10-03: human gate routed to hub decision 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1: Attended OpenBao provisioning window: one session clears the pending credential lanes) by CUST-WP-0075; resolving that decision raises C-40 here.
## Admit the two factory audit-sender custody lanes
```task
id: RPF-WP-0035-T08
status: wait
needs_human: true
decision_id: 62aa95e4-3ccc-4867-8806-5e3db005b483
blocking_reason: "AUDIT-WP-0009-T09/T11 done; remaining gate is human: attended first-provision via factory_audit_custody.py after consuming AUDIT-WP-0009-T09/T11 declarations."
priority: high
assignee: railiance-platform
@ -450,6 +463,8 @@ Approval Engine's missing namespace remains its owner prerequisite.
[Preparation evidence](../docs/evidence/2026-09-11-factory-audit-custody.json).
Do not fold these senders into CCR-2026-0019 or the cancelled CCR-2026-0020.
2026-10-03: human gate routed to hub decision 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1: Attended OpenBao provisioning window: one session clears the pending credential lanes) by CUST-WP-0075; resolving that decision raises C-40 here.
## Dependency review — 2026-09-06
### 2026-09-09 tenant question resolved — no change needed

View file

@ -8,7 +8,7 @@ status: blocked
flavor: implementation
owner: codex
created: "2026-09-06"
updated: "2026-09-27"
updated: "2026-10-03"
state_hub_workstream_id: "7beec1a7-aa82-5a36-9a66-6b60008a2455"
---
@ -74,6 +74,7 @@ removed. Evidence: `docs/evidence/forgejo-scaleway-restore-2026-09-06.json`.
id: RPF-WP-0038-T04
status: wait
needs_human: true
decision_id: 62aa95e4-3ccc-4867-8806-5e3db005b483
blocking_reason: "Operator chooses the independent archive prefix and confirms retention/caller contract and bounded worker credential delivery before the primary archive retrieval."
priority: high
state_hub_task_id: "a4807df0-ec96-58f1-9cbd-42b1dcde0d6f"
@ -121,6 +122,8 @@ the existing durable caller, inventory, quota and retention gates.
scheduled secondary delivery. The planner and attended executor stay idle until
durable caller/inventory/quota gates are closed.
2026-10-03: human gate routed to hub decision 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1: Attended OpenBao provisioning window: one session clears the pending credential lanes) by CUST-WP-0075; resolving that decision raises C-40 here.
## Loose-end review — 2026-09-27
T04 now explicitly waits. Primary and essentials manual recovery are already proven. Durable scheduled caller/dependency binding, canonical verified inventory, quota/retention gates and owner activation are still absent. September 15 prohibits expiration and scheduled secondary cutover until those gates close; no retained backups or schedules were changed. New primary transfer receipts preserve archive_profile for the assurance adapter in WP-0036-T03.

View file

@ -9,7 +9,7 @@ flavor: planning
owner: railiance-platform
topic_slug: railiance
created: "2026-09-21"
updated: "2026-09-27"
updated: "2026-10-03"
due: "2026-12-21"
related: [RPF-WP-0022]
state_hub_workstream_id: "ec41a4bd-df18-5b07-9b63-ccb80d9f001c"
@ -171,6 +171,7 @@ render lacks but that carries the tracking label, or a digest mismatch.
id: RPF-WP-0043-T04
status: wait
needs_human: true
decision_id: 89f1058f-33bc-47a8-8a49-0b44d426c67e
depends_on: [RPF-WP-0043-T03, RPF-WP-0044-T07]
blocking_reason: "Founder go-ahead: the merge is a live production change (CONSTRUCT @ railiance-platform, activation=APPROVED); also needs the root automation restored in RPF-WP-0044-T07."
priority: high
@ -209,6 +210,8 @@ Rollback:
rapp-policy-nexus `make rollback REVISION=<revision from T03>`. Otherwise
self-heal fights the rollback.
2026-10-03: human gate routed to hub decision 89f1058f-33bc-47a8-8a49-0b44d426c67e (D2: ArgoCD owns production: go-ahead sequence for railiance-apps-root, issue-core, policy-nexus and activity-core automation) by CUST-WP-0075; resolving that decision raises C-40 here.
## Declare the platform's own direct-apply gap
```task

View file

@ -9,7 +9,7 @@ flavor: planning
owner: railiance-platform
topic_slug: railiance
created: "2026-09-21"
updated: "2026-09-27"
updated: "2026-10-03"
related: [RPF-WP-0043, RPF-WP-0022]
state_hub_workstream_id: "98140775-3b9a-5cf9-9af6-722502d487dc"
---
@ -187,6 +187,7 @@ Rollback:
id: RPF-WP-0044-T03
status: wait
needs_human: true
decision_id: 89f1058f-33bc-47a8-8a49-0b44d426c67e
blocking_reason: "Adopted 2026-09-21; the follow-on step (issue-core adoption, then automation) waits on the founder's go-ahead."
priority: high
state_hub_task_id: "6d5fc801-e361-579b-bcd8-6fe719a82e94"
@ -230,12 +231,15 @@ Rollback (R1): `git revert` the merge commit and push, then
`ssh railiance01 'kubectl -n argocd delete application openbao-secretstore'`
(no finalizer; the ClusterSecretStore keeps running).
2026-10-03: human gate routed to hub decision 89f1058f-33bc-47a8-8a49-0b44d426c67e (D2: ArgoCD owns production: go-ahead sequence for railiance-apps-root, issue-core, policy-nexus and activity-core automation) by CUST-WP-0075; resolving that decision raises C-40 here.
## Adopt issue-core (from rapp-issue-core)
```task
id: RPF-WP-0044-T04
status: wait
needs_human: true
decision_id: 89f1058f-33bc-47a8-8a49-0b44d426c67e
blocked_on: message-from:rapp-issue-core
blocking_reason: "Founder go-ahead plus rapp-issue-core's agreement (hub message) that ArgoCD owns production and make deploy stops being a production path."
priority: high
@ -257,12 +261,15 @@ Zero diff against live for both the raw `manifests/` and the rendered output
whitelist. Live check: `rapp-issue-core make verify-live`. Workload restore:
`rapp-issue-core make rollback`.
2026-10-03: human gate routed to hub decision 89f1058f-33bc-47a8-8a49-0b44d426c67e (D2: ArgoCD owns production: go-ahead sequence for railiance-apps-root, issue-core, policy-nexus and activity-core automation) by CUST-WP-0075; resolving that decision raises C-40 here.
## Adopt target-revenue
```task
id: RPF-WP-0044-T05
status: wait
needs_human: true
decision_id: 89f1058f-33bc-47a8-8a49-0b44d426c67e
blocking_reason: "Adopted 2026-09-21; remaining preconditions and the next step wait on the founder's go-ahead."
priority: medium
state_hub_task_id: "d418068a-6fb0-5416-aac5-d23c93924d9c"
@ -282,12 +289,15 @@ Live check: `https://revenue.coulomb.social` health and the CNPG cluster
healthy. Workload restore: `kubectl apply -k k8s/railiance` from the previous
target-revenue commit.
2026-10-03: human gate routed to hub decision 89f1058f-33bc-47a8-8a49-0b44d426c67e (D2: ArgoCD owns production: go-ahead sequence for railiance-apps-root, issue-core, policy-nexus and activity-core automation) by CUST-WP-0075; resolving that decision raises C-40 here.
## Adopt external-secrets (highest risk)
```task
id: RPF-WP-0044-T06
status: wait
needs_human: true
decision_id: 89f1058f-33bc-47a8-8a49-0b44d426c67e
blocking_reason: "Founder go-ahead for the ESO adoption after adding CRD Prune=false,Delete=false and re-running the diff."
priority: medium
state_hub_task_id: "4ca54868-c31f-5e3d-b7d3-a15b84c15f80"
@ -307,12 +317,15 @@ current `Valid` state (two, `openbao-activity-core` and
`openbao-email-connect`, are already `ValidationFailed`). Workload restore:
`helm template` 0.16.1 with the same values, `kubectl apply --server-side`.
2026-10-03: human gate routed to hub decision 89f1058f-33bc-47a8-8a49-0b44d426c67e (D2: ArgoCD owns production: go-ahead sequence for railiance-apps-root, issue-core, policy-nexus and activity-core automation) by CUST-WP-0075; resolving that decision raises C-40 here.
## Turn the root back to the production lane
```task
id: RPF-WP-0044-T07
status: wait
needs_human: true
decision_id: 89f1058f-33bc-47a8-8a49-0b44d426c67e
depends_on: [RPF-WP-0044-T03, RPF-WP-0044-T04, RPF-WP-0044-T05, RPF-WP-0044-T06]
blocking_reason: "Founder go-ahead to restore automated prune/selfHeal on railiance-apps-root once T03-T06 are proven."
priority: medium
@ -325,12 +338,15 @@ change-gate decision's production row expects. From then on a merge to the
railiance01 path is a live production change, and `RPF-WP-0043-T04`
(policy-nexus) can use it.
2026-10-03: human gate routed to hub decision 89f1058f-33bc-47a8-8a49-0b44d426c67e (D2: ArgoCD owns production: go-ahead sequence for railiance-apps-root, issue-core, policy-nexus and activity-core automation) by CUST-WP-0075; resolving that decision raises C-40 here.
## Plan phase C: retire coulombcore's ArgoCD
```task
id: RPF-WP-0044-T08
status: wait
needs_human: true
decision_id: 89f1058f-33bc-47a8-8a49-0b44d426c67e
blocking_reason: "Planning only; needs an operator read-only check of coulombcore's ArgoCD, outside agent session scope."
priority: low
state_hub_task_id: "55d1382f-5862-5321-a1c9-96767764ba43"
@ -341,6 +357,8 @@ session's scope. Under Option A, retiring it also removes `argocd/applications/`
Also hand back to the cluster layer: the phase A install is not declared in
any repository and its pods have no resource requests (BestEffort).
2026-10-03: human gate routed to hub decision 89f1058f-33bc-47a8-8a49-0b44d426c67e (D2: ArgoCD owns production: go-ahead sequence for railiance-apps-root, issue-core, policy-nexus and activity-core automation) by CUST-WP-0075; resolving that decision raises C-40 here.
## Loose-end review — 2026-09-27
T03/T05 passed their elapsed healthy observation gate: current ArgoCD status is Synced/Healthy with last healthy transitions on September 21; openbao is Valid and issue-core-runtime is SecretSynced. They now wait on the remaining automation go-aheads and, for target-revenue, hook-owner acceptance. T06 local preparation is complete: the inactive ESO draft protects all 20 CRDs from prune/delete. The pinned 0.16.1 chart renders 39 objects; server-side diff is exactly the 20 protective metadata annotations, with no spec changes. All 25 ClusterSecretStores are Valid. T04 still needs the repository credential/production-owner contract; T07 depends on the per-app gates. T08 has a concrete retirement procedure at `docs/argocd-coulombcore-retirement.md`, but its required live inventory is blocked: SSH works and Kubernetes rejects both default and explicit local k3s kubeconfigs. No controller or workload was changed. Evidence: `docs/evidence/2026-09-27-argocd-loose-end-status.json` and `docs/evidence/2026-09-27-eso-adoption-preparation.json`.

View file

@ -8,7 +8,7 @@ status: blocked
owner: codex
topic_slug: railiance
created: "2026-09-27"
updated: "2026-09-28"
updated: "2026-10-03"
state_hub_workstream_id: "b8cf2fc2-60c2-5d4e-a60a-55f1304d9f54"
---
@ -42,6 +42,7 @@ health, resource inventory, schedules and original deployment generations.
id: RPF-WP-0048-T02
status: wait
needs_human: true
decision_id: 89f1058f-33bc-47a8-8a49-0b44d426c67e
depends_on: [ACTIVITY-WP-0041]
blocking_reason: "24h soak after adoption, then founder confirmation of the scoped identity and checks before automated sync; ACTIVITY-WP-0041 owns publication and the promotion guard."
priority: high
@ -55,6 +56,8 @@ this workplan. No unattended merge credential or release executor is assumed jus
because the Application exists. Confirm the scoped identity and checks before
activating bounded routine promotion. Destructive pruning remains disabled.
2026-10-03: human gate routed to hub decision 89f1058f-33bc-47a8-8a49-0b44d426c67e (D2: ArgoCD owns production: go-ahead sequence for railiance-apps-root, issue-core, policy-nexus and activity-core automation) by CUST-WP-0075; resolving that decision raises C-40 here.
## Make registry retention aware of digest-pinned releases
```task