prompt cancellation via all-fibers registry + adoption guide
interruptTask now walks an intrusive all-live-fibers list, reaching
fibers parked on io readiness, futex, timers, or await alike — the
'cancel lands on next natural wakeup' gap is closed. new test: cancel
a fiber parked in netRead on a silent socket; must return promptly
with error.Canceled. 16/16 on Debug+ReleaseSafe x macos+linux.
docs: adoption-guide.md — general guide for swapping Io.Threaded for
zio.ZioBackend in any project (zlay as worked example): when to adopt,
the swap, what-runs-where table, the four domain rules, gotchas
(readSliceShort, close-as-wakeup, shutdown order), rollout discipline,
honest maturity status.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
prompt cancellation via all-fibers registry + adoption guide
interruptTask now walks an intrusive all-live-fibers list, reaching
fibers parked on io readiness, futex, timers, or await alike — the
'cancel lands on next natural wakeup' gap is closed. new test: cancel
a fiber parked in netRead on a silent socket; must return promptly
with error.Canceled. 16/16 on Debug+ReleaseSafe x macos+linux.
docs: adoption-guide.md — general guide for swapping Io.Threaded for
zio.ZioBackend in any project (zlay as worked example): when to adopt,
the swap, what-runs-where table, the four domain rules, gotchas
(readSliceShort, close-as-wakeup, shutdown order), rollout discipline,
honest maturity status.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fiber gauntlet: root-cause and fix the ReleaseSafe stack-switch crashes
vendor std's fiber.zig and prove the primitive sound under ReleaseSafe on
macos-aarch64, linux-aarch64, linux-x86_64 with two one-word clobber fixes:
- .x30 -> .lr: LLVM < 23 silently drops x29/x30 inline-asm clobbers
written by xN name (llvm/llvm-project #167783); zig emits ~{x30}
verbatim, so LLVM parks live values in the link register across the
switch. proven by disassembly: IR contains ~{x30}, machine code keeps
the loop counter in x30 across the asm and reads back a return address.
- add .x18: reserved on darwin, general-purpose on linux — upstream's
omission lets linux codegen cache values in x18 across switches.
plus one harness fix (x86_64 jmp-entry needs rsp biased 8 mod 16).
gauntlet: 100k switches, 256 interleaved fibers, cross-thread migration —
7/7 everywhere, Debug and ReleaseSafe. this fully explains the april
production GPFs, the macos Dispatch crashes on 0.16/master, and upstream
#35712. full evidence chain in docs/fiber-gauntlet-2026-07-09.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>