- five stories under docs/stories/runtime-v2/: 1 streaming subprocess (42's follow-up; five forks incl. the mailbox-cap collision), 2 PTY, 3 signals-as-events (signalfd lean), 4 termios adoption, 5 SCM_RIGHTS fd passing; 00-story states the arc — the plane learned sockets in 8/11/35, files in 6, this adds processes/terminals/signals - build order 1 -> 2 -> 3; 4 and 5 startable alone; all readiness: refine, brainstormed on demand - board: Five tracks; "▸ runtime-v2" pending section; wmux section now points at it; graph section 6 nodes carry runtime-v2 numbers + links - wmux stories re-reference the track; prefix `rt2` claimed - linkcheck: 0 broken Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit e0451cb4889bb3d03429c0276d03c090269a5ced)
2.5 KiB
Story — wmux, the writeonce terminal multiplexer
The fourth track, and the first whose product is an end-user program
rather than a library or the toolchain: wmux, a tmux alternative written
in .wo. Where porch/ proves writeonce can
carry a web framework, this track proves it can carry a native
fd-and-process workload — PTYs, signals, raw terminals, fd passing —
the territory the
alacritty,
tmux and
zen-browser
parity studies mapped on 2026-09-01.
Numbering restarts at 1 and is local to this track. Frontmatter carries
track: wmux; iteration 1 was briefly language iteration 43 and keeps
was_language_iteration: so a search for the old number still finds it.
Status rules are the repo's, unchanged.
Why a separate track
Same three reasons porch got one, plus a fourth:
- Different substrate, different gates. wmux is
.wosource, proven by its own gate (just wmuxwhen it exists) and a replay corpus, not by the conformance corpus. - Different cadence. Its runtime prerequisites — the
runtime-v2/track: streaming subprocess, PTY, signals, termios, fd passing — are each builtin-sized runtime slices; the product iterations on top are.wowork. - It is a product surface. A working tmux alternative is the strongest public claim the language can make about native workloads.
- The upstream split is explicit. When a wmux iteration needs a new
builtin, that half is a
runtime-v2/iteration, called out by name — the way iteration 42 (bounded subprocess) landed first in the language track before the arc had a folder. The gap chain lives in dependency graph section 6.
Where the sequence came from
The tmux study, measured against a shallow clone in
.dev/reference/tmux: ~112k lines of C, two dependencies, a ~27k-line
multiplexer kernel, a ~12k-line command/format/options DSL that
dissolves into writeonce language features, and one structural trick —
the client passes its own tty fd to the server with SCM_RIGHTS, which is
all detach/attach is. wmux's beyond-tmux leg is native to this stack:
sessions, layout and scrollback in durable: true tables, replayed from
the WAL after a server restart — state tmux loses by design.