There is no host-side deadline on a run.
src/clawbench/runner/run_support/docker.py:522-585 — docker_wait blocks on [ENGINE, "wait", name] with no timeout.
src/clawbench/runner/batch.py:313 — await proc.communicate() has no per-job timeout.
The only time limit lives inside the container (runtime/harnesses/base/entrypoint.sh:251, MAX_WAIT=${TIME_LIMIT_S:-1800}). If that watchdog never fires — entrypoint crash, wedged Chromium, container engine hiccup, zombie container — the host waits forever: clawbench-run blocks, and in batch mode the job holds a concurrency slot indefinitely. A 130-task batch can stall overnight with no error and no summary.
Given batches routinely run 8–20 hours (per wall_hours in the leaderboard CSV), a single wedged container is an expensive failure mode.
Ask:
- Wrap
docker_wait in a host-side deadline of time_limit_s + grace (e.g. +5 min), then docker kill the container and classify the run as infra_failure / host_timeout.
- Wrap
proc.communicate() in asyncio.wait_for with the same bound in batch.py, marking the job error: host_timeout so the batch proceeds.
There is no host-side deadline on a run.
src/clawbench/runner/run_support/docker.py:522-585—docker_waitblocks on[ENGINE, "wait", name]with no timeout.src/clawbench/runner/batch.py:313—await proc.communicate()has no per-job timeout.The only time limit lives inside the container (
runtime/harnesses/base/entrypoint.sh:251,MAX_WAIT=${TIME_LIMIT_S:-1800}). If that watchdog never fires — entrypoint crash, wedged Chromium, container engine hiccup, zombie container — the host waits forever:clawbench-runblocks, and in batch mode the job holds a concurrency slot indefinitely. A 130-task batch can stall overnight with no error and no summary.Given batches routinely run 8–20 hours (per
wall_hoursin the leaderboard CSV), a single wedged container is an expensive failure mode.Ask:
docker_waitin a host-side deadline oftime_limit_s + grace(e.g. +5 min), thendocker killthe container and classify the run asinfra_failure/host_timeout.proc.communicate()inasyncio.wait_forwith the same bound inbatch.py, marking the joberror: host_timeoutso the batch proceeds.