From 688ba0d2a509190bdb705647aff0ceb518be6af2 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Sun, 14 Jun 2026 15:21:29 +0200 Subject: [PATCH] v0.63.0: surface agent wipe_durable_id (F20-BUG2) + guest_attached (F9) on /api/disks The agent (v0.31.0) now returns these on /disks, but the controller dropped them when re-marshalling into its agentapi.DiskInfo mirror. Added both fields (additive) so they reach /api/disks + the dashboard: wipe_durable_id (gate scheme, for the wipe-confirm) and guest_attached (drive bound into THIS guest vs merely host-present). Controller behaviour otherwise unchanged. --- CHANGELOG.md | 14 ++++++++++++++ controller/internal/agentapi/client.go | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 006a888..5e7ac04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ ## Changelog +### 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 +`/api/disks` and the dashboard (the controller previously dropped them when re-marshalling the agent +response). Additive only — `agentapi.DiskInfo` gains: +- **`wipe_durable_id`** (F20-BUG2) — the device's wipe-binding id in the gate's scheme + (`byid:`/`byuuid:`), distinct from `durable_id` (`uuid:`, used for assign). A customer-confirmed + data-bearing wipe must carry THIS id; confirming with the `uuid:` id was rejected (binding_mismatch). +- **`guest_attached`** (F9) — whether the drive is actually bound into this guest (usable in-guest) vs + merely present on the host — the signal whose absence let an unattached HDD look available. + +No behaviour change in the controller itself; the agent owns the fix. (Agent v0.31.0: F9 startup +bind re-assert, F20-BUG2 single wipe-id scheme, F20-BUG3 detached/restart-surviving format.) + ### v0.62.0 — M18 + M19 backlog fixes (2026-06-14) Two verified-LIVE backlog bugs (preserved fix-plans in `felhom.eu/documentation/backlog/`), implemented diff --git a/controller/internal/agentapi/client.go b/controller/internal/agentapi/client.go index 1a83eb5..8d6c8b7 100644 --- a/controller/internal/agentapi/client.go +++ b/controller/internal/agentapi/client.go @@ -245,6 +245,14 @@ type DiskInfo struct { // fs UUID (strip the "uuid:" prefix) is the key the controller passes to AssignDisk — it's the // only way the de-privileged controller learns a mount key it cannot read off the device itself. DurableID string `json:"durable_id"` + // WipeDurableID is the device's wipe-binding id in the gate's scheme (byid:/byuuid:) — + // the id a customer-confirmed data-bearing wipe must carry (F20-BUG2). DISTINCT from DurableID + // (uuid:, used for assign): confirming a wipe with DurableID was rejected (binding_mismatch). + WipeDurableID string `json:"wipe_durable_id,omitempty"` + // GuestAttached reports whether the drive is actually bound into THIS guest (usable in-guest), as + // opposed to merely present on the host (F9) — the signal whose absence let the HDD look available + // when it wasn't attached. + GuestAttached bool `json:"guest_attached"` } // FSUUID returns the raw filesystem UUID from a "uuid:<…>" DurableID, or "" if this disk's identity