v0.64.0: additive storage discovery (A1) + internal-SSD label (A2)

A1: AutoDiscoverStoragePaths no longer bails on a non-empty registry;
registers only deployed-app paths missing from the registry. Never
mutates/removes existing entries, never re-adds or reactivates a path
present in ANY state (incl. Decommissioned), never flips IsDefault.
A2: InferStorageLabel maps base==felhom-data namespace dir to
'Belső SSD (rendszer)' to disambiguate the internal system volume.
Table-driven tests incl. a companion that fails without the
skip-by-presence guard.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-14 17:33:08 +02:00
parent 688ba0d2a5
commit 2d4d43203f
4 changed files with 341 additions and 38 deletions
+27
View File
@@ -1,5 +1,32 @@
## Changelog
### v0.64.0 — storage-lifecycle cleanups (2026-06-14)
Two settings-layer cleanups from the F9 storage-registration diagnosis
(`felhom.eu/documentation/backlog/DIAGNOSIS-f9-storage-registration-gap-2026-06-14.md`), trunk-based on
`main`, each with table-driven tests that fail on the pre-fix code.
- **A1 — `AutoDiscoverStoragePaths` is now ADDITIVE** (`internal/settings/settings.go`). It previously bailed
early (`if len(s.StoragePaths) > 0 { return }`), so a drive a deployed app referenced but that was missing
from the registry was never picked up after first run. It now registers only the discovered paths NOT
already present, while honouring strict invariants: never removes/modifies a manually-added path; SKIPS any
path already in the registry IN ANY STATE — including a `Decommissioned` soft-marked entry — so it can't
re-add or reactivate it; never flips `IsDefault` (a newly-discovered path becomes default ONLY if the
registry currently has no default at all, and only the first such new path). NOT auto-register-on-attach —
it only picks up paths deployed apps already reference (that recommendation was rejected; manual enrollment
is by design). New `internal/settings/storage_discovery_test.go` covers it, incl. a companion test that
FAILS if the skip-by-presence guard is removed (verified: removing the guard re-adds the decommissioned
path).
- **A2 — internal-SSD label disambiguation** (`InferStorageLabel`, `internal/settings/settings.go`). A path
whose basename is the `felhom-data` namespace dir (the internal system volume, e.g.
`/mnt/sys_drive/felhom-data`) previously labelled as `Tárhely (felhom-data)`, colliding with the per-drive
felhom-data namespace. It now reads **`Belső SSD (rendszer)`**. Discriminator is `base ==
appbackup.FelhomDataDir`; Model-A user drives register their MOUNT ROOT (e.g. `/mnt/felhom-usb`), never
`.../felhom-data`, so this can't mislabel a user drive. Still overridable via `SetStorageLabel`. The demo's
already-seeded `settings.json` label for that path on guest 9201 was updated out-of-band (the seeded value
doesn't auto-change). Separate host-metrics label in `web/agent_host_metrics_handler.go` was intentionally
left untouched.
### v0.63.0 — reflect agent F9/F20-BUG2 disk fields (2026-06-14)
Pass through two new fields the host agent (v0.31.0) now returns on `/disks`, so they reach