Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
7.8 KiB
RETIRE — Peti's box (peti-felhom), 2026-09-25
Operator ruling 2026-09-25: Peti's box is retired (the tester wiped his server; it will not return); its off-site
backup holds no user data and is to be deleted; it leaves the protected list. Architecture read first:
runbooks/target-selection.md, 05-hub-architecture.md §14 (what a customer delete deprovisions),
06-offsite-connectivity.md, 04-control-plane-authorization.md. Evidence: audits/retire-peti-2026-09-25/.
Not done, or changed
- Nothing of Peti's was on ep0. No PBS namespace (
ns: demo-felhom, demo-hp, tester-1), no WireGuard peer in the livewg show, no config naming him. His only off-site item was a Storage Box sub-account (u629488-sub2, id 269130, labelfelhom-customer=peti-felhom, homefelhom-peti-felhom) on the pool box. - The "backup" was never a backup. The sub-account's folder held ONE file:
.ssh/authorized_keys, 81 bytes. No restic repository was ever created — all 482 of his reports (2026-07-10 … 07-15) show 0 off-site snapshots and 0 bytes; his escrow stayed pending. The operator's "no user data" is confirmed by the listing, not only by word. - To list and empty the folder I reset the sub-account's password through the Hetzner API (the product's own
reset_subaccount_passwordaction, scoped to id 269130 after re-reading its label). The key file was removed from inside the folder, then the hub deleted the sub-account. Whether Hetzner deletes a sub-account's folder with it is NOT measured here — so the folder was emptied first, and nothing of his could remain either way. - Cloudflare: his customer config carried a Cloudflare tunnel token and an API token (for
sajatfelhom.hu). They were purged with the customer record. The hub's delete dialog says "tunnel/zone removed", but no leg of the cascade calls Cloudflare — the tunnel and DNS records on Cloudflare's side, if any remain, were NOT inventoried or removed (a row: R-688). - A second, older Storage Box (
PBS-storage-1, u629193, box 611421) once held a folderfelhom-peti-spike/(spike leftovers, perRUNBOOK-ep0-datastore-volume-2026-07-27.md). Its mount on ep0 is gone, and the box is not visible to either API token (404). The register row "delete the box" is the operator's. Not touched. - Code comments that name Peti were left (hub
rollup.go,appliances.go,notify/templates.go; agent pbsdr tests). They explain why code is shaped as it is; no behaviour depends on Peti.
A1 — inventory (before anything was removed)
| where | item | how found |
|---|---|---|
| hub | customer peti-felhom („Peti Proxmox", domain sajatfelhom.hu, dr_tier 0) with 482 reports, 123 events, 1,036 telemetry rows, DR recipe, one-time secret, claim, 1 log tail |
copy of the hub DB (with its -wal), every table's customer_id / host_id |
| hub | host peti-felhom-86d37d — already DELETED 2026-07-15 08:56:22 (host_deletions, escrow_acked 0); no host, guest, escrow, recovery or PBS-secret rows |
same |
| hub | WireGuard peer — none in wg_peers |
same |
| Storage Box | sub-account id 269130 u629488-sub2, home felhom-peti-felhom, label felhom-customer=peti-felhom, created 2026-07-10 |
Hetzner API with the hub's own token, matched on the LABEL |
| ep0 | nothing (namespaces, peers, /etc, /root, /srv grep — one false hit, "competing" in lvm.conf) |
ssh read-only |
| documents | 48 non-history files + workspace rules + 21 memory notes (whole-word pattern; positive control target-selection.md 7 hits, negative control catalog templates 0) | A1-documents.txt |
Control, before: pool box size_data 3,120,562,176, sub-accounts sub1 (demo-felhom), sub3 (demo-hp), sub4
(tester-1); ep0 namespaces demo-felhom 2 snapshots / 220K, demo-hp 2 / 540K, tester-1 2 / 368K; demo boxes'
off-site last_status ok (11 and 90 snapshots, runs 02:15:46Z / 02:18:41Z).
A3 — removal
POST …/subaccounts/269130/actions/reset_subaccount_password→ success (password kept 0600 in the scratchpad, deleted afterwards).- As
u629488-sub2:rm .ssh/authorized_keys,rmdir .ssh→ls -laempty,du -s .1. - Hub preview
GET /configs/peti-felhom/delete— 0 hosts, off-siteu629488-sub2, residue 1,519. ThenPOST /configs/peti-felhom/delete(ack_hosts, ack_reset, ack_purge, confirm_id, expect_hosts=0) → 303. The hub's log: sub-account 269130 deprovisioned; PBS tenancyexisted=false; claim reset; residue purged (reports 482, telemetry 1,036, log tails 1); cascade COMPLETE (journal #20).
A4 — nothing else moved
| item | before | after |
|---|---|---|
| sub-accounts | sub1, sub2 (Peti), sub3, sub4 | sub1, sub3, sub4 — labels and homes unchanged |
pool box size_data |
3,120,562,176 | 3,120,562,176 |
login as u629488-sub2 |
worked | "Permission denied" |
| ep0 namespaces (snapshots / du) | demo-felhom 2/220K, demo-hp 2/540K, tester-1 2/368K | identical |
| ep0 WireGuard peers | .2 .3 .4 .250 | identical |
| hub hosts | demo-felhom, demo-hp, drill-r50 | identical |
| hub customers | demo-felhom, demo-hp, drill-r50, peti-felhom, tester-1 | without peti-felhom |
| hub rows naming peti | — | events 124, notification_log 80, host_deletions 1, customer_resets 1 (audit, by design), app_log_issues 8 (R-244) |
A5 — documents changed
runbooks/target-selection.md (Tier 2 = DooPlex + ep0, ep0's reason rewritten, Peti's section retired); the
unprompted-work rule (4 identical copies); 03, 06, 00-capability-map; runbooks TASK-identity-only-escrow
(obsolete note), RUNBOOK-vzdump-target-move (row 9), RUNBOOK-island-migration; retired banners on
pilot/PETI-tester-agreement.md, RUNBOOK-peti-return, RUNBOOK-peti-pbsdr; register (PETI closed as retired,
R-530, R-244, R-600 annotated); CONTEXT; STATUS; memory notes. Historic audits, tests and CHANGELOGs keep their text.
Claims in the brief
- Peti's backup is on ep0 — WRONG. ep0 held nothing of his; the item was a Storage Box sub-account.
- The hub's host delete removes the WireGuard peer — not testable here: the host was deleted in July and ep0 carries no peer for it now; whether that delete removed one is not recorded (R-600 annotated).
- The backup holds no user data — TRUE, and stronger: it held no backup at all (one 81-byte key file).
Part B — controller v0.272.0 (44ae4de), floor 0.272.0
Red-proofs, each seen failing (retire-peti-2026-09-25/B/redproof-*.txt): R-670 (undo read with the validating
loader → "the undo logged a false backup-block ERROR"), R-671 (remover call dropped → "copies were left behind"; wiring
dropped → "main.go never calls SetUndoCopyRemover"), R-677 (always catalog_since → "got 3 days, want 0"), R-685 page
(line dropped → "a space skip must be said on the page"). Full suite + controller gates green; parity unchanged.
Live on 9202, drill catalog (B/live/): navidrome installed at 0.64.0 with a wrong probe; the step to 0.64.1 failed and
its undo failed → HOLD, 1 undo copy kept; R-670: 0 "backup block rejected" lines while the undo ran (my first count
of 3 "unreadable" was disk-watch lines — corrected in r670-verdict.txt); R-671: the backup page's restore →
"update hold … CLEARED", "removed 1 undo cop(y/ies)", 0 copies left, the seeded user read back; R-677: the head
re-tested at a new digest → „Frissítés elérhető — ma" / "Update available — today" (catalog_since two days old).
R-685 page line: not live — 9202 has no agent, and no demo box is short of space. Teardown: navidrome removed
through the product (0 volumes, 0 copies), 9202 back on the live catalog, drill reset to live main.
Floor saved 09:31:31Z; both demo boxes on 0.272.0 at 09:31:55Z; demo-hp's backup page renders in both languages.
Part C — the night watch: NOT REACHED
The session ended in the daytime (≈11:40 CEST).