eval: `wait(handles, { timeout })` above ~35 min aborts the cell instantly and orphans the agents
omp v18.2.4 (bun global install), Linux.
What happens
An eval (js) cell that spawns agents and waits on them with a timeout larger than
2,147,483 ms returns Command aborted within ~50 ms. The spawned agents keep running, so the
cell's work is neither cancelled nor collected; the handles stay bound in the VM and a later
cell can still wait on them, which is how the failure is survivable but silent.
Node prints the cause when it is visible:
(node:282602) TimeoutOverflowWarning: 2400000000 does not fit into a 32-bit signed integer.
Timeout duration was set to 1.2400000000 is the passed timeout of 2400000 multiplied by 1000, so the value is scaled to
milliseconds a second time before reaching setTimeout. Past 2^31-1 ms the timer fires
immediately (1 ms) and the wait is reported to the caller as an abort.
Reproduction
omp -p --no-session --cwd /var/tmp/repro 'Run exactly one eval cell, js, timeout 2500:
const N = ["r1","r2","r3","r4","r5","r6"]
const HS = N.map(n => agent(`Reply with the single word ${n}. No tools.`, { agent: "zresearcher", label: n }))
const R = await wait(HS, { timeout: 2400000, raiseErrors: false })
return R.length'Result: Command aborted, no cell output, six agents still running.
The same cell with timeout: 1800000 (30 min) completes normally and returns the six results.
The boundary is 2,147,483 ms — the largest value that survives the extra ×1000.
Impact
Measured in a real run on 2026-09-17: two dispatch cells (six and four agents) aborted this way.
Each left its agents running, and the session spent three turns discovering that hub op:wait
does not cover registry peers before recovering the results through the surviving handles.
Nothing in the output said the timeout was the problem — the visible failure is an abort with no
reason, which reads as a harness or model fault.
Suggested fix
Clamp or reject a wait timeout above the timer maximum instead of scaling it into an instant
fire, and distinguish "timed out" from "aborted" in the message. A one-line validation error
(timeout must be ≤ 2147483 ms) would have made this self-evident.
Workaround
Keep wait timeouts at or under 30 minutes, and collect long fan-outs in a separate cell from
the one that spawns them.
Source: can1357/oh-my-pi