v0.95.0: SMART coverage — union-path drives + LVM/dm root + device model
Implements SPIKE-smart-coverage-2026-07-25 fixes B+A (additive; MinAgent unchanged). Fix B: storage.SmartReader.SMARTForBacking wired into the /disks union path (localapi Smart seam) so registry/USB drives get a real SMART read (watchdog Known stays enrich-free). Fix A: smartDeviceFor resolves dm/LVM to the whole disk via /sys/block/<dm>/slaves (recursive; skips >1-disk); the builtin local dir on the LVM root gets a SMART-only device from its containing filesystem (never touches backing/durable_id). SmartSummary.ModelName captured from smartctl. Fix C (-d sat) stays rejected. Tests + red-proofs (dm multi-disk skip, enrich smartHint, union routing); Known-path-never-SMARTs asserted.
This commit is contained in:
@@ -1,3 +1,26 @@
|
||||
## v0.95.0 — SMART coverage: union-path drives + LVM/dm root + device model (2026-07-25)
|
||||
|
||||
Additive; **MinAgent unchanged**; hub untouched (unknown JSON fields ignored). Implements the graded
|
||||
fixes from `felhom.eu/documentation/audits/SPIKE-smart-coverage-2026-07-25.md`, which proved both demo
|
||||
disks answer the allowlisted `smartctl -a -j` with PASSED but the agent never asked.
|
||||
|
||||
- **Fix B — union-path SMART:** registry/USB drives ride the `/disks` union path (`driveTargets.Known`),
|
||||
which skips Observe's `enrich`, so they showed "Nincs adat" despite working SMART. New
|
||||
`storage.SmartReader` (`SMARTForBacking`, reuses `smartDeviceFor`) is wired into the union path via a
|
||||
localapi seam — the USB drive now reports its real verdict. The watchdog `Known` path stays
|
||||
enrich-free (asserted: zero smartctl calls).
|
||||
- **Fix A — LVM/device-mapper resolution:** `smartDeviceFor` gains a dm branch that resolves
|
||||
`/dev/dm-N` / `/dev/mapper/X` to the single backing whole disk via `/sys/block/<dm>/slaves`
|
||||
(recursive; **skips** rather than guesses when slaves span >1 physical disk). And the builtin `local`
|
||||
dir on the LVM root — whose `backing_device` is empty by design (removable-safety) — now gets a
|
||||
**SMART-only** device resolved from its containing filesystem (mount table), never touching
|
||||
`backing_device`/`durable_id`. The system SSD stops reading "Nincs adat".
|
||||
- **Device model:** `SmartSummary.ModelName` captured from smartctl's own `model_name` (already parsed),
|
||||
so the controller card can label a disk "TOSHIBA MQ04ABF100" instead of a raw UUID.
|
||||
- Fix C (`-d sat`) stays rejected (disproven live; absent from sudoers). No sudoers/manifest change.
|
||||
Consumed by controller v0.171.0. Tests: dm-resolution table (+multi-disk-skip red-proof), containing-fs
|
||||
resolution (+red-proof), union-path SMART (+red-proof), model capture, Known-path-never-SMARTs.
|
||||
|
||||
## v0.94.0 — serialize per-disk SMART into the /disks payload (2026-07-24)
|
||||
|
||||
Additive, backward-compatible; **MinAgent floor unchanged** (the controller feature-detects by payload
|
||||
|
||||
Reference in New Issue
Block a user