railiance-platform/workplans/ADHOC-2026-10-10.md
codex 6a394c86de
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
ADHOC-2026-10-10: operators/nextcloud retired
Founder run: entry (2 versions) deleted, operators/nextcloud/backup
unchanged, one-shot token revoked and policy deleted, no value read.

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

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 469992@bnt-lap001
Assistant-Session: e4b8e420-df0a-441d-83ae-7f19130594d9
2026-10-10 15:37:52 +02:00

61 lines
2.6 KiB
Markdown

---
id: RPF-WP-ADHOC-2026-10-10
type: workplan
title: "Retire the deprecated operators/nextcloud credential"
domain: financials
repo: railiance-platform
status: finished
owner: claude-code
topic_slug: railiance
created: "2026-10-10"
updated: "2026-10-10"
state_hub_workstream_id: "2d2c3bd2-d05b-5adc-9559-4d6bb360b751"
---
# RPF-WP-ADHOC-2026-10-10 — retire operators/nextcloud
## Delete the deprecated base entry, keep operators/nextcloud/backup
```task
id: RPF-WP-ADHOC-2026-10-10-T01
status: done
priority: low
state_hub_task_id: "d7b91134-13cf-55b8-9291-14efca9465d6"
```
The founder confirmed on 2026-10-10 that `operators/nextcloud` (the base entry)
is a deprecated credential to remove. The live backup account stays at
`operators/nextcloud/backup`. The delete cannot be done from the UI by design:
`operator-custody` is delete-free and `platform-admin` has no grant on the
`operators` mount (openbao/policies/operator-custody.hcl).
`scripts/operators_entry_retire.py` does it without granting anything standing.
As platform-admin it writes a one-shot policy (`read`/`delete` on
`operators/metadata/nextcloud`, `read` on the backup sibling's metadata,
`revoke-self`) and mints a 60s, 8-use orphan token holding only that policy. It
proves the entry and the sibling exist, then metadata-deletes the entry with that
token. It then proves the entry is absent and the sibling unchanged, revokes the
token and deletes the policy on every path. It prints nothing and reads no value.
7 offline tests.
```bash
cd ~/railiance-platform && git pull --ff-only
export BAO_ADDR=http://127.0.0.1:18200 VAULT_ADDR=http://127.0.0.1:18200
unset BAO_TOKEN VAULT_TOKEN
W='warden access openbao-platform-admin-login --exec --'
$W python3 scripts/operators_entry_retire.py --dry-run --confirm 'RETIRE operators/nextcloud' --receipt ~/operators-nextcloud-dry.json
cat ~/operators-nextcloud-dry.json
$W python3 scripts/operators_entry_retire.py --confirm 'RETIRE operators/nextcloud' --receipt ~/operators-nextcloud-retire.json
cat ~/operators-nextcloud-retire.json
```
**Done when:** the receipt says `retired`, with `sibling_after` equal to
`sibling_before`, `token_revoked` and `policy_deleted` true; and ops-mason drops
`operators/nextcloud` from its custody descriptions.
2026-10-10 done: the founder ran the dry run and then the retirement. Outcome
`retired`: `operators/nextcloud` (2 versions) was deleted, and
`operators/nextcloud/backup` is unchanged (v2, 2 versions). The token was
revoked and the one-shot policy deleted; no value was read. Evidence:
`docs/evidence/2026-10-10-operators-nextcloud-retire.json`. ops-mason was told
to drop the entry from its custody descriptions.