One line in the n8n 2.35.5 release notes carries a useful lesson for every workflow and agent runtime: task runners should not be restarted merely because they are slow.
The distinction sounds obvious, but many recovery loops collapse duration and liveness into the same signal. A job crosses a time threshold, the supervisor assumes it is dead, and the worker is restarted. If the original worker was still making progress, that recovery can duplicate a tool call, discard partial state, or create a retry storm.
Duration is one signal, not the verdict
A robust liveness decision should combine several observations:
Is the worker still emitting a heartbeat?






