The daemon accepted the connection and then said nothing for RUN_SILENCE_TIMEOUT_MS.
dispatchRun settles on a terminal done/fatal chunk, or on the socket closing. A daemon
wedged mid-run sends neither, and the client waited forever: no output, no error, a terminal
that never comes back. CI saw the same shape as an empty stdout and a harness SIGTERM.
Measured on silence rather than total duration, because a long suite is not a wedged one — the daemon streams a chunk per test, so any run making progress keeps resetting the clock.
import * as Client from './client.ts'; Client.DaemonSilent({ ms: 240_000 }).message; // 'daemon accepted the run but sent nothing for 240s — it is wedged, not slow'