Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2.7 KiB
REPORT — v0.157.0: every storage place knows its physical disk(s); POST /disks/same-disk (2026-10-15)
Written in ASD-STE100 Simplified Technical English. Design read first: felhom.eu architecture/16-storage-physical-identity.md
(§3, §4, §8, §10; ACCEPTED 2026-10-15, §13 = what was built), 03-host-agent.md. Task: storage identity build A (operator
rulings D1–D6). Controller counterpart: felhom-controller v0.317.0 (MinAgent 0.157.0); hub v0.154.0 shows the fields.
What changed
internal/storage/identity.go: the physical disk(s) under a place, from/sys,/run/udev/data,/proc/mountsonly (no block I/O).proven, orunknownwithvm/network/usb_bridge/weak_wwn/no_serial.GET /disksrows and the hub report'sstorage_targetsgainkind,physical_disks,identity,identity_reason.POST /disks/same-disk{a, b}→{different, proven, reason, a, b}; scoped like every/diskscall; a path the agent did not mount itself isunmapped.configs/unchanged.
Tests and red-proofs
Fixture /sys + udev trees for every spike case and five same-disk handler tests. Seen failing first: the LVM thin
„diamond" (tmeta/tdata under one pool) read as a failure — fixed by counting a seen node once. Broken on purpose and seen
failing: the VM rule, the vendor-less WWN rule, the own-mount rule (an absent drive), the sys_drive mapping.
python3 scripts/agent_gates.py: all OK.
Release and delivery
scripts/release-agent.sh 0.157.0: tagv0.157.0, sha256addd4041…0aef, bundle0604bc60…397a.- Delivered by signed
agent_updatejobs to Tester 1, demo-hp and the N100 (the three test boxes). NOT VOUCHED — the operator's act. Until the vouch, the global floor cannot declare MinAgent 0.157.0.
Live proof (method: the agent's local API on each PVE host, with the guest's own token)
| Box | GET /disks |
same-disk: drive vs system data |
|---|---|---|
| demo-hp | local/local-lvm proven (SATA SSD), NVMe drive proven (eui:), PBS network |
different, proven |
| N100 | system proven (SATA SSD serial), USB drive proven (the bridge passes the real serial) | different, proven |
| Tester 1 (VM) | every place unknown/vm |
not proven (vm) |
On all three: system data vs /var/lib/docker → same disk, proven; a drive name that is not mounted → unmapped. The hub
stored the same fields (read from its database with the WAL). Evidence: felhom.eu audits/storage-identity-buildA-2026-10-15/.
Observations
- FILED: R-1083 — scratch box 9202 has no
local_apiin itsbootstrap.json, so it cannot use any agent call. - NOT-A-FINDING:
usb_bridgeis built from the design's rule and was not seen on a real enclosure; that is R-1077, already open.