5b7c9b844b
Root cause: executeThread awaited gen.next() without racing against the abort signal. When a workflow bundle awaited a long setTimeout between yields, the engine could not respond to kill until the Promise resolved — causing the kill test to flake when the thread completed before kill arrived. Fix: Promise.race gen.next() with an abort listener so kill takes effect immediately, even mid-yield. Also move the bundle's delay to after the first yield (between planner and coder) to ensure the thread is killable while running. Closes #209