Compare commits
3 commits
cb6396caab
...
34e78e8937
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34e78e8937 | ||
|
|
b2c2848e49 | ||
|
|
a16c33942a |
12 changed files with 453 additions and 32 deletions
12
SCOPE.md
12
SCOPE.md
|
|
@ -65,7 +65,7 @@ records every reviewed plan and the consolidation mapping.
|
||||||
| First | Reported credential exposures need final disposition and dependable operator custody | RPF-WP-0027: KeyCape/NetKingdom residual evidence and S3 custody; RPF-WP-0029: provider invalidation and replacement backup recovery |
|
| First | Reported credential exposures need final disposition and dependable operator custody | RPF-WP-0027: KeyCape/NetKingdom residual evidence and S3 custody; RPF-WP-0029: provider invalidation and replacement backup recovery |
|
||||||
| First | Private attended OpenBao access remains unproven end to end | RPF-WP-0025-T03; keep its window separate from incident/recovery actions |
|
| First | Private attended OpenBao access remains unproven end to end | RPF-WP-0025-T03; keep its window separate from incident/recovery actions |
|
||||||
| Next | Recovery procedures exist, but two cross-owner exercises still lack completion evidence | RPF-WP-0015-T02/T03: S3 contribution, with audit-core and S1/S2 executing their own parts |
|
| Next | Recovery procedures exist, but two cross-owner exercises still lack completion evidence | RPF-WP-0015-T02/T03: S3 contribution, with audit-core and S1/S2 executing their own parts |
|
||||||
| Next | Three requested credential lanes have designs but no live acceptance | RPF-WP-0035: one queue with separate consumer/issuer/approval gates |
|
| Next | Signing lane accepted; two requested credential lanes still await live acceptance | RPF-WP-0035: one queue with separate consumer/issuer/approval gates |
|
||||||
| Next | Numeric availability/recovery promises, evidence freshness, recurring drills, emission and admission drift lack a complete S3 acceptance loop | RPF-WP-0036-T02–T05 |
|
| Next | Numeric availability/recovery promises, evidence freshness, recurring drills, emission and admission drift lack a complete S3 acceptance loop | RPF-WP-0036-T02–T05 |
|
||||||
| Next | Compatibility ownership, stale Hub aliases, and undeployed capability demand need explicit disposition | RPF-WP-0036-T06/T07 |
|
| Next | Compatibility ownership, stale Hub aliases, and undeployed capability demand need explicit disposition | RPF-WP-0036-T06/T07 |
|
||||||
|
|
||||||
|
|
@ -120,6 +120,14 @@ legacy aliases are not additional authoritative obligations.
|
||||||
disclosure drift. `make assurance-capture` pins the cluster and collects only
|
disclosure drift. `make assurance-capture` pins the cluster and collects only
|
||||||
status metadata; `make assurance-check` fails on incomplete/stale/failed evidence.
|
status metadata; `make assurance-check` fails on incomplete/stale/failed evidence.
|
||||||
The first live run found all three database cells Ready with same-day backups
|
The first live run found all three database cells Ready with same-day backups
|
||||||
and archiving, but three failing ESO resources. Recurring restore acceptance,
|
and archiving, and identified three failing ESO resources, since repaired under RPF-WP-0037.
|
||||||
|
A fresh blocker-review capture confirms healthy database and ESO signals.
|
||||||
|
Recurring restore acceptance,
|
||||||
validated restore adapters and Q2 delivery remain open. See
|
validated restore adapters and Q2 delivery remain open. See
|
||||||
[service assurance](docs/service-assurance.md) and RPF-WP-0036.
|
[service assurance](docs/service-assurance.md) and RPF-WP-0036.
|
||||||
|
|
||||||
|
The dedicated Nextcloud Backup account is active with a 10 GiB provider quota
|
||||||
|
and a create-only workload share. Encrypted fixture recovery and consumer
|
||||||
|
refresh are verified; full application restore and predecessor invalidation
|
||||||
|
remain RPF-WP-0029-T02. See the
|
||||||
|
[latest blocked-workplan review](history/2026-09-05-blocked-workplan-closure-review.md).
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@
|
||||||
| workplan | RPF-WP-0029 | blocked | — | workplans/RPF-WP-0029-backup-credential-default-removal.md |
|
| workplan | RPF-WP-0029 | blocked | — | workplans/RPF-WP-0029-backup-credential-default-removal.md |
|
||||||
| workplan | RPF-WP-0035 | blocked | — | workplans/RPF-WP-0035-credential-lane-implementation.md |
|
| workplan | RPF-WP-0035 | blocked | — | workplans/RPF-WP-0035-credential-lane-implementation.md |
|
||||||
| workplan | RPF-WP-0036 | blocked | — | workplans/RPF-WP-0036-platform-service-assurance.md |
|
| workplan | RPF-WP-0036 | blocked | — | workplans/RPF-WP-0036-platform-service-assurance.md |
|
||||||
| workplan | RPF-WP-0037 | finished | — | workplans/RPF-WP-0037-eso-static-token-recovery.md |
|
|
||||||
| task | RPF-WP-0015-T01 | done | — | workplans/RPF-WP-0015-audit-core-custody-and-recovery-coordination.md |
|
| task | RPF-WP-0015-T01 | done | — | workplans/RPF-WP-0015-audit-core-custody-and-recovery-coordination.md |
|
||||||
| task | RPF-WP-0015-T02 | wait | — | workplans/RPF-WP-0015-audit-core-custody-and-recovery-coordination.md |
|
| task | RPF-WP-0015-T02 | wait | — | workplans/RPF-WP-0015-audit-core-custody-and-recovery-coordination.md |
|
||||||
| task | RPF-WP-0015-T03 | wait | — | workplans/RPF-WP-0015-audit-core-custody-and-recovery-coordination.md |
|
| task | RPF-WP-0015-T03 | wait | — | workplans/RPF-WP-0015-audit-core-custody-and-recovery-coordination.md |
|
||||||
|
|
@ -42,6 +41,3 @@
|
||||||
| task | RPF-WP-0036-T05 | done | — | workplans/RPF-WP-0036-platform-service-assurance.md |
|
| task | RPF-WP-0036-T05 | done | — | workplans/RPF-WP-0036-platform-service-assurance.md |
|
||||||
| task | RPF-WP-0036-T06 | wait | — | workplans/RPF-WP-0036-platform-service-assurance.md |
|
| task | RPF-WP-0036-T06 | wait | — | workplans/RPF-WP-0036-platform-service-assurance.md |
|
||||||
| task | RPF-WP-0036-T07 | done | — | workplans/RPF-WP-0036-platform-service-assurance.md |
|
| task | RPF-WP-0036-T07 | done | — | workplans/RPF-WP-0036-platform-service-assurance.md |
|
||||||
| task | RPF-WP-0037-T01 | done | — | workplans/RPF-WP-0037-eso-static-token-recovery.md |
|
|
||||||
| task | RPF-WP-0037-T02 | done | — | workplans/RPF-WP-0037-eso-static-token-recovery.md |
|
|
||||||
| task | RPF-WP-0037-T03 | done | — | workplans/RPF-WP-0037-eso-static-token-recovery.md |
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "docs/forgejo-backup.md",
|
"path": "docs/forgejo-backup.md",
|
||||||
"sha256": "69f6f38de902b80c6de161087b1d5738d1dea7ea35b3d49816d2ea67a1a5329b"
|
"sha256": "af99987e900c8d2322da11c361bac4f1b946a577eed4a93d995cefa31a8e35b5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "docs/forgejo-package-prune.md",
|
"path": "docs/forgejo-package-prune.md",
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,15 @@ in_flight:
|
||||||
missing_fields:
|
missing_fields:
|
||||||
- openbao.policy_file
|
- openbao.policy_file
|
||||||
- openbao.auth
|
- openbao.auth
|
||||||
blocking_reason: Anthropic organization and workspace budget await user input; the sandbox owner machine identity and protected delivery path have not been verified. No live grant or key exists from this request.
|
blocking_reason: User reports key saved through UI; metadata-only owner check confirms
|
||||||
|
live version 2. Sandbox owner machine identity and protected delivery remain unimplemented;
|
||||||
|
workspace scope/budget and provider authentication are unverified.
|
||||||
owner: railiance-platform
|
owner: railiance-platform
|
||||||
requester:
|
requester:
|
||||||
agent: codex
|
agent: codex
|
||||||
reason: User selected a dedicated Anthropic workload API key for GLAS-WP-0012 and SAND-WP-0015. Establish custody and owner delivery before the real local Claude proof.
|
reason: User selected a dedicated Anthropic workload API key for GLAS-WP-0012 and
|
||||||
|
SAND-WP-0015. Establish custody and owner delivery before the real local Claude
|
||||||
|
proof.
|
||||||
review:
|
review:
|
||||||
required: true
|
required: true
|
||||||
required_approvers:
|
required_approvers:
|
||||||
|
|
@ -24,13 +28,21 @@ review:
|
||||||
- at: '2026-09-05'
|
- at: '2026-09-05'
|
||||||
reviewer: user via chat
|
reviewer: user via chat
|
||||||
decision: authentication_model_selected
|
decision: authentication_model_selected
|
||||||
comment: User requested establishment of an Anthropic workload API key. This records the chosen authentication model; final machine bindings are not yet known.
|
comment: User requested establishment of an Anthropic workload API key. This records
|
||||||
|
the chosen authentication model; final machine bindings are not yet known.
|
||||||
|
- at: '2026-09-05'
|
||||||
|
reviewer: user via chat
|
||||||
|
decision: empty_seed_authorized
|
||||||
|
comment: User authorized preparing the existing proposed location with an empty
|
||||||
|
version; user will create a version containing the secret through the OpenBao
|
||||||
|
UI. No runtime grant authorized by this seed.
|
||||||
target:
|
target:
|
||||||
domain: infotech
|
domain: infotech
|
||||||
tenant: glas-harness
|
tenant: glas-harness
|
||||||
workload: sand-boxer-claude-agent-dev
|
workload: sand-boxer-claude-agent-dev
|
||||||
environment: production
|
environment: production
|
||||||
purpose: Dedicated Claude Code inference for the Glas local agent-dev profile, delivered by the sandbox owner.
|
purpose: Dedicated Claude Code inference for the Glas local agent-dev profile, delivered
|
||||||
|
by the sandbox owner.
|
||||||
openbao:
|
openbao:
|
||||||
mount: platform
|
mount: platform
|
||||||
kv_path: platform/workloads/glas-harness/claude-agent-dev
|
kv_path: platform/workloads/glas-harness/claude-agent-dev
|
||||||
|
|
@ -46,34 +58,82 @@ access_frontdoor:
|
||||||
resolvable: false
|
resolvable: false
|
||||||
delivery:
|
delivery:
|
||||||
surface: owner-exec
|
surface: owner-exec
|
||||||
target: Sand-boxer delivers ANTHROPIC_API_KEY only to the selected Claude workload; neither the Glas caller nor the runtime receives an OpenBao token.
|
target: Sand-boxer delivers ANTHROPIC_API_KEY only to the selected Claude workload;
|
||||||
|
neither the Glas caller nor the runtime receives an OpenBao token.
|
||||||
risk:
|
risk:
|
||||||
classification: high
|
classification: high
|
||||||
notes:
|
notes:
|
||||||
- Proposed KV coordinates and catalog selector are reserved design names, not surveyed live objects.
|
- KV path exists with live version 2. Catalog selector is still proposed and no
|
||||||
- Provider credential can incur API charges; use a dedicated workspace and user-selected budget.
|
runtime read grant has been activated.
|
||||||
- Use a workspace-scoped service account key; organization administration is outside the workload grant.
|
- Provider credential can incur API charges; use a dedicated workspace and user-selected
|
||||||
- OpenBao token expiration does not expire the provider key. Provider revocation is required for compromise.
|
budget.
|
||||||
- Owner environment injection can expose the key to descendants within that workload; it is not per-process secrecy against workload code.
|
- Use a workspace-scoped service account key; organization administration is outside
|
||||||
|
the workload grant.
|
||||||
|
- OpenBao token expiration does not expire the provider key. Provider revocation
|
||||||
|
is required for compromise.
|
||||||
|
- Owner environment injection can expose the key to descendants within that workload;
|
||||||
|
it is not per-process secrecy against workload code.
|
||||||
verification:
|
verification:
|
||||||
positive:
|
positive:
|
||||||
- Confirm provider organization, workspace, service account, key identifier and expiration using metadata only.
|
- Confirm provider organization, workspace, service account, key identifier and
|
||||||
- Exact authenticated sandbox owner can read only the intended data entry and deliver the field without logging it.
|
expiration using metadata only.
|
||||||
- Bounded real Claude proof succeeds through enforced provider egress and removes private state on teardown.
|
- Exact authenticated sandbox owner can read only the intended data entry and deliver
|
||||||
|
the field without logging it.
|
||||||
|
- Bounded real Claude proof succeeds through enforced provider egress and removes
|
||||||
|
private state on teardown.
|
||||||
negative:
|
negative:
|
||||||
- Wrong owner identity, sibling KV path, metadata read, parent listing and workload writes are denied.
|
- Wrong owner identity, sibling KV path, metadata read, parent listing and workload
|
||||||
|
writes are denied.
|
||||||
- Generic coding-agent identity cannot retrieve the credential directly.
|
- Generic coding-agent identity cannot retrieve the credential directly.
|
||||||
- No credential or OpenBao token appears in execution replies, artifacts, source tree or State Hub.
|
- No credential or OpenBao token appears in execution replies, artifacts, source
|
||||||
|
tree or State Hub.
|
||||||
- A revoked predecessor provider key fails authentication after controlled rotation.
|
- A revoked predecessor provider key fails authentication after controlled rotation.
|
||||||
activation_conditions:
|
activation_conditions:
|
||||||
- User confirms Anthropic organization and workspace budget; provider service account and key are created through attended Console custody.
|
- User confirms Anthropic organization and workspace budget; provider service account
|
||||||
- Confirm actual sandbox host service identity and auth binding; review exact read policy and separate protected custody writer before apply.
|
and key are created through attended Console custody.
|
||||||
- Seed KV with compare-and-set zero through attended custody; never enter values in chat or command arguments.
|
- Confirm actual sandbox host service identity and auth binding; review exact read
|
||||||
- Positive and negative access, owner delivery and provider authentication evidence pass before route activation.
|
policy and separate protected custody writer before apply.
|
||||||
|
- Seed KV with compare-and-set zero through attended custody; never enter values
|
||||||
|
in chat or command arguments.
|
||||||
|
- Positive and negative access, owner delivery and provider authentication evidence
|
||||||
|
pass before route activation.
|
||||||
|
evidence:
|
||||||
|
- at: '2026-09-05'
|
||||||
|
actor: codex
|
||||||
|
kind: empty_seed
|
||||||
|
result: passed
|
||||||
|
details:
|
||||||
|
- Empty ANTHROPIC_API_KEY version 1 created with CAS zero; user will create version
|
||||||
|
2 in UI.
|
||||||
|
- Request id 50cafc25-8d24-c1d6-5be8-1ade049e088b.
|
||||||
|
- Provider metadata recorded; metadata-only recovery completed after empty response
|
||||||
|
parsing fix; contained sessions revoked.
|
||||||
|
- No secret data read or real key handled; runtime lane remains inactive.
|
||||||
|
- at: '2026-09-05'
|
||||||
|
actor: codex
|
||||||
|
kind: custody_metadata_verification
|
||||||
|
result: passed
|
||||||
|
details:
|
||||||
|
- User reports secret saved in UI. Metadata confirms live version 2 created 2026-09-05T19:12:40.442796563Z,
|
||||||
|
neither deleted nor destroyed.
|
||||||
|
- Metadata request id d0b60424-a749-c72f-593b-ced6172dd183; contained session
|
||||||
|
revoked.
|
||||||
|
- No value read; field content and provider authentication not verified. Runtime
|
||||||
|
lane remains inactive.
|
||||||
lifecycle:
|
lifecycle:
|
||||||
deactivate: Disable the owner route and provider key; revoke outstanding OpenBao reader tokens. Preserve KV history under platform retention rules.
|
deactivate: Disable the owner route and provider key; revoke outstanding OpenBao
|
||||||
rotate: Create a replacement provider key, write with expected-version CAS, stop old runs, verify new delivery and inference, then revoke the predecessor at Anthropic and prove its denial.
|
reader tokens. Preserve KV history under platform retention rules.
|
||||||
compromised: Disable the provider key immediately, stop affected runs and owner route, revoke Bao leases, replace forward through protected custody and record non-secret incident evidence.
|
rotate: Create a replacement provider key, write with expected-version CAS, stop
|
||||||
|
old runs, verify new delivery and inference, then revoke the predecessor at Anthropic
|
||||||
|
and prove its denial.
|
||||||
|
compromised: Disable the provider key immediately, stop affected runs and owner
|
||||||
|
route, revoke Bao leases, replace forward through protected custody and record
|
||||||
|
non-secret incident evidence.
|
||||||
state_hub:
|
state_hub:
|
||||||
workplan_id: GLAS-WP-0012
|
workplan_id: GLAS-WP-0012
|
||||||
task_id: GLAS-WP-0012-T02
|
task_id: GLAS-WP-0012-T02
|
||||||
|
provider_metadata:
|
||||||
|
organization_id: e1a8f305-9e64-4639-a7fd-af48e34f37c7
|
||||||
|
key_name: claude_key_bernd.worsch
|
||||||
|
expires_at: '2027-01-31T21:00:00Z'
|
||||||
|
source: user supplied; provider identity and workspace scope not independently verified
|
||||||
|
|
|
||||||
168
docs/evidence/RPF-blocked-review-2026-09-05.json
Normal file
168
docs/evidence/RPF-blocked-review-2026-09-05.json
Normal file
|
|
@ -0,0 +1,168 @@
|
||||||
|
{
|
||||||
|
"observation": {
|
||||||
|
"schema": "railiance-platform.observation.v1",
|
||||||
|
"cluster_uid": "a553c742-0115-43d4-99a4-a5ca56fe0786",
|
||||||
|
"captured_at": "2026-09-05T19:13:48.284043+00:00",
|
||||||
|
"signals": {
|
||||||
|
"apps-pg.ready": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:40.747193+00:00"
|
||||||
|
},
|
||||||
|
"apps-pg.backup": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T02:15:07Z"
|
||||||
|
},
|
||||||
|
"apps-pg.wal": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:40.747225+00:00"
|
||||||
|
},
|
||||||
|
"apps-pg.headroom": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:33Z"
|
||||||
|
},
|
||||||
|
"platform-pg.ready": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:42.890660+00:00"
|
||||||
|
},
|
||||||
|
"platform-pg.backup": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T02:15:11Z"
|
||||||
|
},
|
||||||
|
"platform-pg.wal": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:42.890688+00:00"
|
||||||
|
},
|
||||||
|
"platform-pg.headroom": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:30Z"
|
||||||
|
},
|
||||||
|
"platform-pg-2.ready": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:45.027444+00:00"
|
||||||
|
},
|
||||||
|
"platform-pg-2.backup": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T02:15:08Z"
|
||||||
|
},
|
||||||
|
"platform-pg-2.wal": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:45.027474+00:00"
|
||||||
|
},
|
||||||
|
"platform-pg-2.headroom": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:26Z"
|
||||||
|
},
|
||||||
|
"openbao.seal": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:47.585545+00:00"
|
||||||
|
},
|
||||||
|
"eso.ready": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T19:13:48.284009+00:00"
|
||||||
|
},
|
||||||
|
"eso.refresh": {
|
||||||
|
"result": "pass",
|
||||||
|
"observed_at": "2026-09-05T18:37:39Z"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"evaluation_at_capture": {
|
||||||
|
"schema": "railiance-platform.assurance-signal.v1",
|
||||||
|
"cluster_uid": "a553c742-0115-43d4-99a4-a5ca56fe0786",
|
||||||
|
"evaluated_at": "2026-09-05T19:13:48.284043+00:00",
|
||||||
|
"signals": {
|
||||||
|
"apps-pg.ready": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"apps-pg.backup": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"apps-pg.wal": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"apps-pg.restore": {
|
||||||
|
"state": "missing",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"apps-pg.headroom": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"platform-pg.ready": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg.backup": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg.wal": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg.restore": {
|
||||||
|
"state": "missing",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg.headroom": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg-2.ready": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg-2.backup": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg-2.wal": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg-2.restore": {
|
||||||
|
"state": "missing",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"platform-pg-2.headroom": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "rapp-postgres"
|
||||||
|
},
|
||||||
|
"openbao.seal": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"openbao.snapshot": {
|
||||||
|
"state": "missing",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"openbao.restore": {
|
||||||
|
"state": "missing",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"offsite.upload": {
|
||||||
|
"state": "missing",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"offsite.restore": {
|
||||||
|
"state": "missing",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"eso.ready": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
},
|
||||||
|
"eso.refresh": {
|
||||||
|
"state": "healthy",
|
||||||
|
"owner": "railiance-platform"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transport": "unmonitored",
|
||||||
|
"guarantees": "unsupported",
|
||||||
|
"threshold_status": "local-diagnostic-only",
|
||||||
|
"healthy": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -47,3 +47,9 @@ owners must first classify current versus obsolete resources, then review
|
||||||
any exact lane repair or retirement. No Secret values were read and no failed
|
any exact lane repair or retirement. No Secret values were read and no failed
|
||||||
resource was simply excluded to make the aggregate pass. These results do not
|
resource was simply excluded to make the aggregate pass. These results do not
|
||||||
by themselves identify a broken provider credential or authorize rotation.
|
by themselves identify a broken provider credential or authorize rotation.
|
||||||
|
|
||||||
|
|
||||||
|
Resolved follow-up: RPF-WP-0037 repaired all three ESO authentication failures
|
||||||
|
and is archived. The subsequent blocker-review capture verifies ESO readiness
|
||||||
|
and freshness. No classification or repair request remains for those incidents;
|
||||||
|
T06 still concerns compatibility ownership and derived-record cleanup.
|
||||||
|
|
|
||||||
82
history/2026-09-05-blocked-workplan-closure-review.md
Normal file
82
history/2026-09-05-blocked-workplan-closure-review.md
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
# Blocked workplan closure review — 2026-09-05
|
||||||
|
|
||||||
|
Reviewed all current plans and every archived plan's task status against INTENT,
|
||||||
|
SCOPE, local evidence, the repository-filtered Hub projection and adjacent owner
|
||||||
|
records. Six source plans remain blocked, with 12 unfinished tasks. No terminal
|
||||||
|
plan has unfinished task blocks. There is no evidence to finish another blocked
|
||||||
|
plan today without additional owner/live acceptance. Reducing the count by
|
||||||
|
cancelling necessary recovery or custody obligations would misstate completion.
|
||||||
|
|
||||||
|
## Completed loose ends removed from the current view
|
||||||
|
|
||||||
|
- Archived finished RPF-WP-0037 with all three tasks done; preserved its ID,
|
||||||
|
UUIDs and evidence. No repeat ESO rotation is needed.
|
||||||
|
- Corrected signing-lane and Backup-account descriptions in the current index
|
||||||
|
and SCOPE: RPF-WP-0035-T04 and RPF-WP-0029-T03 are already live-complete.
|
||||||
|
- Corrected RPF-WP-0015's current blocker: audit-core has implemented and
|
||||||
|
registered the load driver and proved a local accepted/duplicate round trip.
|
||||||
|
A new implementation request would duplicate existing work.
|
||||||
|
- Refreshed the compatibility inventory's hashes after recent documentation
|
||||||
|
changes. Its retention decision remains valid through 2026-10-05; no owner
|
||||||
|
acceptance or source transfer is claimed.
|
||||||
|
|
||||||
|
## Remaining closure requirements
|
||||||
|
|
||||||
|
| Plan / task | Work already complete | Exact remaining result / responsible owner |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 0015 T02 | Reviewed procedure, contained harness, registered audit-core driver | Approved synthetic sender, fresh ≤15-minute window and abort operator; platform lease/ESO recovery plus audit-core retry/readiness proof, accepted by rapp-postgres |
|
||||||
|
| 0015 T03 | Ordered owner-reviewed outage procedure and contained login repair | Fresh encrypted off-host snapshot, independent quorum/console access, named operators and outage window; S1/S2 execute reboot, S3 proves custody/readiness, audit-core proves application recovery |
|
||||||
|
| 0025 T03 | Guarded callback/retraction/rollback tooling | Attended loopback callback/login proof, then guarded public-listener retraction and S1 DNS disposition; preserve package/issuer/tunnel boundaries |
|
||||||
|
| 0027 T03/T05/T06 | KeyCape bundle rotation and provider procedure | NetKingdom's sanitized resolver receipt and incident-owner ruling on unavailable predecessor; confirmed operator custody coordinates and reader/writer handoff. Do not rotate the bundle again or reconstruct exposed values |
|
||||||
|
| 0029 T02 | Backup-owned create-only share, encrypted fixture recovery, ESO/runtime refresh | Owner invalidation receipt for the old Bernd-owned share plus fetched real-backup application restore. Backup account credentials cannot revoke a different owner's share; existing retained data/key custody must survive |
|
||||||
|
| 0035 T02 | JWT design and secrets-engine authentication implementation | KeyCape HTTPS issuer/JWKS, accepted exact claims/audience and consumer opt-in; reviewed scoped role, positive/negative/expiry/revocation proof |
|
||||||
|
| 0035 T03 | Operator matrix design | Accepted tenant/path/fields/capability matrix and IAM assurance binding; then platform validator/executor implementation, consumer CAS/containment and live scoped acceptance |
|
||||||
|
| 0036 T03 | Local freshness evaluator and recovery procedures | Owner-validated recurring restore/snapshot/offsite receipts and accepted cadence. Synthetic transport recovery does not establish full application recovery |
|
||||||
|
| 0036 T04 | Metadata producer and repaired ESO delivery | Railiance-telemetry receiving contract, named recipient, controlled failure delivery and missing-emission detection |
|
||||||
|
| 0036 T06 | Exact inventory and dated retention decision | Accepting compatibility owners/replacement caller proof or renewed retention decision; repo-manager/State Hub repair of retired-alias visibility and regenerated orientation |
|
||||||
|
|
||||||
|
These retain six distinct boundaries: recovery exercises, private operator
|
||||||
|
access, identity incident custody, backup incident recovery, new credential
|
||||||
|
lanes and recurring service assurance. No further merger removes an underlying
|
||||||
|
dependency. Application/identity/host execution remains with its existing owner;
|
||||||
|
S3 retains its acceptance contribution. No coordination messages were sent.
|
||||||
|
|
||||||
|
## Fresh read-only operating evidence
|
||||||
|
|
||||||
|
`docs/evidence/RPF-blocked-review-2026-09-05.json` pins the railiance01 cluster
|
||||||
|
and preserves capture-time evaluation. All 15 collected signals are healthy:
|
||||||
|
readiness, backup, WAL and headroom for three database cells; OpenBao unsealed;
|
||||||
|
ESO readiness and freshness. The seven absent signals are three database
|
||||||
|
restores, OpenBao snapshot/restore and offsite upload/restore evidence adapters.
|
||||||
|
The missing offsite signal is not a failed Backup cutover: its separate receipt
|
||||||
|
proves a synthetic fixture only and has not been promoted to a real-backup
|
||||||
|
assurance receipt. Overall assurance remains incomplete and Q2 unmonitored.
|
||||||
|
|
||||||
|
## Derived records that inflate the apparent backlog
|
||||||
|
|
||||||
|
The repository-filtered Hub read still returns these retired aliases as open:
|
||||||
|
|
||||||
|
| Retired alias UUID | Canonical source UUID |
|
||||||
|
| --- | --- |
|
||||||
|
| 038bc3c0-4492-5b91-95eb-ae515ca205df | b2c25a01-4a80-55c1-90cf-8538000f7e0e (0027) |
|
||||||
|
| 6f8a6cbc-c076-5f0a-ade2-281a7ec71360 | 6dda6039-295e-5cac-aef6-3183c3218649 (0025) |
|
||||||
|
| 88c4ef7f-0af8-580e-90dc-a2bae2675a4d | f4640325-e89c-591d-b58e-ec6b087900ac (0015) |
|
||||||
|
|
||||||
|
The installed brief generator queries open rows without filtering these retired
|
||||||
|
aliases. Regenerating it alone would repeat the defect. Routine exact-commit
|
||||||
|
reconciliation does not remove the historical rows from this read view. Keep
|
||||||
|
this scoped owner defect in T06; do not edit managed IDs, blanket-acknowledge
|
||||||
|
retirements or fabricate file-backed rows. The current workplan README is the
|
||||||
|
accurate orientation until the owner repairs the read/generator contract.
|
||||||
|
|
||||||
|
## Next execution order
|
||||||
|
|
||||||
|
First obtain the old-share owner invalidation receipt and execute a real offsite
|
||||||
|
restore to close 0029; the new account is already operational. Keep the private
|
||||||
|
OpenBao cutover in its own attended window, especially while other credential
|
||||||
|
work is active. Resolve the NetKingdom incident evidence disposition separately.
|
||||||
|
For service assurance, accepted restore adapters/cadence and a Q2 receiver are
|
||||||
|
the meaningful missing deliverables; another local health checker is unnecessary.
|
||||||
|
|
||||||
|
Unrelated in-progress Glas/Anthropic credential files were present at review
|
||||||
|
start and were excluded from this change.
|
||||||
69
scripts/prepare-glas-anthropic.py
Normal file
69
scripts/prepare-glas-anthropic.py
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""User-authorized empty KV seed for CCR-2026-0016; silent OIDC child."""
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
DATA_PATH = 'platform/data/workloads/glas-harness/claude-agent-dev'
|
||||||
|
META_PATH = 'platform/metadata/workloads/glas-harness/claude-agent-dev'
|
||||||
|
RECEIPT = Path('/tmp/glas-anthropic-empty-receipt.json')
|
||||||
|
|
||||||
|
def bao(*args, payload=None):
|
||||||
|
r = subprocess.run(['bao', *args], input=None if payload is None else json.dumps(payload),
|
||||||
|
text=True, capture_output=True, timeout=30)
|
||||||
|
if r.returncode:
|
||||||
|
raise RuntimeError('bao_operation_failed')
|
||||||
|
return json.loads(r.stdout) if r.stdout.strip() else {}
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if sys.argv[1:] == ['--verify-custody']:
|
||||||
|
result = bao('read', '-format=json', META_PATH)
|
||||||
|
observed = result['data']
|
||||||
|
version = observed.get('current_version', 0)
|
||||||
|
current = observed.get('versions', {}).get(str(version), {})
|
||||||
|
if version < 2 or not current or current.get('destroyed') or current.get('deletion_time'):
|
||||||
|
raise RuntimeError('no_live_successor_version')
|
||||||
|
# Deliberately exclude arbitrary custom metadata and all data values.
|
||||||
|
receipt = {'ccr': 'CCR-2026-0016', 'path': META_PATH,
|
||||||
|
'current_version': version, 'created_time': current.get('created_time'),
|
||||||
|
'live_successor_observed': True, 'secret_value_read': False,
|
||||||
|
'provider_authentication_verified': False,
|
||||||
|
'request_id': result.get('request_id')}
|
||||||
|
Path('/tmp/glas-anthropic-custody-receipt.json').write_text(json.dumps(receipt))
|
||||||
|
return
|
||||||
|
if sys.argv[1:] == ['--complete-metadata']:
|
||||||
|
receipt = json.loads(RECEIPT.read_text())
|
||||||
|
if receipt.get('path') != DATA_PATH or receipt.get('version') != 1:
|
||||||
|
raise RuntimeError('invalid_receipt')
|
||||||
|
observed = bao('read', '-format=json', META_PATH)['data']
|
||||||
|
if observed.get('current_version', 0) < 1:
|
||||||
|
raise RuntimeError('missing_seed')
|
||||||
|
elif not sys.argv[1:]:
|
||||||
|
# CAS zero makes concurrent creation and existing versions refuse; no data GET.
|
||||||
|
result = bao('write', '-format=json', DATA_PATH, '-',
|
||||||
|
payload={'options': {'cas': 0}, 'data': {'ANTHROPIC_API_KEY': ''}})
|
||||||
|
version = result['data']['version']
|
||||||
|
receipt = {'ccr': 'CCR-2026-0016', 'path': DATA_PATH, 'version': version,
|
||||||
|
'empty_seed_created': True, 'metadata_written': False,
|
||||||
|
'request_id': result.get('request_id')}
|
||||||
|
with RECEIPT.open('x') as f:
|
||||||
|
json.dump(receipt, f)
|
||||||
|
else:
|
||||||
|
raise RuntimeError('invalid_arguments')
|
||||||
|
# Only non-secret custom metadata. No secret expiry is enforced by KV metadata.
|
||||||
|
bao('write', '-format=json', META_PATH, '-', payload={'custom_metadata': {
|
||||||
|
'ccr': 'CCR-2026-0016', 'custody_owner': 'railiance-platform',
|
||||||
|
'provider': 'anthropic', 'organization_id': 'e1a8f305-9e64-4639-a7fd-af48e34f37c7',
|
||||||
|
'provider_key_name': 'claude_key_bernd.worsch',
|
||||||
|
'provider_expires_at': '2027-01-31T21:00:00Z',
|
||||||
|
'seed_version': '1', 'seed_contains_secret': 'false',
|
||||||
|
'handoff': 'operator creates next version in UI; runtime lane remains inactive'}})
|
||||||
|
receipt['metadata_written'] = True
|
||||||
|
RECEIPT.write_text(json.dumps(receipt))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
try:
|
||||||
|
main()
|
||||||
|
except Exception:
|
||||||
|
sys.exit(1) # contained executor must never return provider/client output
|
||||||
|
|
@ -8,10 +8,10 @@ plans is not a count of missing implementations or independent incidents.
|
||||||
| Workplan | Purpose and next gate | S3 boundary |
|
| Workplan | Purpose and next gate | S3 boundary |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| [RPF-WP-0027](RPF-WP-0027-keycape-live-secret-exposure-recovery.md) | Incident custody and final evidence; accept NetKingdom's residual disposition and publish exact custody handoff | The bundle was already rotated. Provider/MFA reconciliation belongs to NetKingdom. |
|
| [RPF-WP-0027](RPF-WP-0027-keycape-live-secret-exposure-recovery.md) | Incident custody and final evidence; accept NetKingdom's residual disposition and publish exact custody handoff | The bundle was already rotated. Provider/MFA reconciliation belongs to NetKingdom. |
|
||||||
| [RPF-WP-0029](RPF-WP-0029-backup-credential-default-removal.md) | Backup credential exposure; attended provider invalidation and replacement recovery receipts | S3 retains custody acceptance; S1 and forge own their backup execution. |
|
| [RPF-WP-0029](RPF-WP-0029-backup-credential-default-removal.md) | Backup account cutover complete; old share invalidation and full offsite application restore remain | S3 retains custody acceptance; S1 and forge own their backup execution. |
|
||||||
| [RPF-WP-0025](RPF-WP-0025-openbao-operator-only-access.md) | Private OpenBao access; fresh attended callback/login then guarded retraction | Coordinate package, issuer, tunnel and DNS owners; keep the window separate. |
|
| [RPF-WP-0025](RPF-WP-0025-openbao-operator-only-access.md) | Private OpenBao access; fresh attended callback/login then guarded retraction | Coordinate package, issuer, tunnel and DNS owners; keep the window separate. |
|
||||||
| [RPF-WP-0015](RPF-WP-0015-audit-core-custody-and-recovery-coordination.md) | Two prepared recovery exercises; fresh synthetic-load/outage approvals and custody readiness | S3 contributes lease/ESO and snapshot/unseal proof; S1/S2 and audit-core execute their parts. |
|
| [RPF-WP-0015](RPF-WP-0015-audit-core-custody-and-recovery-coordination.md) | Two prepared recovery exercises; registered load driver exists; fresh sender/window/abort approvals and custody readiness remain | S3 contributes lease/ESO and snapshot/unseal proof; S1/S2 and audit-core execute their parts. |
|
||||||
| [RPF-WP-0035](RPF-WP-0035-credential-lane-implementation.md) | One implementation queue for secrets-engine JWT, Fluid operator KV and preflight signing | Three independent task gates; no new approval inherited from the completed designs. |
|
| [RPF-WP-0035](RPF-WP-0035-credential-lane-implementation.md) | Two remaining lanes: secrets-engine JWT and Fluid operator KV | Signing T04 is complete; JWT and Fluid retain separate issuer/consumer gates. |
|
||||||
| [RPF-WP-0036](RPF-WP-0036-platform-service-assurance.md) | Implemented local assurance/admission; waits for recurring restore evidence, Q2 reception and owner handoff | Run the assurance commands; live acceptance and external ownership remain gated. |
|
| [RPF-WP-0036](RPF-WP-0036-platform-service-assurance.md) | Implemented local assurance/admission; waits for recurring restore evidence, Q2 reception and owner handoff | Run the assurance commands; live acceptance and external ownership remain gated. |
|
||||||
|
|
||||||
RPF-WP-0036-T02/T05/T07 are complete; T03/T04/T06 retain the remaining
|
RPF-WP-0036-T02/T05/T07 are complete; T03/T04/T06 retain the remaining
|
||||||
|
|
@ -23,3 +23,11 @@ and [generated current record index](../WORK-RECORDS.md).
|
||||||
|
|
||||||
Do not recreate completed workplans because an old Hub alias or generated brief
|
Do not recreate completed workplans because an old Hub alias or generated brief
|
||||||
still shows them active. Use source IDs, and follow AGENTS.md for verified sync.
|
still shows them active. Use source IDs, and follow AGENTS.md for verified sync.
|
||||||
|
|
||||||
|
## Latest closure review
|
||||||
|
|
||||||
|
[2026-09-05 blocker review](../history/2026-09-05-blocked-workplan-closure-review.md):
|
||||||
|
12 unfinished tasks across six genuine blocked plans. All terminal plans have
|
||||||
|
only done/cancel tasks. Completed ESO recovery RPF-WP-0037 is archived.
|
||||||
|
Three retired Hub aliases still appear open; they are a derived-view defect,
|
||||||
|
not three more workplans. Use this file before the dated generated brief.
|
||||||
|
|
|
||||||
|
|
@ -336,3 +336,14 @@ containment defect; the next attempt still needs current acceptance evidence.
|
||||||
|
|
||||||
Do not create another platform-owned whole-host drill or duplicate these live
|
Do not create another platform-owned whole-host drill or duplicate these live
|
||||||
tasks in RPF-WP-0036; that plan owns recurring service assurance.
|
tasks in RPF-WP-0036; that plan owns recurring service assurance.
|
||||||
|
|
||||||
|
## Blocker recheck — 2026-09-05
|
||||||
|
|
||||||
|
AUDIT-WP-0008-T07 already records the synthetic-load driver at `8c8bcf4`,
|
||||||
|
candidate receipt `7879bf65-06b7-4d0c-bbd1-873b6d20b7fc` and SHA-256
|
||||||
|
`941ba251f638869626b06e9cbf430c70188c0bdf4715e3eff9c7610366f68662`.
|
||||||
|
It also records a local accepted/duplicate HTTP round trip. Driver construction
|
||||||
|
is no longer missing. T02 waits on its separately approved sender identity,
|
||||||
|
fresh bounded window, abort operator and live recovery receipt. Local driver
|
||||||
|
success does not prove lease revocation/ESO recovery. T03 remains a separate
|
||||||
|
outage exercise; no historical window or terminal NO-GO may be reused.
|
||||||
|
|
|
||||||
|
|
@ -229,3 +229,16 @@ negative checks and repeated refresh passed, obsolete invalid delivery tokens
|
||||||
were removed, and all 27 ExternalSecrets now report Ready. The earlier dated
|
were removed, and all 27 ExternalSecrets now report Ready. The earlier dated
|
||||||
assurance snapshot is retained as historical evidence. T04 still waits on the
|
assurance snapshot is retained as historical evidence. T04 still waits on the
|
||||||
accepted Q2 receiver and controlled failure/absence transport proof.
|
accepted Q2 receiver and controlled failure/absence transport proof.
|
||||||
|
|
||||||
|
## Blocker closure review — 2026-09-05
|
||||||
|
|
||||||
|
Fresh metadata capture verified all 15 collected signals healthy; seven recovery
|
||||||
|
signals remain absent from the evaluator. RPF-WP-0037 is archived. The completed
|
||||||
|
Backup account fixture proof remains separate from a full backup/restore receipt.
|
||||||
|
T03/T04 remain waiting on recovery evidence/cadence and Q2 delivery respectively.
|
||||||
|
T06's source inventory hashes were refreshed; its dated retention decision is
|
||||||
|
unchanged. A repo-filtered Hub read confirms three retired aliases still appear
|
||||||
|
open. The installed generator would reproduce them; exact UUID mapping and
|
||||||
|
remaining owner requirements are persisted in
|
||||||
|
`history/2026-09-05-blocked-workplan-closure-review.md`. No duplicate recovery,
|
||||||
|
monitoring or owner-transfer workplan was created.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue