Files
felhom.eu/REPORT-release-2026-10-29.md
T

7.7 KiB

REPORT — release run 2026-10-29 (attended): D62 + D63, then hub, agent, controller, catalog

Readings taken

  1. D62's place: A (the restore page's kept-copies list), the brief's default; no link on the app's page.
  2. D63's fault switch: a -tags faultinject test build (the brief's first choice for both). Why not a read-only folder for H4: it races the compose write. Why not a SIGTERM-ignoring container for H5: docker stop then kills it and succeeds, so the stop never FAILS. The switch fails the exact step, on demand, once.
  3. H4's version split was staged honestly: the snapshot held the catalog's 3.8.1; just before the restore the live compose was set to the TRUE 3.8.0 (its own digest) and restarted. A first try that edited only the tag (keeping 3.8.1's digest) was dropped — the backup's R-645 guard rightly refused it.
  4. The test boxes' leftovers: the empty anonymous volumes this session's backup presses left (R-1267's class, 21 in all) were removed by name; nothing was pruned.

Five lines

  1. H4 and H5's failed stop: proven live on Tester 1 (08:10 and 08:18 UTC). Nothing reverted.
  2. Hub 0.175.0: live (09:39 CET); one escrow ceremony on Tester 1 end to end; 30 minutes with no unexpected alarm.
  3. Agent 0.168.0: vouched (10:21:56 CET), on all three test boxes; the OOM line proven on the release.
  4. Controller 0.347.0: on every box — the global floor since 10:31 CET (MinAgent 0.158.1); the three test boxes and 9202 run it.
  5. Catalog: pushed (313eaf6); Tester 1 read it.

Versions, digests, CI by commit

Repo Commit CI run / # What
felhom.eu (hub) 19afefab 2485 / #1339 green restore_copy_deleted allowed + operator-only (D62)
felhom.eu bf69bb91 2487 / #1340 green 09 §3 decisions 281/282, 07 §6.3 [DESIGN] — hub 0.175.0 built from here (sha256:642e94b6…)
felhom.eu 41f8f670 2488 / #1341 D63 evidence, R-1340, 07 [FACT]
felhom.eu d6352cd8 — hub manifest → 0.175.0 (synced: Deployment/hub only)
felhom.eu 650aa0cf — release evidence, R-1341, rows moved to their sections
controller e3fce09 2486 / #537 green D62 + D63 — rc.1 (b6640c0a…)
controller fd75c7c 2491 / #538 green v0.347.0 heading — 0.347.0 built from here (sha256:c79b06e6…)
agent 91bd96c 2479 / #285 green 0.168.0 built from here (agent 1e70196c…d2ca, bundle 3415c034…8cb8, tag v0.168.0)
agent f4e63a5, 6b0b093 — CHANGELOG; pinned.day0_agent = 0.168.0
catalog 3671802, ddf20f4, 313eaf6 — R-1338, R-1238 (the night's patches), CHANGELOG/REPORT

The close-out commits' CI runs are read at the end of the session (the final message names them).

What was proven live (evidence: documentation/audits/d63-2026-10-29/)

  • H4 (test build): snapshot 3.8.1, live 3.8.0 → „comes back at the snapshot's version" → FAULT after the compose write → „the live definition is written back before the start" → start; the app on 3.8.0, no hold, both seeds read back.
  • H5's failed stop (test build): a busy volume „not written into"; the put-back's stop FAILED → „nothing is put back; the copy stays …; holding the app"; the app page's hold sentence; the held copy's button off with its reason.
  • D62: on the test build (the list line, wrong name 400, right name 200, gone; the old hub answered the event 400), and end to end on the release build + hub 0.175.0 (the hub stored restore_copy_deleted).
  • Hub: a ceremony on Tester 1 — claimed, two words typed back, „the new package is on the hub"; the hub logged the DR bundle and the blob with the same fingerprint; the box stays escrowed, no stale-package warning.
  • Agent: three signed jobs, each committed, self-check 76/76, sha256 matching; on Tester 1 a hog in a 128 MB Gokapi — host counter 1, one app_oom „seen by docker,cgroup", one operator mail.
  • Controller: walk green on all three (controller healthy, all containers up, 0 refusals, 0 errors, login and file manager 200, https-only); a local restore of Gokapi on Tester 1 (2/2 volumes, running, front door 200).
  • Catalog: Tester 1's sync — „catalog moved 0baf8f9 → 313eaf68", plex and wanderer updated.

Teardown (three layers)

  • Machine — Tester 1: throwaway Radicale and Gokapi removed through the product; 21 empty anonymous volumes removed by name (268, as before); the empty restore-undo folder removed; the test image removed; controller 0.347.0, agent 0.168.0 (the releases). Left: Radicale's restore hold record — the operator's to clear (STATUS, the command). Recovery code re-minted and stored (TESTER1_RECOVERY_CODE_2026_10_29); the 10-25 one opens only older packages.
  • Machine — scratch 9202: controller 0.347.0 (rc.1 then the release); its old images removed; 359 volumes as before.
  • Hosts: demo-hp, felhom-pve, Tester 1's host run agent 0.168.0. No guest made.
  • Hub: 0.175.0; the three per-box floors cleared at 11:07 CET after the global floor's 30-minute watch; nothing else.

Register

Before 226. After 226. Opened 4 (R-1340, R-1341, R-1342, R-1343). Closed 4 (R-1238, R-1338, R-1256, R-1255). R-528 is WATCHING (released and proven; its dated check 2026-11-12 closes it). R-1254 stays NARROWED (released; the lost-answer branch has tests only).

Observations

  • FILED: R-1343 — the operator's hold clear at 11:42 CET was written back by the running controller's next settings save; the CLI's restart hint does not say „inside the guest, at once" (it was run on the host, where that unit skipped itself — no harm). The safe form is clear + restart in one command.

  • FILED: R-1342 — at 10:39 CET Tester 1 mailed the operator „Gokapi did not start … the pre-restore copy is kept": false. My test deleted the copy by hand during the 30-minute stable-start watch (a gap in D62: that watch is an operation on the app) and then removed the app (the watch did not end). Both fixed on main with tests red first; not released (one release per session) — it rides the next controller release.

  • FILED: R-1340 — the mixed-hold operator mail says „database restore failed … rolled back … files and volumes are the snapshot's" for any cause; in H5 nothing moved and the app has no database.

  • FILED: R-1341 — the OOM WARN repeats every 30 s while the container lives (the event goes once).

  • NOT-A-FINDING: the box writes Plex's compose with the ladder entry's digest — the exact-digest pin, by design.

  • NOT-A-FINDING: Tester 1 reports Radicale as held after its removal — the hold record exists; the hub learns held apps by design (D53).

  • NOT-A-FINDING: the first seeds after a restart got 401 — the harness sent an empty password from a new process (the generated login lives in the deploying process); fixed in the driver, not the product.

  • NOT-A-FINDING: setup tries pushed one backup_run_failures event (Radicale not protected off-site) — caused by the first, discarded version split; the R-645 guard was right.

  • NOT-A-FINDING: the first agent watch read None for host_id — the key is nested; read with grep.

  • NOT-A-FINDING: GET /configuration/artifacts with CC's token → 403 — session only, by design.

Other

  • Architecture read: 07-backup-architecture.md §6.3/§8, 03-host-agent.md (escrow), 05-hub-architecture.md, 10-localisation.md, 09-update-architecture.md §3.
  • Instruction files: none edited. System poster: no listed fact changed (a retention age inside a box is not on it).
  • Secrets: every evidence file scanned — 0 hits for the hub token, the hub key, Tester 1's password, the throwaway apps' passwords; the recovery codes never left memory except into sec put (file shredded by it).