Measured runs of one plan, 1,011 todos (10 groups of 100, each group's own check, then the task's), in a Gno realm on a local gno.land chain. Every todo, transaction and block is real; the replay keeps their timing, sped up so a run takes about 30 seconds.
The realm. A worker's first Next is a transaction that takes the next free todo inside the realm; the chain runs transactions one at a time in block order, so it never gives one todo twice. Now each finished todo is one PopNext: it pops the todo and takes the next in the same transaction, or, with nothing free, signs the worker up to wait in a queue on chain; the call that frees a todo hands it to the oldest waiter. Before it was two calls, Pop then Next. A hold has a lease, so a dead worker's todo comes back.
Cheaper calls. A call pays for every stored object it touches: 59,000 gas to read one, so the realm now keeps the plan in fewer, plainer objects (pointers between todos, bitsets, strings) and no trees.
The workers. Each has its own key and sends its own transactions. A todo's work is a sleep, so what is measured is the coordination, not a model: 1 second in the short runs; in the long ones a leaf takes 20 to 40 seconds (fixed by its id, so every run does the same work) and a check 5.
At gno.land's pace. The runs marked 3 s blocks are on a chain paced like gno.land's: a block every 3 seconds, empty or not, and 3 billion gas a block (gno.land's own timeout_commit and block gas), where the dev chain makes a block as soon as transactions wait. Each call waits for the next block, so the chain sets a slower beat; each transaction asks 15M gas.
When things go wrong. The same plan, 100 workers and 20–40 s todos on the 3 s chain, with a 20-block lease on every hold (about a minute), run once with nothing going wrong and once for each failure: a quarter of the workers killed with kill -9 (they ran in a process of their own); six workers taking 150 s on a todo, three renewing their hold as they go and three not; the chain's node frozen for 20 s, and for 90 s; half the workers on a second machine whose watcher is gone for 90 s. Every todo's result is did <its id>, whoever does it, so a run ends with the same results as the run where nothing went wrong only if every todo was done once. Taken back counts holds that ran out and went to someone else; refused, the results sent on them too late; redone, the work spent on them, done again by others.