When an exec command gets stuck (cmd.Run() blocks on the agent side), the drain goroutine is parked and all subsequent execs for that node pile up waiting. There is currently no CLI tooling to recover this — an operator must:
Shell and exec are independent channels, so the shell remains usable even when exec is frozen. This is the recovery path but it is completely undiscoverable and requires knowing internal curl commands.
Add a hydracluster exec unblock <nodeId> CLI subcommand that:
Also add standalone queue management subcommands:
hydracluster exec queue-status <nodeId> — show in-flight and queued itemshydracluster exec queue-clear <nodeId> — clear queued (not in-flight) itemsThese map directly to the existing API endpoints (GET/DELETE /api/v1/nodes/{id}/exec/queue) which are already implemented server-side but have no CLI surface.
Identified during pre-event analysis 2026-05-21. The shell WebSocket (handlers_shell.go) is a separate channel from exec and stays alive when exec is frozen — this is the key insight that makes unblock possible without a hydrabody restart.