2052929768
Dogfood found the gap: a turn that dies into an error screen herdr reports as 'unknown' (e.g. the worker hitting API ENOTFOUND) never produces a working->idle boundary, so CB-106 never fires and the async send rides its full 30-min timeout. The injector now counts consecutive 'unknown' samples while a delegation is outstanding; any working/idle sample resets the streak, so only a genuine wedge (~30s continuous unknown) trips it. It then fires TurnListener.onTurnFailed; CompletionResolver scrapes the error screen and resolves the send via Rendezvous.resolveFailure (Kind.FAILED -> Outcome.WORKER_FAILED), surfaced as async phase=failed / REST status=failed / a [worker failed] MCP note, with the error context as the reason. This also frees a delivery that wedged before pickup, which the injectable-only pickup grace could never release.