diff --git a/CHANGELOG.md b/CHANGELOG.md index af9f536..7167222 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,44 @@ +## v0.159.1 — the signed decommission prunes the guest-bind record (found by v0.159.0's own live proof) (2026-10-17) + +**v0.159.0 is superseded — do not vouch it.** Everything of v0.159.0 below, plus: `signedjobs.DecommissionExecutor` +drops the drive from every guest's bind record (`SetGuestBinds`, wired to the agent's `GuestBindStore`), as the +self-serve decommission always did. Without it a drive decommissioned by an operator-signed job and then forgotten +(R-1124) left a record the 20-second guest-bind re-assert warned about every tick („reconcile: skipping non-enrolled +drive") — seen on demo-hp minutes after the R-1124 proof. Test `TestDecommissionExecutor_PrunesTheGuestBindRecord`, +red-proved. Released: tag `v0.159.1`, sha256 `de8f6ad9…aff9`, bundle `2af3d27d…7cd6` (the same root files as v0.159.0). +**Not vouched.** Delivery to a box on the v0.158.1 bundle: `agent_update 0.159.1` → `agent_config_update 0.159.0-step1` +(sha `1d65edb3…d6cf`, published) → `agent_config_update 0.159.1` (the bundle adds `felhom-thin-check`, R16). + +## v0.159.0 — forget a decommissioned drive that is gone (R-1124); name an orphan thin device in a backup failure (R-1012); Go 1.27.2 (R-972) (2026-10-17) + +**Superseded by v0.159.1 — do not vouch.** Task: „agent release, the catalog allow-list, break-glass rotation, off-site +history check" (felhom.eu `REPORT-agent-allowlist-rotation-2026-10-17.md`). + +- **Go 1.27.2 + x/crypto v0.58.0** (R-972, `37b99d7`): the first release that carries them (v0.158.1 was built with + go1.26.0). +- **R-1124 — a decommissioned drive that is gone is forgotten.** `SudoHostOps.ForgetRetiredDrives` (agent start and the + 20-second storage tick): for a Felhom drive unit whose intent is `decommissioned`, whose `/dev/disk/by-uuid` link is + gone and which is not mounted, `systemctl disable` + the new root verb `felhom-priv-apply unit-forget ` + + `daemon-reload`. The unit is gone, so a later boot no longer waits for the drive and the agent stops listing it (no + „absent by UUID" line every 20 s). A decommissioned drive still plugged in KEEPS its unit and raw mount, so the + one-click re-enroll (H3) still works. `unit-forget` re-checks as root: a felhom by-UUID drive unit (not a network + unit), disabled, its `Where` not mounted, its by-UUID link absent — otherwise refused. Sudoers `FELHOM_MOUNT` gains the + one verb. Tests `TestForgetRetiredDrives_*` and `configs/test_felhom_priv_apply.py` `UnitForget`, red-proved. + **Live on demo-hp:** a loop-backed test drive enrolled through the local API, decommissioned by a signed job (kept + its unit while present), unplugged → 8 s later the unit and its wants link were removed and `GET /disks` dropped it. +- **R-1012 — an orphan thin device is NAMED in the backup failure, never removed.** New READ-ONLY root helper + `felhom-thin-check ` (config bundle): LVM's thin ids before and after, the pool's ids through a metadata + snapshot it reserves and releases (refuses — exit 3 — when someone else holds one; releases on every exit; sends no + other pool message). `internal/thincheck`: an orphan = in the pool and in neither LVM list, on two reads 3 s apart; + fails open. `BackupRunner.SetThinCheck`: before a snapshot-mode backup (a WARN when found) and again after a failure — + the finding is appended in plain words to the error the controller mails to the operator, pointing at the new + runbook `whole-guest-backup-orphan-thin.md`. Sudoers `FELHOM_THINCHECK`, capability `thin-orphan-check`. Tests + `internal/thincheck`, `TestBackup_SnapshotFailure_NamesTheOrphan`, `configs/test_felhom_thin_check.py`, red-proved. + **Live on demo-hp:** on a scratch thin pool (a loop file on `/mnt/hdd_1`, never `pve/data`) the helper listed a made + orphan (device 7) and refused a snapshot held by someone else; on `pve/data` it read 1, 2 = LVM's and released; a + normal whole-guest backup of 9201 ran the check first and finished green. +- Released: tag `v0.159.0`, sha256 `3cfd0a25…edfed5`, bundle `40663c4f…6d681`; step bundle `0.159.0-step1`. + ## CI only — a manual proof that the failure mail can be sent (R-1129, 2026-10-17) No agent release; no binary changes.