Files
felhom-agent/REPORT.md
T

2.7 KiB
Raw Blame History

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/mounts only (no block I/O). proven, or unknown with vm / network / usb_bridge / weak_wwn / no_serial.
  • GET /disks rows and the hub report's storage_targets gain kind, physical_disks, identity, identity_reason.
  • POST /disks/same-disk {a, b} → {different, proven, reason, a, b}; scoped like every /disks call; a path the agent did not mount itself is unmapped.
  • 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: tag v0.157.0, sha256 addd4041…0aef, bundle 0604bc60…397a.
  • Delivered by signed agent_update jobs 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

  1. FILED: R-1083 — scratch box 9202 has no local_api in its bootstrap.json, so it cannot use any agent call.
  2. NOT-A-FINDING: usb_bridge is built from the design's rule and was not seen on a real enclosure; that is R-1077, already open.