Summary
On clouds without block storage/Cinder, server detail still exposes volume attach/detach flows and can open a volume picker backed by a nil block-storage client. The user can trigger a flow the app intentionally did not enable via tabs.
Evidence
src/internal/app/app.go:722-723 always routes shared.Keys.Attach to openServerVolumeAttach() from server detail.
src/internal/ui/serverdetail/serverdetail.go:1468-1469 still advertises ^a attach volume and ^t detach in the volume pane hints.
src/internal/app/actions_resource.go:149-151 creates volumepicker.New(m.client.Compute, m.client.BlockStorage, ...) even when m.client.BlockStorage is nil.
src/internal/ui/volumepicker/volumepicker.go:256-260 immediately calls volume.ListVolumes(..., client) with that block-storage client.
Impact
Clouds without Cinder support still present a broken server-detail flow instead of disabling it cleanly or showing an explicit unsupported message.
Suggested fix
Gate the hotkeys, hints, and action handlers on block-storage availability, or surface a clear unsupported-state message instead of opening the picker.
Summary
On clouds without block storage/Cinder, server detail still exposes volume attach/detach flows and can open a volume picker backed by a nil block-storage client. The user can trigger a flow the app intentionally did not enable via tabs.
Evidence
src/internal/app/app.go:722-723always routesshared.Keys.AttachtoopenServerVolumeAttach()from server detail.src/internal/ui/serverdetail/serverdetail.go:1468-1469still advertises^a attach volumeand^t detachin the volume pane hints.src/internal/app/actions_resource.go:149-151createsvolumepicker.New(m.client.Compute, m.client.BlockStorage, ...)even whenm.client.BlockStorageis nil.src/internal/ui/volumepicker/volumepicker.go:256-260immediately callsvolume.ListVolumes(..., client)with that block-storage client.Impact
Clouds without Cinder support still present a broken server-detail flow instead of disabling it cleanly or showing an explicit unsupported message.
Suggested fix
Gate the hotkeys, hints, and action handlers on block-storage availability, or surface a clear unsupported-state message instead of opening the picker.