Problem
In internal/discover/discover.go:121-145, Probe launches one goroutine per candidate and waits indefinitely for every Dial to return.
A stalled SSH channel or network path can block auto-discovery forever and prevent the daemon from responding to cancellation or shutdown.
Acceptance criteria
- Give each probe a bounded deadline.
- Allow the discovery cycle to be cancelled.
- Ensure all probe goroutines terminate after cancellation or timeout.
- Preserve the distinction between “probe unavailable” and “probe completed with no open ports”.
- Add tests for timeout and cancellation behavior.
Problem
In internal/discover/discover.go:121-145, Probe launches one goroutine per candidate and waits indefinitely for every Dial to return.
A stalled SSH channel or network path can block auto-discovery forever and prevent the daemon from responding to cancellation or shutdown.
Acceptance criteria