Draft provisioning-window sitting for hub decision D1 (CUST-WP-0075)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 3775@bnt-lap001 Assistant-Session: cfacb6a5-ad5b-4f79-ac67-053e3b0d34a3
This commit is contained in:
parent
5f14bc0e4c
commit
55fb078578
8 changed files with 630 additions and 0 deletions
131
docs/batches/2026-10-03-provisioning-window/OPERATOR.md
Normal file
131
docs/batches/2026-10-03-provisioning-window/OPERATOR.md
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
# Provisioning-window sitting — operator packet (hub decision D1)
|
||||
|
||||
Hub decision: `62aa95e4-3ccc-4867-8806-5e3db005b483` (D1, attended OpenBao
|
||||
provisioning window), routed by CUST-WP-0075. The founder approves through
|
||||
informed-decision, not with a raw hub resolve.
|
||||
Review group: `net-kingdom-admins`. Surface: https://decisions.coulomb.social/
|
||||
Contract: `docs/specs/CompactSignoffBatches.md`.
|
||||
Generator: `tools/prepare_provisioning_window_batch.py` (re-running rewrites the same bytes).
|
||||
|
||||
An agent drafted this. It may not `accept` / `decline` / `seal`. Only the human binds.
|
||||
|
||||
## One unsigned memo, four lanes excluded
|
||||
|
||||
| n | memo_id | Blocking record | Question |
|
||||
| --: | --- | --- | --- |
|
||||
| 1 | `infd-20261003-p01` | RPF-WP-0035-T06 (railiance-platform) | Accept the passed 2026-09-13 CCR-2026-0019 scoped delivery proof? |
|
||||
|
||||
Packet hash: `sha256:ee53cae14ae86dbdec2936d72f99e1285b6c714d5bd322ef30df8ffbf0939ff2`.
|
||||
Required acknowledgement: the wrong-group login is untested, the 404 proves
|
||||
routing only, and acceptance does not close T06 (the CCR-2026-0018
|
||||
disablement is still open).
|
||||
|
||||
Excluded (no memo; the reasons are in `provisioning/index.json` → `excluded`):
|
||||
|
||||
| Task | Why not ready now |
|
||||
| --- | --- |
|
||||
| MASON-WP-0007-T05 | The policy/role script exists, but the row-7 seed copy has no reviewed script; the T01 survey is still todo; ESO's right to create SA tokens in `tenant-engine` is unverified |
|
||||
| RPF-WP-0035-T02 | The design is still `proposed`; no reviewed child command exists; KeyCape registration/custody is unverified; gated on SECRETS-WP-0007-T04 |
|
||||
| RPF-WP-0035-T08 | Already provisioned and delivered 2026-09-11; what remains is owner acceptance, not an attended act (stale gate) |
|
||||
| RAPPCOREHUB-WP-0003-T04 | No CCR, design or script exists for the dedicated `read:repository` identity; the identity-canon fix is also outstanding |
|
||||
|
||||
Resolving hub decision D1 is a separate act, after the window has run. The
|
||||
owners of the excluded lanes re-qualify their tasks.
|
||||
|
||||
## Part A — circulate and bind the memo
|
||||
|
||||
**A1. Dry run (shell, no credentials).** From `/home/worsch/informed-decision`:
|
||||
|
||||
```bash
|
||||
.venv/bin/python -B tools/create_sitting_approvals.py --dry-run \
|
||||
--sitting 2026-10-03-provisioning-window \
|
||||
--receipt 2026-10-03-provisioning-window-approval-create.json --expect 1
|
||||
```
|
||||
|
||||
Expect `memo_ids: ["infd-20261003-p01"]` and `posted: false`.
|
||||
|
||||
**A2. Approval Engine tunnel (shell, separate terminal).**
|
||||
|
||||
```bash
|
||||
kubectl -n approval-engine port-forward svc/approval-engine 18281:8080
|
||||
```
|
||||
|
||||
**A3. Create the native approval (shell, attended, in the founder's own terminal: `! …`).**
|
||||
KeyCape OIDC/MFA opens in the browser. The installed warden bundle does not
|
||||
know this lane yet, so name the source catalog. Note the `--` before the child.
|
||||
|
||||
```bash
|
||||
WARDEN_ROUTING_CATALOG=/home/worsch/ops-warden/registry/routing/catalog.yaml \
|
||||
BAO_ADDR=http://127.0.0.1:18200 VAULT_ADDR=http://127.0.0.1:18200 \
|
||||
warden access informed-decision-sitting-requester-login --exec -- \
|
||||
/home/worsch/informed-decision/tools/create_sitting_approvals.sh \
|
||||
--sitting 2026-10-03-provisioning-window \
|
||||
--receipt 2026-10-03-provisioning-window-approval-create.json --expect 1
|
||||
```
|
||||
|
||||
The child is silent. The outcome is the receipt
|
||||
`docs/evidence/2026-10-03-provisioning-window-approval-create.json`, which holds
|
||||
the `approval_id` and the engine-computed binding digest and no secret. Read
|
||||
warden's printed line, not its exit code. The fallback wrapper takes the same
|
||||
child and the same arguments:
|
||||
`python3 /home/worsch/railiance-platform/scripts/openbao-attended-exec.py --lane informed-decision-sitting-requester-login -- <child>`.
|
||||
|
||||
**A4. Flex Auth exact-record admission (repo change + deploy).** In
|
||||
`access-engine/examples/informed-decision-sitting/policy.md` (formerly
|
||||
flex-auth): change `version: v6` to `v7` and add `"memo:infd-20261003-p01"` with
|
||||
the receipt's `approval_id`, `binding_digest`, `label: "p01"`, the binding from
|
||||
`approval-create-intents.json` and `memo_version: 1`. Mirror it in
|
||||
`records.json` and keep every existing record. Never add the record before A3:
|
||||
an empty approval id must not become a policy value. Build in CI, bump
|
||||
`access-engine/values/informed-decision-sitting.yaml` and deploy. Then, in this
|
||||
repo, set `deploy/sitting-admission.json` to `policy.version: v7` with the new
|
||||
`package_digest`, and roll out the review service.
|
||||
|
||||
**A5. Attach and load (shell).**
|
||||
|
||||
```bash
|
||||
.venv/bin/python -B tools/attach_compact_bindings.py \
|
||||
--principal <exact-keycape-sub> \
|
||||
--receipt docs/evidence/2026-10-03-provisioning-window-approval-create.json \
|
||||
--sitting 2026-10-03-provisioning-window --batches provisioning
|
||||
.venv/bin/python -B tools/load_sitting_memos.py --db <live review store> \
|
||||
--bound docs/batches/2026-10-03-provisioning-window/bound
|
||||
```
|
||||
|
||||
The attach step writes `bound/`; the unsigned drafts stay unsigned. Load into
|
||||
the live store the same way as for the 2026-09-21 sitting.
|
||||
|
||||
**A6. Review and bind (browser).** Sign in at https://decisions.coulomb.social/
|
||||
with fresh MFA. Open `infd-20261003-p01`, read the packet and acknowledge the
|
||||
required highlight. Then accept, return or decline. One memo, one bind. There
|
||||
is no approve-all.
|
||||
|
||||
## Part B — attended execution after acceptance
|
||||
|
||||
This is the pattern for any lane whose memo was accepted. It is a shell step,
|
||||
run in the founder's own terminal:
|
||||
|
||||
```bash
|
||||
BAO_ADDR=http://127.0.0.1:18200 VAULT_ADDR=http://127.0.0.1:18200 \
|
||||
warden access openbao-platform-admin-login --exec -- <the lane's reviewed command>
|
||||
```
|
||||
|
||||
The child must be silent and idempotent. Read warden's printed line:
|
||||
`attended command completed but session revocation could not be confirmed`
|
||||
means the child ran; `attended login failed closed before command handoff`
|
||||
means it never ran.
|
||||
|
||||
| memo | Command after acceptance | Owner records |
|
||||
| --- | --- | --- |
|
||||
| `p01` (RPF-WP-0035-T06) | **None.** The proof already ran; do not re-run it as a substitute. No platform-admin session is needed. | railiance-platform records the accepted approval id against T06 and keeps T06 open for the CCR-2026-0018 disablement. |
|
||||
|
||||
When an excluded lane becomes ready, it gets its own memo in a later sitting
|
||||
before anything runs. For MASON-WP-0007-T05 the policy/role half would be
|
||||
`... --exec -- sh scripts/openbao-tenant-engine-audit-core-sender-eso-attended.sh`,
|
||||
run from a railiance-platform checkout (exit 3 means an existing object
|
||||
differs). This sitting does not authorize it.
|
||||
|
||||
## Must not
|
||||
- Paste or display any credential value
|
||||
- Resolve hub decision D1 from this sitting alone
|
||||
- Let an agent accept, decline or seal
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"kind": "informed-decision-approval-create-intents",
|
||||
"sitting_id": "infd-sitting-2026-10-03-provisioning-window",
|
||||
"status": "not-posted",
|
||||
"posted": false,
|
||||
"requester_client": "informed-decision-sitting-requester",
|
||||
"human_control": true,
|
||||
"pdp_path": false,
|
||||
"required_count": 1,
|
||||
"note": "Intents only. Digests are computed by approval-engine at create; do not invent them here.",
|
||||
"intents": [
|
||||
{
|
||||
"memo_id": "infd-20261003-p01",
|
||||
"create_client": "informed-decision-sitting-requester",
|
||||
"binding": {
|
||||
"action": "accept",
|
||||
"actor": "informed-decision",
|
||||
"principal": "railiance-platform",
|
||||
"purpose": "Accept the 2026-09-13 scoped delivery proof for the CCR-2026-0019 secrets-engine approval-client reader",
|
||||
"target": {
|
||||
"id": "ccr:CCR-2026-0019-delivery-proof",
|
||||
"type": "credential-lane",
|
||||
"system": "railiance-platform"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"kind": "informed-decision-batch",
|
||||
"id": "infd-batch-2026-10-03-provisioning-window",
|
||||
"review_group": "net-kingdom-admins",
|
||||
"status": "draft-unsigned",
|
||||
"submitted": false,
|
||||
"one_question_per_memo": true,
|
||||
"approve_all_forbidden": true,
|
||||
"agent_disposition_forbidden": true,
|
||||
"hub_decision": "62aa95e4-3ccc-4867-8806-5e3db005b483",
|
||||
"ordinal": [
|
||||
{
|
||||
"n": 1,
|
||||
"memo_id": "infd-20261003-p01",
|
||||
"workplan": "RPF-WP-0035",
|
||||
"task": "RPF-WP-0035-T06",
|
||||
"hub_task_prefix": "68bff751",
|
||||
"question": "Accept the passed 2026-09-13 scoped delivery proof for the CCR-2026-0019 secrets-engine approval-client reader as that reader's native delivery acceptance?",
|
||||
"memo": "infd-20261003-p01.memo.json",
|
||||
"packet": "infd-20261003-p01.packet.md",
|
||||
"packet_hash": "sha256:ee53cae14ae86dbdec2936d72f99e1285b6c714d5bd322ef30df8ffbf0939ff2",
|
||||
"required_highlight": "infd-20261003-p01-h1"
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"workplan": "MASON-WP-0007",
|
||||
"task": "MASON-WP-0007-T05",
|
||||
"owner_repo": "ops-mason",
|
||||
"reason": "Half the act has no reviewed command. The policy + Kubernetes-auth role script railiance-platform scripts/openbao-tenant-engine-audit-core-sender-eso-attended.sh exists (silent, idempotent, exit 3 on drift), but the row-7 wrapped seed that copies the tenant-engine sender token from the registry to platform/workloads/tenant-engine/audit-core-sender has no script: railiance-platform says it has no helper and the plan only names 'the user-engine migration technique'. A placeholder child must not be approved. Also MASON-WP-0007-T01 (metadata survey: path unused, no conflicting names) is still todo, and ESO's right to create serviceaccounts/token in namespace tenant-engine is unverified (MASON-WP-0007-T06).",
|
||||
"ready_when": "ops-mason or railiance-platform commits a reviewed silent seed helper, T01 survey is recorded, then one memo covers policy/role apply plus seed."
|
||||
},
|
||||
{
|
||||
"workplan": "RPF-WP-0035",
|
||||
"task": "RPF-WP-0035-T02",
|
||||
"owner_repo": "railiance-platform",
|
||||
"reason": "Design docs/credential-lane-designs/secrets-engine-service-jwt.md is 'proposed, not provisioned'. Its 2026-09-27 return supplies inputs (openbao/auth/keycape-services-config.json, openbao/auth/secrets-engine-jwt-role.json, openbao/policies/secrets-engine-login-self.hcl) but no reviewed child command and says 'Do not execute a placeholder command'. Live KeyCape client registration and protected client-side custody remain unverified, and first-lane apply is gated on SECRETS-WP-0007-T04. The earlier sitting memo infd-20260914-c02 for this task was created 2026-09-15 and expired unbound 2026-09-16.",
|
||||
"ready_when": "railiance-platform accepts the design, commits the reviewed silent install/verify child, and records KeyCape registration + custody."
|
||||
},
|
||||
{
|
||||
"workplan": "RPF-WP-0035",
|
||||
"task": "RPF-WP-0035-T08",
|
||||
"owner_repo": "railiance-platform",
|
||||
"reason": "The attended first-provision already happened. factory-audit-senders-review.md 'Current execution status': both version-1 credentials provisioned (seed receipt 2026-09-11-factory-audit-sender-seed.json) and delivered (2026-09-11-factory-audit-delivery-live.json, delivered_and_scope_verified_pending_producer_acceptance); CCR-2026-0021/0022 applied; 'Do not repeat provisioning or delivery'. What remains is owner acceptance (independent archive readback, audit bearer-revocation), not an attended OpenBao act. The task's blocking_reason is stale.",
|
||||
"ready_when": "railiance-platform re-qualifies T08 to its real remaining owner acceptance work."
|
||||
},
|
||||
{
|
||||
"workplan": "RAPPCOREHUB-WP-0003",
|
||||
"task": "RAPPCOREHUB-WP-0003-T04",
|
||||
"owner_repo": "rapp-core-hub",
|
||||
"reason": "No credential change request, design or provisioning script exists for a dedicated read:repository Forgejo identity for the core-hub publisher (the only read:repository lane, CCR-2026-0014, belongs to policy-nexus and must not be reused). The task also needs Repo Manager to fix the identity-canon registry identity and publish a corrected image before the 123/0 snapshot can pass.",
|
||||
"ready_when": "The Forgejo identity/custody owner drafts the CCR and silent provisioning child; Repo Manager ships the identity-canon correction."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"approval_binding_digest":null,"approval_id":null,"binding":{"justification":null,"principal":{"display_name":"Named reviewer in net-kingdom-admins","id":"pending-human-session","identifiers":[],"kind":"person","role":"reviewer"},"target":{"environment":"prod","id":"ccr:CCR-2026-0019-delivery-proof","kind":"credential-lane","label":"secrets-engine approval-client reader, scoped delivery proof","requires_new_bind":false},"terms":null},"binding_level":"organizational","brief":"Reader 1 (CCR-2026-0019, applied 2026-09-14) already ran its scoped delivery proof under the attended reader lane and the receipts say passed. RPF-WP-0035-T06 waits only on a human accepting that proof. Accepting runs nothing, delivers no credential and changes no OpenBao object. It does not close T06 by itself.","highlights":[{"id":"infd-20261003-p01-h1","item_id":"infd-20261003-p01-packet","locator":{"kind":"work_record","task":"RPF-WP-0035-T06","workplan":"RPF-WP-0035"},"note":"Known gaps you accept: the wrong-group human login is untested, and the read check used a nonexistent approval id (HTTP 404 proves authenticated routing, not a usable claim). The proof is from 2026-09-13 and is not re-run. Accepting does not close RPF-WP-0035-T06: the CCR-2026-0018 coordinated disablement still needs KeyCape and Approval Engine confirmation, and the file-delivered secret's removal depends on operator hygiene.","required_ack":true,"severity":"critical"}],"id":"infd-20261003-p01","locale":"en","packet":[{"hash":"sha256:ee53cae14ae86dbdec2936d72f99e1285b6c714d5bd322ef30df8ffbf0939ff2","item_id":"infd-20261003-p01-packet","label":"infd-20261003-p01-packet"}],"question":"Accept the passed 2026-09-13 scoped delivery proof for the CCR-2026-0019 secrets-engine approval-client reader as that reader's native delivery acceptance?","requested_act":"approve","sealed":false,"step_kind":"approve","ui_release":"informed-decision@0.2.0","version":1}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
# RPF-WP-0035-T06 — accept the CCR-2026-0019 scoped delivery proof
|
||||
|
||||
Blocking workplan: RPF-WP-0035 (railiance-platform)
|
||||
Blocking task: RPF-WP-0035-T06 (hub prefix 68bff751)
|
||||
Hub decision: 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1, attended provisioning window)
|
||||
Design: railiance-platform `docs/credential-lane-designs/keycape-approval-client-side-readers.md`
|
||||
Request: railiance-platform `credential-change-requests/CCR-2026-0019-secrets-engine-approval-client-read.yaml` (status `applied`)
|
||||
|
||||
## Question
|
||||
Accept the passed 2026-09-13 scoped delivery proof for the CCR-2026-0019
|
||||
secrets-engine approval-client reader as that reader's native delivery acceptance?
|
||||
|
||||
## One act
|
||||
Record a human acceptance of a proof that has already run. Nothing executes
|
||||
because of this memo. No OpenBao, KeyCape or cluster object changes.
|
||||
|
||||
## What already ran (reference only)
|
||||
Both under the attended reader lane, never the platform-admin lane:
|
||||
|
||||
```sh
|
||||
warden access secrets-engine-approval-client-login --exec -- \
|
||||
python3 /home/worsch/railiance-platform/scripts/approval-client-reader-preflight.py
|
||||
warden access secrets-engine-approval-client-login --exec -- \
|
||||
/home/worsch/secrets-engine/.venv/bin/python -B \
|
||||
/home/worsch/railiance-platform/scripts/approval-client-delivery-check.py
|
||||
```
|
||||
|
||||
## Non-secret receipts (railiance-platform `docs/evidence/`)
|
||||
- `2026-09-14-ccr0019-operator-binding.json` — role/policy apply and readback
|
||||
- `2026-09-14-ccr0019-reader-preflight.json` — `status: passed`, `secret_values_read: false`
|
||||
- `2026-09-14-ccr0019-delivery-check.json` — `status: passed`, `approval_mutations: false`, `cleanup: true`
|
||||
|
||||
## Positive evidence the owner expects
|
||||
- Exact read of `platform/data|metadata/workloads/secrets-engine/approval-client`
|
||||
- Private delivery of the existing version-1 value; private runtime file removed
|
||||
- `approval:read` token reaches Approval Engine authenticated (HTTP 404 on a fresh id)
|
||||
- Warden session exited 0 after self-revocation and helper cleanup
|
||||
|
||||
## Negative evidence the owner expects
|
||||
- Denied: sibling `approval-engine/operator-client`, parent metadata/listing,
|
||||
an unrelated workload path, policy read, role read
|
||||
- `approval:consume` token refused on the read route (HTTP 403); no real approval consumed
|
||||
|
||||
## Known gaps (required acknowledgement)
|
||||
- Wrong-group human login untested.
|
||||
- The 404 read proves routing, not a usable claim on a real approval.
|
||||
- File delivery outlives the reading process; removal is operator hygiene.
|
||||
|
||||
## Rollback / revocation (CCR-2026-0019 lifecycle)
|
||||
- Deactivate: detach policy `workload-kv-read-secrets-engine-approval-client` from
|
||||
role `secrets-engine-approval-client-workload-kv-read`; disable the ops-warden
|
||||
catalog entry. The KeyCape verifier lane is unaffected.
|
||||
- Compromise: KeyCape disables the `secrets-engine-approval` registration first,
|
||||
then the value is rotated (shared with CCR-2026-0017) and the policy detached.
|
||||
|
||||
## Not decided here
|
||||
- CCR-2026-0018 retention or coordinated disablement (KeyCape + Approval Engine
|
||||
+ Platform). T06 stays open until both owners confirm that sequence.
|
||||
- Any rotation, reseed, `approval:consume` grant, or CCR-2026-0020 (cancelled).
|
||||
|
||||
## Must not
|
||||
- Display or paste the client secret
|
||||
- Re-run the proof as a substitute for this acceptance
|
||||
- Treat acceptance as authority for any other lane in the D1 window
|
||||
15
docs/batches/2026-10-03-provisioning-window/sitting.json
Normal file
15
docs/batches/2026-10-03-provisioning-window/sitting.json
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"kind": "informed-decision-sitting",
|
||||
"id": "infd-sitting-2026-10-03-provisioning-window",
|
||||
"review_group": "net-kingdom-admins",
|
||||
"principal": "pending-human-session",
|
||||
"status": "draft-unsigned",
|
||||
"hub_decision": "62aa95e4-3ccc-4867-8806-5e3db005b483",
|
||||
"batches": [
|
||||
"infd-batch-2026-10-03-provisioning-window"
|
||||
],
|
||||
"memo_count": 1,
|
||||
"excluded_count": 4,
|
||||
"bind_path": "create approval (attended), Flex Auth exact-record admission, load store, human accept",
|
||||
"note": "Unsigned draft. Live bind substitutes pending-human-session with the authenticated key-cape subject."
|
||||
}
|
||||
290
tools/prepare_provisioning_window_batch.py
Normal file
290
tools/prepare_provisioning_window_batch.py
Normal file
|
|
@ -0,0 +1,290 @@
|
|||
"""Draft the unsigned 2026-10-03 provisioning-window sitting (hub decision D1, CUST-WP-0075).
|
||||
|
||||
Five candidate lanes were reviewed against owner source. Only lanes whose sole
|
||||
missing step is a human act get a memo; the others are recorded as excluded in
|
||||
the batch index with the owner-source reason. One question per memo. No secret
|
||||
values. Does not submit, present, create approvals or bind.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
from prepare_compact_batches import REVIEW_GROUP, _memo, _sha # noqa: E402
|
||||
|
||||
from informed_decision.memo import Scope # noqa: E402
|
||||
from informed_decision.records import dumps, memo_from # noqa: E402
|
||||
|
||||
SITTING = "2026-10-03-provisioning-window"
|
||||
ROOT = Path(__file__).resolve().parents[1] / "docs" / "batches" / SITTING
|
||||
SITTING_ID = "infd-sitting-2026-10-03-provisioning-window"
|
||||
BATCH = "provisioning"
|
||||
HUB_DECISION = "62aa95e4-3ccc-4867-8806-5e3db005b483"
|
||||
|
||||
MEMOS = [
|
||||
{
|
||||
"id": "infd-20261003-p01",
|
||||
"workplan": "RPF-WP-0035",
|
||||
"task": "RPF-WP-0035-T06",
|
||||
"hub_task_prefix": "68bff751",
|
||||
"question": (
|
||||
"Accept the passed 2026-09-13 scoped delivery proof for the CCR-2026-0019 "
|
||||
"secrets-engine approval-client reader as that reader's native delivery acceptance?"
|
||||
),
|
||||
"brief": (
|
||||
"Reader 1 (CCR-2026-0019, applied 2026-09-14) already ran its scoped delivery proof "
|
||||
"under the attended reader lane and the receipts say passed. RPF-WP-0035-T06 waits only "
|
||||
"on a human accepting that proof. Accepting runs nothing, delivers no credential and "
|
||||
"changes no OpenBao object. It does not close T06 by itself."
|
||||
),
|
||||
"highlight": (
|
||||
"Known gaps you accept: the wrong-group human login is untested, and the read check used a "
|
||||
"nonexistent approval id (HTTP 404 proves authenticated routing, not a usable claim). The "
|
||||
"proof is from 2026-09-13 and is not re-run. Accepting does not close RPF-WP-0035-T06: the "
|
||||
"CCR-2026-0018 coordinated disablement still needs KeyCape and Approval Engine confirmation, "
|
||||
"and the file-delivered secret's removal depends on operator hygiene."
|
||||
),
|
||||
"target": Scope(
|
||||
"credential-lane",
|
||||
"ccr:CCR-2026-0019-delivery-proof",
|
||||
"secrets-engine approval-client reader, scoped delivery proof",
|
||||
"prod",
|
||||
),
|
||||
"binding": {
|
||||
"action": "accept",
|
||||
"actor": "informed-decision",
|
||||
"principal": "railiance-platform",
|
||||
"purpose": "Accept the 2026-09-13 scoped delivery proof for the CCR-2026-0019 secrets-engine approval-client reader",
|
||||
"target": {
|
||||
"id": "ccr:CCR-2026-0019-delivery-proof",
|
||||
"type": "credential-lane",
|
||||
"system": "railiance-platform",
|
||||
},
|
||||
},
|
||||
"packet": """# RPF-WP-0035-T06 — accept the CCR-2026-0019 scoped delivery proof
|
||||
|
||||
Blocking workplan: RPF-WP-0035 (railiance-platform)
|
||||
Blocking task: RPF-WP-0035-T06 (hub prefix 68bff751)
|
||||
Hub decision: 62aa95e4-3ccc-4867-8806-5e3db005b483 (D1, attended provisioning window)
|
||||
Design: railiance-platform `docs/credential-lane-designs/keycape-approval-client-side-readers.md`
|
||||
Request: railiance-platform `credential-change-requests/CCR-2026-0019-secrets-engine-approval-client-read.yaml` (status `applied`)
|
||||
|
||||
## Question
|
||||
Accept the passed 2026-09-13 scoped delivery proof for the CCR-2026-0019
|
||||
secrets-engine approval-client reader as that reader's native delivery acceptance?
|
||||
|
||||
## One act
|
||||
Record a human acceptance of a proof that has already run. Nothing executes
|
||||
because of this memo. No OpenBao, KeyCape or cluster object changes.
|
||||
|
||||
## What already ran (reference only)
|
||||
Both under the attended reader lane, never the platform-admin lane:
|
||||
|
||||
```sh
|
||||
warden access secrets-engine-approval-client-login --exec -- \\
|
||||
python3 /home/worsch/railiance-platform/scripts/approval-client-reader-preflight.py
|
||||
warden access secrets-engine-approval-client-login --exec -- \\
|
||||
/home/worsch/secrets-engine/.venv/bin/python -B \\
|
||||
/home/worsch/railiance-platform/scripts/approval-client-delivery-check.py
|
||||
```
|
||||
|
||||
## Non-secret receipts (railiance-platform `docs/evidence/`)
|
||||
- `2026-09-14-ccr0019-operator-binding.json` — role/policy apply and readback
|
||||
- `2026-09-14-ccr0019-reader-preflight.json` — `status: passed`, `secret_values_read: false`
|
||||
- `2026-09-14-ccr0019-delivery-check.json` — `status: passed`, `approval_mutations: false`, `cleanup: true`
|
||||
|
||||
## Positive evidence the owner expects
|
||||
- Exact read of `platform/data|metadata/workloads/secrets-engine/approval-client`
|
||||
- Private delivery of the existing version-1 value; private runtime file removed
|
||||
- `approval:read` token reaches Approval Engine authenticated (HTTP 404 on a fresh id)
|
||||
- Warden session exited 0 after self-revocation and helper cleanup
|
||||
|
||||
## Negative evidence the owner expects
|
||||
- Denied: sibling `approval-engine/operator-client`, parent metadata/listing,
|
||||
an unrelated workload path, policy read, role read
|
||||
- `approval:consume` token refused on the read route (HTTP 403); no real approval consumed
|
||||
|
||||
## Known gaps (required acknowledgement)
|
||||
- Wrong-group human login untested.
|
||||
- The 404 read proves routing, not a usable claim on a real approval.
|
||||
- File delivery outlives the reading process; removal is operator hygiene.
|
||||
|
||||
## Rollback / revocation (CCR-2026-0019 lifecycle)
|
||||
- Deactivate: detach policy `workload-kv-read-secrets-engine-approval-client` from
|
||||
role `secrets-engine-approval-client-workload-kv-read`; disable the ops-warden
|
||||
catalog entry. The KeyCape verifier lane is unaffected.
|
||||
- Compromise: KeyCape disables the `secrets-engine-approval` registration first,
|
||||
then the value is rotated (shared with CCR-2026-0017) and the policy detached.
|
||||
|
||||
## Not decided here
|
||||
- CCR-2026-0018 retention or coordinated disablement (KeyCape + Approval Engine
|
||||
+ Platform). T06 stays open until both owners confirm that sequence.
|
||||
- Any rotation, reseed, `approval:consume` grant, or CCR-2026-0020 (cancelled).
|
||||
|
||||
## Must not
|
||||
- Display or paste the client secret
|
||||
- Re-run the proof as a substitute for this acceptance
|
||||
- Treat acceptance as authority for any other lane in the D1 window
|
||||
""",
|
||||
},
|
||||
]
|
||||
|
||||
EXCLUDED = [
|
||||
{
|
||||
"workplan": "MASON-WP-0007",
|
||||
"task": "MASON-WP-0007-T05",
|
||||
"owner_repo": "ops-mason",
|
||||
"reason": (
|
||||
"Half the act has no reviewed command. The policy + Kubernetes-auth role script "
|
||||
"railiance-platform scripts/openbao-tenant-engine-audit-core-sender-eso-attended.sh exists "
|
||||
"(silent, idempotent, exit 3 on drift), but the row-7 wrapped seed that copies the tenant-engine "
|
||||
"sender token from the registry to platform/workloads/tenant-engine/audit-core-sender has no "
|
||||
"script: railiance-platform says it has no helper and the plan only names 'the user-engine "
|
||||
"migration technique'. A placeholder child must not be approved. Also MASON-WP-0007-T01 "
|
||||
"(metadata survey: path unused, no conflicting names) is still todo, and ESO's right to create "
|
||||
"serviceaccounts/token in namespace tenant-engine is unverified (MASON-WP-0007-T06)."
|
||||
),
|
||||
"ready_when": (
|
||||
"ops-mason or railiance-platform commits a reviewed silent seed helper, T01 survey is recorded, "
|
||||
"then one memo covers policy/role apply plus seed."
|
||||
),
|
||||
},
|
||||
{
|
||||
"workplan": "RPF-WP-0035",
|
||||
"task": "RPF-WP-0035-T02",
|
||||
"owner_repo": "railiance-platform",
|
||||
"reason": (
|
||||
"Design docs/credential-lane-designs/secrets-engine-service-jwt.md is 'proposed, not provisioned'. "
|
||||
"Its 2026-09-27 return supplies inputs (openbao/auth/keycape-services-config.json, "
|
||||
"openbao/auth/secrets-engine-jwt-role.json, openbao/policies/secrets-engine-login-self.hcl) but "
|
||||
"no reviewed child command and says 'Do not execute a placeholder command'. Live KeyCape client "
|
||||
"registration and protected client-side custody remain unverified, and first-lane apply is "
|
||||
"gated on SECRETS-WP-0007-T04. The earlier sitting memo infd-20260914-c02 for this task was "
|
||||
"created 2026-09-15 and expired unbound 2026-09-16."
|
||||
),
|
||||
"ready_when": (
|
||||
"railiance-platform accepts the design, commits the reviewed silent install/verify child, and "
|
||||
"records KeyCape registration + custody."
|
||||
),
|
||||
},
|
||||
{
|
||||
"workplan": "RPF-WP-0035",
|
||||
"task": "RPF-WP-0035-T08",
|
||||
"owner_repo": "railiance-platform",
|
||||
"reason": (
|
||||
"The attended first-provision already happened. factory-audit-senders-review.md 'Current "
|
||||
"execution status': both version-1 credentials provisioned (seed receipt "
|
||||
"2026-09-11-factory-audit-sender-seed.json) and delivered (2026-09-11-factory-audit-delivery-live.json, "
|
||||
"delivered_and_scope_verified_pending_producer_acceptance); CCR-2026-0021/0022 applied; 'Do not "
|
||||
"repeat provisioning or delivery'. What remains is owner acceptance (independent archive readback, "
|
||||
"audit bearer-revocation), not an attended OpenBao act. The task's blocking_reason is stale."
|
||||
),
|
||||
"ready_when": "railiance-platform re-qualifies T08 to its real remaining owner acceptance work.",
|
||||
},
|
||||
{
|
||||
"workplan": "RAPPCOREHUB-WP-0003",
|
||||
"task": "RAPPCOREHUB-WP-0003-T04",
|
||||
"owner_repo": "rapp-core-hub",
|
||||
"reason": (
|
||||
"No credential change request, design or provisioning script exists for a dedicated "
|
||||
"read:repository Forgejo identity for the core-hub publisher (the only read:repository lane, "
|
||||
"CCR-2026-0014, belongs to policy-nexus and must not be reused). The task also needs Repo "
|
||||
"Manager to fix the identity-canon registry identity and publish a corrected image before the "
|
||||
"123/0 snapshot can pass."
|
||||
),
|
||||
"ready_when": (
|
||||
"The Forgejo identity/custody owner drafts the CCR and silent provisioning child; Repo Manager "
|
||||
"ships the identity-canon correction."
|
||||
),
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def main() -> None:
|
||||
directory = ROOT / BATCH
|
||||
directory.mkdir(parents=True, exist_ok=True)
|
||||
ordinal = []
|
||||
intents = []
|
||||
for n, spec in enumerate(MEMOS, start=1):
|
||||
packet_path = directory / f"{spec['id']}.packet.md"
|
||||
packet_path.write_text(spec["packet"], encoding="utf-8")
|
||||
digest = _sha(spec["packet"])
|
||||
memo = _memo(
|
||||
memo_id=spec["id"],
|
||||
question=spec["question"],
|
||||
brief=spec["brief"],
|
||||
target=spec["target"],
|
||||
packet_id=spec["id"] + "-packet",
|
||||
packet_hash=digest,
|
||||
highlight=spec["highlight"],
|
||||
workplan=spec["workplan"],
|
||||
task=spec["task"],
|
||||
)
|
||||
if memo_from(json.loads(dumps(memo))).question != spec["question"]:
|
||||
raise RuntimeError("round-trip failed")
|
||||
memo_path = directory / f"{spec['id']}.memo.json"
|
||||
memo_path.write_text(dumps(memo) + "\n", encoding="utf-8")
|
||||
ordinal.append(
|
||||
{
|
||||
"n": n,
|
||||
"memo_id": spec["id"],
|
||||
"workplan": spec["workplan"],
|
||||
"task": spec["task"],
|
||||
"hub_task_prefix": spec["hub_task_prefix"],
|
||||
"question": spec["question"],
|
||||
"memo": memo_path.name,
|
||||
"packet": packet_path.name,
|
||||
"packet_hash": digest,
|
||||
"required_highlight": f"{spec['id']}-h1",
|
||||
}
|
||||
)
|
||||
intents.append({"memo_id": spec["id"], "create_client": "informed-decision-sitting-requester", "binding": spec["binding"]})
|
||||
index = {
|
||||
"kind": "informed-decision-batch",
|
||||
"id": f"infd-batch-{SITTING}",
|
||||
"review_group": REVIEW_GROUP,
|
||||
"status": "draft-unsigned",
|
||||
"submitted": False,
|
||||
"one_question_per_memo": True,
|
||||
"approve_all_forbidden": True,
|
||||
"agent_disposition_forbidden": True,
|
||||
"hub_decision": HUB_DECISION,
|
||||
"ordinal": ordinal,
|
||||
"excluded": EXCLUDED,
|
||||
}
|
||||
(directory / "index.json").write_text(json.dumps(index, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
|
||||
create = {
|
||||
"kind": "informed-decision-approval-create-intents",
|
||||
"sitting_id": SITTING_ID,
|
||||
"status": "not-posted",
|
||||
"posted": False,
|
||||
"requester_client": "informed-decision-sitting-requester",
|
||||
"human_control": True,
|
||||
"pdp_path": False,
|
||||
"required_count": 1,
|
||||
"note": "Intents only. Digests are computed by approval-engine at create; do not invent them here.",
|
||||
"intents": intents,
|
||||
}
|
||||
(ROOT / "approval-create-intents.json").write_text(json.dumps(create, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
|
||||
sitting = {
|
||||
"kind": "informed-decision-sitting",
|
||||
"id": SITTING_ID,
|
||||
"review_group": REVIEW_GROUP,
|
||||
"principal": "pending-human-session",
|
||||
"status": "draft-unsigned",
|
||||
"hub_decision": HUB_DECISION,
|
||||
"batches": [index["id"]],
|
||||
"memo_count": len(MEMOS),
|
||||
"excluded_count": len(EXCLUDED),
|
||||
"bind_path": "create approval (attended), Flex Auth exact-record admission, load store, human accept",
|
||||
"note": "Unsigned draft. Live bind substitutes pending-human-session with the authenticated key-cape subject.",
|
||||
}
|
||||
(ROOT / "sitting.json").write_text(json.dumps(sitting, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
|
||||
print(f"Wrote {len(MEMOS)} unsigned memo(s), {len(EXCLUDED)} excluded lane(s) under {ROOT}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
46
workplans/ADHOC-2026-10-03.md
Normal file
46
workplans/ADHOC-2026-10-03.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
id: INFD-WP-ADHOC-2026-10-03
|
||||
type: workplan
|
||||
title: "Provisioning-window sitting draft for hub decision D1"
|
||||
domain: infotech
|
||||
repo: informed-decision
|
||||
status: blocked
|
||||
owner: claude
|
||||
created: "2026-10-03"
|
||||
updated: "2026-10-03"
|
||||
related:
|
||||
- CUST-WP-0075
|
||||
---
|
||||
|
||||
## Draft the provisioning-window sitting
|
||||
|
||||
```task
|
||||
id: INFD-WP-ADHOC-2026-10-03-T01
|
||||
status: done
|
||||
priority: high
|
||||
```
|
||||
|
||||
Dispatched by the-custodian under CUST-WP-0075. The founder wants hub decision
|
||||
`62aa95e4-3ccc-4867-8806-5e3db005b483` (D1, attended OpenBao provisioning
|
||||
window) approved through informed-decision. Batch:
|
||||
`docs/batches/2026-10-03-provisioning-window/` (generator
|
||||
`tools/prepare_provisioning_window_batch.py`, operator steps in its
|
||||
`OPERATOR.md`). Five candidate lanes were read against owner source. One memo,
|
||||
`infd-20261003-p01` (RPF-WP-0035-T06, acceptance of the CCR-2026-0019 scoped
|
||||
delivery proof), was drafted. MASON-WP-0007-T05, RPF-WP-0035-T02,
|
||||
RPF-WP-0035-T08 and RAPPCOREHUB-WP-0003-T04 were excluded with reasons in the
|
||||
batch index. Unsigned; no approval created, nothing submitted.
|
||||
|
||||
## Circulate and bind the sitting
|
||||
|
||||
```task
|
||||
id: INFD-WP-ADHOC-2026-10-03-T02
|
||||
status: wait
|
||||
needs_human: true
|
||||
decision_id: 62aa95e4-3ccc-4867-8806-5e3db005b483
|
||||
blocking_reason: "Founder runs OPERATOR.md Part A: attended approval create, Flex Auth v7 exact-record admission, load, human bind at decisions.coulomb.social."
|
||||
priority: high
|
||||
```
|
||||
|
||||
Agents do not create the approval, admit the record, or bind. After the human
|
||||
disposition, record the receipt under `docs/evidence/` and update `sitting.json`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue