R-280: attach list from mounted-but-unregistered filesystems; two-clicks promise made conditional
gates / gates (push) Successful in 17s

After a reinstall the data drive could not be re-attached through any dashboard
route: both candidate lists came from the agent's unclaimed-disk scan, and the
rebuilt box's drives are claimed. The restore page said it was two clicks while
pointing at an empty picker.

The attach list now also carries the controller's own mounted-but-unregistered
filesystems. initialize is untouched, so the format wizard's system/backup
protection is unchanged. The 'two clicks' sentence is conditional on the picker
being non-empty, and says something true and actionable when it is not.
This commit is contained in:
2026-08-10 13:41:32 +02:00
parent c732fe1283
commit b762a37097
9 changed files with 600 additions and 12 deletions
+5
View File
@@ -1053,6 +1053,11 @@ func (s *Server) backupsRestoreHandler(w http.ResponseWriter, r *http.Request) {
// predicate so the page and the resolver cannot disagree. FALSE on a healthy box, where the
// template renders exactly as before (Scenario E).
data["NoRestoreDestination"] = !s.backupMgr.HasRestoreDestination()
// R-280: the notice above told the customer this was „két kattintás" and pointed at a picker
// that was empty, so it was zero clicks. The promise is now conditional on the destination it
// points at actually having something in it — and when it does not, the page says so and names
// what to do instead. Same derivation the picker uses, so the two cannot disagree.
data["HasAttachDestination"] = len(s.attachableStores()) > 0
}
s.executeTemplate(w, r, "backups_restore", data)
}