| d1ab8e37 |
refactor: merge reusable picker presentation |
a73x |
2026-09-09 |
| df2dc36a |
refactor: extract reusable picker presentation |
a73x |
2026-09-09 |
| 1b15df83 |
docs: add marketing documentation |
a73x |
2026-09-09 |
| ea607659 |
docs: align toolchain instructions with mise |
a73x |
2026-09-09 |
| eef028e2 |
docs: record forwarding landing validation |
a73x |
2026-09-08 |
| 8d4f4e41 |
feat: add native local TCP forwarding |
a73x |
2026-09-08 |
| 03661841 |
docs: require plan-first delegated changes |
a73x |
2026-09-07 |
| cf196f16 |
feat: fullscreen native panes |
a73x |
2026-09-07 |
| 7fa72ef8 |
test: consolidate native scenarios and fixtures |
a73x |
2026-09-07 |
| a9b271c8 |
fix: dismiss native command hints on invalid keys |
a73x |
2026-09-07 |
| c89f85dd |
feat: open native panes on the focused target |
a73x |
2026-09-07 |
| a5fc3918 |
feat: align native split bindings with sway |
a73x |
2026-09-07 |
| 9940d8fd |
test: consolidate native end-to-end journey |
a73x |
2026-09-07 |
| 86d04514 |
feat: add native font fallbacks |
a73x |
2026-09-07 |
| 87b2368d |
build: lint development builds |
a73x |
2026-09-07 |
| b3de1802 |
chore: remove stale wall selection alias |
a73x |
2026-09-07 |
| 73034a05 |
feat: add native clipboard paste |
a73x |
2026-09-07 |
| 751dce3d |
refactor: separate native clipboard shortcuts |
a73x |
2026-09-07 |
| 5b6c89ea |
refactor: share surface input encoding |
a73x |
2026-09-07 |
| 30a49f6d |
mise |
a73x |
2026-09-06 |
| 6a4b3a79 |
chore: remove obsolete demos and QUIC spike |
a73x |
2026-09-06 |
| ea49739c |
merge: integrate gui text selection sprint |
a73x |
2026-09-06 |
| 236ed2c6 |
docs: specify sprint models |
a73x |
2026-09-06 |
| ab4acd00 |
docs: record selection-follow approval and demo teardown |
a73x |
2026-09-06 |
| 0716f07b |
feat: keep native selections anchored as output scrolls |
a73x |
2026-09-06 |
| 6a139ebd |
docs: record mouse product sign-off and demo teardown |
a73x |
2026-09-06 |
| f1027928 |
docs: publish application mouse demo and review notes |
a73x |
2026-09-06 |
| 03138bb4 |
feat: forward native application mouse and clipboard writes |
a73x |
2026-09-06 |
| 93a94c8d |
refactor: share terminal mouse encoding with wheel input |
a73x |
2026-09-06 |
| 444ebf6e |
docs: pin moving-text and shared tmux selection gaps |
a73x |
2026-09-06 |
| 7897f7d8 |
fix: retain native selection through live terminal redraws |
a73x |
2026-09-06 |
| a1b93332 |
fix: preserve native selection while scrolling history |
a73x |
2026-09-06 |
| eedff557 |
feat: scroll native panes through history and applications |
a73x |
2026-09-06 |
| 0384efae |
docs: serve sprint demos locally unless publishing is requested |
a73x |
2026-09-06 |
| ee9d0f38 |
docs: shorten agent guidance and separate detailed contracts |
a73x |
2026-09-06 |
| c5be8085 |
build: add pinned linting and reliable development checks |
a73x |
2026-09-06 |
| f1d041f3 |
refactor: separate daemon upgrade orchestration |
a73x |
2026-09-06 |
| 5cee2d84 |
docs: require Shift-drag in application mouse parity |
a73x |
2026-09-06 |
| 04b2c810 |
fix: handle native copy shortcut before terminal input |
a73x |
2026-09-06 |
| 5f6c40b6 |
docs: tear down sprint demos after acceptance |
a73x |
2026-09-06 |
| 3754dae9 |
feat: select native terminal text and copy on release |
a73x |
2026-09-06 |
| b0a68b12 |
refactor: share terminal selection gestures with native clients |
a73x |
2026-09-06 |
| 8d32a5c2 |
docs: require reuse and ownership evidence in sprint delivery |
a73x |
2026-09-06 |
| 225863b6 |
refactor: give font settings one owner in the native core |
a73x |
2026-09-06 |
| 6b45b04f |
docs: reconcile appearance review and scope wheel scrolling |
a73x |
2026-09-06 |
| 6c341990 |
docs: record appearance approval and GUI parity backlog |
a73x |
2026-09-06 |
| d0151836 |
feat: load Ghostty theme files for native appearance |
a73x |
2026-09-06 |
| 693d0382 |
fix: notify QUIC peers before daemon shutdown |
a73x |
2026-09-06 |
| e9c4a928 |
feat: configure native fonts and preserve them across display scales |
a73x |
2026-09-06 |
| 9eadbcea |
docs: require sprint review pages and record appearance approval |
a73x |
2026-09-06 |
| 58e66682 |
feat: centralize native colours with a warm theme trial |
a73x |
2026-09-06 |
| bb91afde |
build: include muxg in release and install targets |
a73x |
2026-09-06 |
| 7d972a65 |
docs: share sprint delivery workflow with repository agents |
a73x |
2026-09-06 |
| c64627bc |
docs: record the wall freeze and the single-target terminal client |
a73x |
2026-09-05 |
| d2323cb8 |
fix: a burst of dials past the observer table waits in the backlog |
a73x |
2026-09-05 |
| 547a0911 |
docs: record the socket-path watch, its log trail and the QUIC admin door |
a73x |
2026-09-05 |
| 4d48bfad |
feat: mux d stop, dump and stats take --quic for a daemon whose socket is gone |
a73x |
2026-09-05 |
| ede80939 |
feat: a deleted socket path is logged and taken back within a second |
a73x |
2026-09-05 |
| ad746c0f |
docs: record native trial acceptance for merge |
a73x |
2026-09-05 |
| d01b5506 |
feat: streamline native split chords and End feedback |
a73x |
2026-09-05 |
| 2a48815a |
docs: define component owner scopes and handoffs |
a73x |
2026-09-05 |
| 74730ed7 |
refactor: isolate native core and component development gates |
a73x |
2026-09-05 |
| efc99d58 |
refactor: separate native interaction policy from SDL handling |
a73x |
2026-09-05 |
| ba2ab8f3 |
docs: record approved SSH demo sharing |
a73x |
2026-09-05 |
| 3bf0fc41 |
fix: stop native reconnect on SSH authentication refusal |
a73x |
2026-09-05 |
| 32da9a4d |
docs: record final native tiling trial acceptance |
a73x |
2026-09-05 |
| 1d43cd59 |
fix: preserve native command mode across delayed End replies |
a73x |
2026-09-05 |
| df13094a |
docs: trial ergonomic choices before recording acceptance |
a73x |
2026-09-05 |
| 106552cd |
test: guard native raw-output responsiveness with release builds |
a73x |
2026-09-05 |
| 04437bf9 |
feat: restore native workspaces and manage pane lifecycle |
a73x |
2026-09-05 |
| aa5e977b |
refactor: centralize native attachment ownership before lifecycle sprint |
a73x |
2026-09-05 |
| 58052e9d |
docs: record sprint 3 mouse demo acceptance |
a73x |
2026-09-05 |
| 3eab2a35 |
feat: resize native pane dividers with mouse and keyboard |
a73x |
2026-09-05 |
| 3eaad756 |
refactor: unify native layout planning before resize sprint |
a73x |
2026-09-05 |
| 89344c19 |
docs: record sprint 2 demo acceptance |
a73x |
2026-09-05 |
| 67a1e976 |
feat: add native host and session pickers |
a73x |
2026-09-05 |
| d903a815 |
fix: align the native command prefix with mux |
a73x |
2026-09-05 |
| c5e30b30 |
feat: add independent native terminal panes |
a73x |
2026-09-05 |
| b8e8ca5a |
test: cover redraw erasure and protected terminal state |
a73x |
2026-09-05 |
| 446f1a20 |
fix: render native fonts at the display pixel scale |
a73x |
2026-09-04 |
| 5570679e |
fix: normalize retained control cells in snapshots and deltas |
a73x |
2026-09-04 |
| f25e121b |
docs: describe native viewer usage and verified delivery |
a73x |
2026-09-04 |
| c49a06ed |
feat: render native sessions with shared terminal input and reconnect |
a73x |
2026-09-04 |
| b7dbcdaf |
build: add opt-in native client and OpenGL probe |
a73x |
2026-09-04 |
| 794a3433 |
docs: the native client plan is rebased onto cells on the wire |
a73x |
2026-09-04 |
| b8b679eb |
docs: the native client implementation plan |
a73x |
2026-09-04 |
| 0b5110d2 |
docs: the native client is a session viewer painted from the grid (spec) |
a73x |
2026-09-04 |
| 406628a2 |
chore: zig fmt the blank line left by the wrapper deletion |
a73x |
2026-09-04 |
| 01ef5e8a |
docs: the transports are dumb; it is the frames that changed |
a73x |
2026-09-04 |
| 124ae700 |
refactor: drop the Grid.clipCol and Grid.snapWide wrappers |
a73x |
2026-09-04 |
| f429a992 |
fix: cell text carrying a control byte is refused at the decoder |
a73x |
2026-09-04 |
| d1fc858d |
fix: a snapshot that blanked the grid before failing ends the tile |
a73x |
2026-09-04 |
| 56a99c97 |
docs: the repo figures are the rebased tree's |
a73x |
2026-09-04 |
| fbbe3293 |
docs: the wasm figure is the final tree's, and the README quotes bytes per keystroke |
a73x |
2026-09-04 |
| ca7fac28 |
test: the bench bounds a keystroke's bytes, not a ratio the snapshot's size now dominates |
a73x |
2026-09-04 |
| c2344ddb |
docs: record cells on the wire, its measurements and the clean break |
a73x |
2026-09-04 |
| 79da83da |
test: the grid's wide flags are pinned against ghostty's page cells |
a73x |
2026-09-04 |
| 1970473f |
fix: mux a reads a scrollback chunk as cells, not as VT with SGR in it |
a73x |
2026-09-04 |
| 8c4695ae |
test: the delta fixture replays through the one core, and a zero-row delta is pinned |
a73x |
2026-09-04 |
| 12cb9419 |
build: the engine is its own module, and no client row links ghostty-vt |
a73x |
2026-09-04 |
| 94b89d3d |
refactor: the replica measures the grid it holds, and a delta paint holds no row list |
a73x |
2026-09-04 |
| 8afffece |
test: pin that a selection paints its cells plain, whatever style they carry |
a73x |
2026-09-04 |
| a54a8105 |
fix: a blank row paints nothing, and a trailing default space is not a divergence |
a73x |
2026-09-04 |
| 3c7beb0b |
feat: every painter reads the grid, and the two browser clients hold one |
a73x |
2026-09-04 |
| f07a56c8 |
feat: the wire carries cells; the replica is a grid and every painter reads it |
a73x |
2026-09-04 |
| cefede26 |
feat: term_modes carries the alternate screen and DECCKM, so the wheel rule needs no engine |
a73x |
2026-09-04 |
| 63427849 |
feat: the client grid, pinned against the engine as its oracle |
a73x |
2026-09-04 |
| a9b26feb |
fix: an interior blank cell is a space on the wire, so a curses row stays one ascii run |
a73x |
2026-09-04 |
| 519410b1 |
fix: the run header is a delta against the previous run, as SGR is |
a73x |
2026-09-04 |
| 053ae6ef |
docs: the run header is a delta, after the size gate refused the absolute one |
a73x |
2026-09-04 |
| 632d1166 |
feat: the daemon encodes a grid row as cells, and the size is measured |
a73x |
2026-09-04 |
| 5db58b82 |
fix: CellRowWriter owns each cell's text until the run closes |
a73x |
2026-09-04 |
| 6c3ecd04 |
feat: the CellRow codec, a grid row as runs of styled cells |
a73x |
2026-09-04 |
| 941927df |
docs: cells on the wire — the design and the plan |
a73x |
2026-09-04 |
| b2cc0a99 |
test: the e2e pin counts the Ctrl-\ X scenario |
a73x |
2026-09-04 |
| d6f7c2af |
feat: Ctrl-\ X ends the focused pane's session through its own pump |
a73x |
2026-09-04 |
| 42e13926 |
fix: picker repaint clears the rows a shorter box no longer covers |
a73x |
2026-09-04 |
| 99b86336 |
test: the taken-port leg counts listeners through the oracle, so the web group runs on macOS |
a73x |
2026-09-04 |
| 28780537 |
fix: mux web refuses a port another hub already listens on |
forge-4 |
2026-09-04 |
| 15b5fbcc |
fix: collectLeafIds propagates the allocation failure it was swallowing |
claude |
2026-09-04 |
| 5ba8bafa |
Merge branch macos-port-step3: the Darwin arms, and mux runs on a Mac (macOS port, step 3) |
a73x |
2026-09-04 |
| 298bebbf |
docs: the release is one tarball per OS |
a73x |
2026-09-04 |
| b3562f8e |
test: the xos QUIC agent leg reads mux a's exit code on the box |
a73x |
2026-09-04 |
| db06838a |
build: make release-mac publishes the Mac tarball from MAC_BUILDER |
a73x |
2026-09-04 |
| acdaffb0 |
build: RELEASE_TARGET follows the host, and a Mac cuts a Mac release |
a73x |
2026-09-04 |
| 39bf2478 |
docs: the macOS gates name their boxes, and the guest is provisioned |
a73x |
2026-09-04 |
| 6d5756ad |
build: the Makefile names the gates' boxes and provisions a guest |
a73x |
2026-09-04 |
| 3fb9ee75 |
test: make xos takes its three boxes by name |
a73x |
2026-09-04 |
| 2e5ce7ef |
test: make mac takes MAC_BOX and MAC_BUILDER by name |
a73x |
2026-09-04 |
| 09776b98 |
test: the macOS guest's lifecycle is a provisioning script |
a73x |
2026-09-04 |
| 9e1ab77e |
test: one library for the boxes the macOS gates share |
a73x |
2026-09-04 |
| 2f9e9835 |
fix: the xos preflight ssh takes -n, so a tty on stdin cannot stop it |
a73x |
2026-09-04 |
| 7e20404d |
docs: the Darwin spellings and the claims that had drifted past them |
a73x |
2026-09-04 |
| 5a0a06de |
chore: test/mac.sh is executable like its sibling gates |
a73x |
2026-09-04 |
| f61b02b6 |
fix: the Darwin runtime-directory fallback is .macos by name |
a73x |
2026-09-04 |
| f3f916f1 |
test: the pty grace test fails when the child died inside the grace |
a73x |
2026-09-04 |
| b2deef85 |
test: the grace table arms its stubborn shells through the fixture doors |
a73x |
2026-09-04 |
| fe38451f |
test: bans.sh refuses a backtick inside an unquoted heredoc |
a73x |
2026-09-04 |
| 4e8641a1 |
test: the third backticked word inside an unquoted heredoc |
a73x |
2026-09-04 |
| e542a342 |
docs: the Darwin arm, its measurements and the Mac e2e verdict |
a73x |
2026-09-04 |
| a1ed572c |
test: the last padded wc count |
a73x |
2026-09-04 |
| e4156c53 |
test: the daemons whose label bar is asserted get a socket path that fits one |
a73x |
2026-09-04 |
| c0471242 |
test: the pager leg reads its own anchor and asserts exactly 24 rows on both OSes |
a73x |
2026-09-04 |
| 97a6a21f |
test: four more Linux-only assumptions in the e2e harness |
a73x |
2026-09-04 |
| cbf1a48f |
test: the e2e suite stops depending on a fast reap, a pager's height and a $TMPDIR without a trailing slash |
a73x |
2026-09-04 |
| 3dc3515c |
test: the e2e harness reads the process table and its counters the way both OSes answer |
a73x |
2026-09-04 |
| 9d8e70b1 |
fix: the upgrade preflight reads Darwin's arm64 as aarch64 |
a73x |
2026-09-04 |
| 1477514f |
test: the Linux-to-Mac leg pins the port the Mac's daemon actually announced |
a73x |
2026-09-04 |
| 6738726c |
test: the cross-OS gate closes stdin for the mux verb that proxies |
a73x |
2026-09-04 |
| 7c02ae1a |
test: the cross-OS gate starts its Linux daemon on the box's own default key |
a73x |
2026-09-04 |
| c3a7ad58 |
fix: the Darwin arms answer ENOTCONN as a gone peer, not a panic |
a73x |
2026-09-04 |
| ab23cc7f |
fix: make install on a Mac names the native target, which is the only one that builds |
a73x |
2026-09-04 |
| 8f8ed018 |
test: make xos attaches a Mac client to a Linux daemon and a Linux client to a Mac daemon, over ssh and QUIC |
a73x |
2026-09-04 |
| 3fe816a8 |
test: the mac gate pins one daemon and reads its exe by pid |
a73x |
2026-09-04 |
| c51815d8 |
test: the repeated-end test pins that the shell outlives the grace |
a73x |
2026-09-04 |
| 4ab43004 |
test: the nag test pins the grace it is named for |
a73x |
2026-09-04 |
| 0b12f4e3 |
test: real_path refuses a missing parent on perl too, and timeout has a pin |
a73x |
2026-09-04 |
| 92bb8917 |
test: the stubborn shell's fixture owns its own readiness wait |
a73x |
2026-09-04 |
| 762d350f |
test: the stubborn-shell wait names the session the test ends |
a73x |
2026-09-04 |
| 8b70b1e0 |
test: the Darwin oracle answers on a bare macOS through perl, not coreutils |
a73x |
2026-09-04 |
| 5db1d50b |
docs: step 3 plan gains Task 9, the cross-OS journeys gate |
a73x |
2026-09-04 |
| e5af07b9 |
test: the stubborn shell is armed before anything ends it |
a73x |
2026-09-04 |
| 45b67e78 |
test: make mac drives a pristine macOS guest on the Mac the way make vm drives the VM |
a73x |
2026-09-04 |
| b38521e1 |
test: the oracle's self-test asks every helper a positive, and the clock at all |
a73x |
2026-09-03 |
| 158acfcc |
test: the OS oracle answers on Darwin, and the harness spells time and paths through it |
a73x |
2026-09-03 |
| 404f2d42 |
test: the attach-ordering guard asserts its own frame |
a73x |
2026-09-03 |
| 6ec04455 |
test: the send test names its cause instead of wedging the runner |
a73x |
2026-09-03 |
| f1e1cc8f |
test: the QUIC absence checks wait long enough to be a claim |
a73x |
2026-09-03 |
| f4449add |
fix: one guard for every dial at a path that may not be a socket |
a73x |
2026-09-03 |
| a617d351 |
test: three daemon fixtures stop assuming Linux timing and sizes |
a73x |
2026-09-03 |
| 8119942d |
test: the QUIC pump waits for the marker it is about to assert on |
a73x |
2026-09-03 |
| 8dc6a014 |
test: the scrollback fixture types only after both resizes have landed |
a73x |
2026-09-03 |
| 4498c812 |
test: the agent dials are accepted between presses |
a73x |
2026-09-03 |
| 319c9d8e |
fix: claim stats the path before it connects to it |
a73x |
2026-09-03 |
| e943dffb |
test: the dead pid comes from a true that both systems have |
a73x |
2026-09-03 |
| dd859ca9 |
test: the dribble is written across pumps, not in one blocking write |
a73x |
2026-09-03 |
| 574464a6 |
docs: leg 1 is the agent probe's own sequence, not leg 2 |
a73x |
2026-09-03 |
| d39f9927 |
test: the handoff stderr check asks whether fd 2 is a pipe |
a73x |
2026-09-03 |
| fc24fa27 |
test: the reparented sleeper does not hold the pipe naming it |
a73x |
2026-09-03 |
| e33768e7 |
test: the pty exit tests drain the master the daemon reads |
a73x |
2026-09-03 |
| 28c13610 |
fix: the Darwin send is non-blocking by the fd, not by the flag |
a73x |
2026-09-03 |
| 256c96a0 |
docs: the Mac gate drives a pristine macOS guest, not the host |
a73x |
2026-09-03 |
| 47cedd93 |
feat: the client's Darwin arm, and mux links on a Mac |
a73x |
2026-09-03 |
| 64c0073b |
feat: the daemon's Darwin arm |
a73x |
2026-09-03 |
| f2163b2a |
fix: one owner for the no-runtime-directory sentence, and a 0700 the umask cannot mask |
a73x |
2026-09-03 |
| 2a032b17 |
feat: the Darwin runtime dir is XDG_RUNTIME_DIR, else /tmp/mux-UID checked like tmux does |
a73x |
2026-09-03 |
| 3362909e |
build: the shell gate reaches deps/, and a release names its own target |
a73x |
2026-09-03 |
| c8ff232e |
build: a Mac builds natively through a shadow SDK, and the dep script follows the host |
a73x |
2026-09-03 |
| ac7f24d4 |
docs: step 3 plan for the Darwin arm, and the hardware findings amendment to the spec |
a73x |
2026-09-03 |
| 0c516740 |
Merge branch macos-port-step2: the platform layer (macOS port, step 2) |
a73x |
2026-09-03 |
| 36800478 |
fix: the client's agent probe sends through client_os, and the review's comment repairs |
a73x |
2026-09-03 |
| dd868aeb |
docs: record the platform layer and the macOS measurements |
a73x |
2026-09-03 |
| e5b27feb |
build: the QUIC prefix and the linker follow the target, not the host |
a73x |
2026-09-03 |
| d4e465a0 |
test: the upgrade, hosts, web, push and soak pins read the OS through the oracle |
a73x |
2026-09-03 |
| 5b5bf1d0 |
test: the e2e pins ask the OS through named oracle helpers |
a73x |
2026-09-03 |
| c9980623 |
build: folder rule 7 keeps every OS-specific spelling under src/os |
a73x |
2026-09-03 |
| a514d02b |
refactor: the shared root asks the OS in portable words, and sockpath owns the runtime dir |
a73x |
2026-09-03 |
| 808d5586 |
refactor: every remaining std.os.linux spelling goes through an os row or std.c |
a73x |
2026-09-03 |
| 602384a1 |
refactor: a stale daemon image is an inode that moved, not a kernel suffix |
a73x |
2026-09-03 |
| 94838e6a |
refactor: the upgrade manifest rides server_os.anonFd |
a73x |
2026-09-03 |