railiance-platform/docs/provisioning-windows/2026-10-04-1000/dependency-requirements.md
codex 4a284f0a3b
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 2s
Revise KeyCape secrets-engine-openbao custody: OpenBao-only, operator reader CCR-2026-0034 (source only)
Founder direction 2026-10-06 and ops-mason plan keycape-secrets-engine-openbao-client-custody
(658cdbc, MASON-WP-0009): the client secret lives only in OpenBao.

- CCR-2026-0033: consumer file and secrets-engine D1-D4 removed; KV metadata declared
  (cas_required, max_versions=2, delete_version_after=0s, custom_metadata); target.domain
  infotech; live order and roll-forward rollback revised; status stays proposed.
- New sibling CCR-2026-0034 + policy: attended OIDC operator reader on auth/netkingdom,
  read data path + revoke-self only, 5m/4 uses, no default policy, bound
  groups=net-kingdom-admins and /assurance/level=aal2 (KeyCape 7d96ee4). Proposed,
  bound claims unconfirmed (founder item for both readers).
- credential-change.py: OIDC roles carry token_max_ttl/explicit_max_ttl/no_default_policy/
  num_uses/type and bound_claims_type (string only); token_revoke_self policy option;
  validated openbao.kv_metadata. Tests added.
- Custody child: consumer write and check-secret-file removed; cas=0 create / --rotate
  cas=<current>; compare-before-write metadata put; refusals unchanged.
- Founder runbook (keycape/founder-runbook.md), window docs, RPF-WP-0035-T09 (waits on A1/A2/A3).

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

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 132360@bnt-lap001
Assistant-Session: 769b1afd-4330-4c86-96b2-e510e26db42b
2026-10-06 14:26:42 +02:00

7.8 KiB

Remaining dependency requirements — 2026-10-04

Review scope: RPF-WP-0050-T03, RPF-WP-0051-T02/T03 and the selected RPF-WP-0035-T02 service-login lane. Source work is implemented where independent of receiving-owner facts. Both preparation workplans are blocked on the deliveries below. Completed design judgments are retained.

Platform task Receiving repo / owner task Required independent delivery Reopen condition
RPF-WP-0051-T02 informed-decision / source phase of INFD-WP-0005-T05 Process-owned private listener and explicit runtime configuration consuming compose_intake; authenticated bounded TokenReview transport using API-server CA; exact owner deploy renderer with private Service, NetworkPolicy, TokenReview RBAC and projected registries; final immutable image/config/source Accept source composition and publication receipt, reviewed deployment proposal and named native verification/abort attendance. Do not require this owner's entire live T05 completion as a predecessor.
RPF-WP-0051-T03 informed-decision receiving runtime; founder execution gate Complete T02 source packet, approve exact final live action, then native ESO/auth/file/exchange and revocation/rotation/cleanup receipts Native delivery and owner runtime acceptance, after platform metadata and separately approved runtime promotion. Source proofs are already complete.
RPF-WP-0035-T02 secrets-engine / service-auth source acceptance in SECRETS-WP-0008-T06 Explicit consumer host, protected file path and owner, mode-0600 delivery mechanism, refresh/rotation/revocation ownership and bounded validation interface Source acceptance of those coordinates, independent of obtaining a working OpenBao service token. The entire live consumer task must not precede platform login provisioning.
RPF-WP-0035-T02 key-cape / KEY-WP-0037-T02/T03/T04; net-kingdom deployment authority Accept proposed issuer coordinates and separate consumer delivery; reviewed single-client/env-preserving registration operation with immutable image/config; independently approved custody and actual registration/issuance receipts Protected custody, real registration and validated provider claims are returned. Platform then performs its separately approved isolated JWT mount/role/self-policy operation and login proof.
RPF-WP-0050-T03 user-engine / USER-WP-0035-T02 and provider owner Provider-supported single-use password-setup-link delivery contract and intended-recipient evidence; retained value-safe failure/retry behavior Real handoff receipt. SMTP and invitation delivery already exist and are not reprovisioned.

Delivered owner work and platform checks

Informed-decision source acceptance: implementation eb9614c2677c7f07c9d78eee7543f95f329d2c83, exact-primary receipt f06b7e9c53d3477f1e690ed8259f2eaab3661f91. Requests/replies: 17bcfb39-f8c0-4cda-acce-de7af6d0afbc and d304e328-1e77-4a02-ae47-783a7290b6ce. Its RequesterTokenProvider and compose_intake are implemented with 37 focused owner tests. Exact source binding/mount acceptance is supplied; live claims are not confirmed.

Platform independently verified railiance01's node address and the actual external-secrets controller ServiceAccount, then checked permission to create serviceaccounts/token in informed-decision through SubjectAccessReview. The explicit subresource query returned yes. Receipt: docs/evidence/2026-10-04-requester-eso-tokenrequest-review.json. This is an authorization check; no token was minted and it does not prove Secret delivery. The earlier slash-resource spelling gave a different result and is not accepted as the TokenRequest receipt. The explicit subresource query is authoritative.

KeyCape source packet: 44cc067aa2c7dadffc75b631baa221a5f5caa531; managed IDs/index locally at f485d6fe9c7389b7f29d97e5da51b14eb0692eb3. Replies 58826056-55f2-4300-9b42-05ceeec9c26a and eb20a78c-0b9b-41e6-b349-dfaa9873633b name the real owner tasks. Its latest exact-primary sync is pending: Repo Manager refused grandfathered ADHOC-2026-09-27-T02 without UUID. KeyCape/repo-manager must reconcile the source identity through the required scoped decision, then return an applied/noop receipt for the actual current commit. Platform does not invent UUIDs or bypass the refusal. This is separate from actual provider registration/custody.

Implemented platform issuer-reader preparation

The KeyCape packet's candidate path platform/services/keycape/secrets-engine-openbao is outside the platform-mount applier scope (platform/workloads/ only) and was corrected on 2026-10-06 to platform/workloads/keycape/secrets-engine-openbao, field CLIENT_SECRET.

Revised 2026-10-06 (founder direction: the secret lives only in OpenBao; ops-mason plan keycape-secrets-engine-openbao-client-custody, 658cdbc, MASON-WP-0009). The secrets-engine consumer file and secrets-engine D1-D4 are withdrawn. Two readers:

  • Issuer: CCR-2026-0033, unchanged ESO reader. Policy workload-kv-read-keycape-secrets-engine-openbao-eso, Kubernetes role external-secrets-keycape-secrets-engine-openbao (external-secrets/external-secrets, audience openbao, 15m, no default policy). The store admits sso only; target Secret sso/keycape-secrets-engine-openbao-client key client-secret. It must stay on Kubernetes auth.
  • Operator: sibling CCR-2026-0034, OIDC role keycape-secrets-engine-openbao-operator-workload-kv-read on auth/netkingdom. Policy workload-kv-read-keycape-secrets-engine-openbao-operator grants read on the data path and update on auth/token/revoke-self only. The token is 5m, 4 uses, service type, with no default policy. Bound claims are groups=net-kingdom-admins and /assurance/level=aal2 (KeyCape 7d96ee4: MFA is not pinned on the openbao-admin client). secrets-engine reads the value into memory per command, with no copy at rest.

CCR-2026-0033 now declares the KV metadata: cas_required=true, max_versions=2, delete_version_after=0s, and custom_metadata as in the plan. Its target.domain is corrected to infotech. The custody child scripts/keycape_secrets_engine_openbao_custody.py (source only, never run) writes KV with cas=0, or with cas=<current> under --rotate, then compares the metadata before it writes. It writes no consumer file. Both CCRs remain proposed with bound claims unconfirmed. Confirming them is a founder item for both readers.

Founder approvals: A1 design, A2 both CCRs, A3 custody-child decision id (not 632a8893). Live order: custody child → platform applies policies/roles/ESO (Secret sso/keycape-secrets-engine-openbao-client exists) → NetKingdom env patch (NK-WP-0046) → KeyCape registration merge (KEY-WP-0037-T03) → KeyCape restart immediately → live issuance check (KEY-WP-0037-T04) → OpenBao JWT role/login proof (RPF-WP-0035-T02). Exact founder commands, including the metadata-only survey: keycape/founder-runbook.md. Payloads and ESO stay outside active GitOps in this window's keycape/ directory. No value exists by implication of these drafts.

Dependency boundary

Owner source readiness precedes platform promotion. Platform native delivery proof follows its own authorized apply, and receiving live acceptance follows that delivery. Requiring a receiving repo's full live completion before platform supplies its credential would create a mutual wait. Where an owner composite task includes both phases, the wait is qualified as message-from:<owner> for the exact independent source receipt until that owner names a separate source task; no fabricated task ID or complete-task dependency is introduced.

Once source deliveries arrive, reopen only the affected platform task. The founder-approved informed-decision design needs no repeat decision unless scope changes. Live actions still require a fresh reviewed execution packet and go; the historical 10:00 preparation window is not a standing execution grant.