History: build.zig
Ref:
| Hash | Message | Author | Date |
|---|---|---|---|
| 9940d8fd | test: consolidate native end-to-end journey | a73x | 2026-09-07 |
| 5b6c89ea | refactor: share surface input encoding | a73x | 2026-09-07 |
| ea49739c | merge: integrate gui text selection sprint | a73x | 2026-09-06 |
| 0716f07b | feat: keep native selections anchored as output scrolls | a73x | 2026-09-06 |
| 03138bb4 | feat: forward native application mouse and clipboard writes | a73x | 2026-09-06 |
| eedff557 | feat: scroll native panes through history and applications | 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 |
| c5be8085 | build: add pinned linting and reliable development checks | a73x | 2026-09-06 |
| d0151836 | feat: load Ghostty theme files for native appearance | a73x | 2026-09-06 |
| e9c4a928 | feat: configure native fonts and preserve them across display scales | 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 |
| 4d48bfad | feat: mux d stop, dump and stats take --quic for a daemon whose socket is gone | a73x | 2026-09-05 |
| 74730ed7 | refactor: isolate native core and component development gates | 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 |
| 3eab2a35 | feat: resize native pane dividers with mouse and keyboard | a73x | 2026-09-05 |
| 67a1e976 | feat: add native host and session pickers | a73x | 2026-09-05 |
| c5e30b30 | feat: add independent native terminal panes | a73x | 2026-09-05 |
| b7dbcdaf | build: add opt-in native client and OpenGL probe | 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 |
| 12cb9419 | build: the engine is its own module, and no client row links ghostty-vt | a73x | 2026-09-04 |
| e542a342 | docs: the Darwin arm, its measurements and the Mac e2e verdict | a73x | 2026-09-04 |
| f4449add | fix: one guard for every dial at a path that may not be a socket | a73x | 2026-09-03 |
| 64c0073b | feat: the daemon's Darwin arm | a73x | 2026-09-03 |
| 3362909e | build: the shell gate reaches deps/, and a release names its own target | 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 |
| e5b27feb | build: the QUIC prefix and the linker follow the target, not the host | 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 |
| 94838e6a | refactor: the upgrade manifest rides server_os.anonFd | a73x | 2026-09-03 |
| 8657666e | refactor: peer credentials and the parent walk go through the os rows | a73x | 2026-09-03 |
| 4d363861 | refactor: the daemon fork is server_os.forkDetached, and rule 6 names it | a73x | 2026-09-03 |
| a7a02f36 | refactor: the pty forks, seals and resizes through server_os | a73x | 2026-09-03 |
| be757517 | refactor: a platform layer under src/os with one row per side | a73x | 2026-09-03 |
| 0bd41f5a | feat: the hub serves the layout's panes and writes a birth back into it | a73x | 2026-09-03 |
| 81d2ce6b | build: version 0.0.1-17, so an upgrade can call itself newer | a73x | 2026-09-01 |
| 0fffc3cf | test: the harness gains pumpUntil and Link-backed awaits | a73x | 2026-08-31 |
| 6f45c707 | fix: askpass binds through serve; retire keeps its no-close shape | a73x | 2026-08-31 |
| 3b47d5d5 | refactor: the daemon socket binds through serve | a73x | 2026-08-31 |
| b4020e15 | feat: serve gives bind and the guarded unlink one owner | a73x | 2026-08-31 |
| 6cbd6c4c | refactor: muxa rides the Link, and the second transport retires | a73x | 2026-08-31 |
| 8fe125a8 | refactor: Transport wraps the Link, policy stays and mechanics move | a73x | 2026-08-31 |
| 273232d6 | refactor: dial.ask asks the Link; askOn's loop becomes awaitFrame | a73x | 2026-08-31 |
| 40b14979 | feat: link is the fd|pipe|quic union and the one await loop, as a row | a73x | 2026-08-31 |
| 54fd740a | dial.ask and a decoder for upgrade_reply | a73x | 2026-08-31 |
| 90c7c32f | The daemon's tests connect like a client: the dial sweep | a73x | 2026-08-31 |
| 8860165d | Add dial: the client side of a daemon's socket | a73x | 2026-08-31 |
| 86beb855 | Remove the layer and folder-edge enforcement; keep the source bans | a73x | 2026-08-31 |
| 8f9fef4e | Remove the prose ratchets from the comment gate | a73x | 2026-08-31 |
| 66f43541 | feat: five comment lines are an essay, and the count only falls | a73x | 2026-08-30 |
| 16ba9284 | docs: the test order's comment claims only what the array does | a73x | 2026-08-30 |
| 3827724d | refactor: layers count components, and the test order bands by touch | a73x | 2026-08-30 |
| 9a21f071 | refactor: one term component — wire contract, engine, delta and replay core behind a single seam | a73x | 2026-08-30 |
| 2aa60529 | docs: the exe comment counts muxa as the row it is, and two whys move to the mux row | a73x | 2026-08-30 |
| e3f2d1ec | refactor: the one binary's mains are child files of the dispatcher | a73x | 2026-08-30 |
| 4fa1d021 | refactor: the client link owns its core, hosts file, handoff, layout, keymap and askpass as child files behind pub seams | a73x | 2026-08-30 |
| f8e1938d | refactor: the QUIC arm's suite is chained with the socket tests, not the cheap ones | a73x | 2026-08-30 |
| daa3bf69 | refactor: the daemon owns its command surface, shell integration, upgrade and QUIC arm as child files | a73x | 2026-08-30 |
| 70cad621 | refactor: the wall owns its interaction loop, painter, selector and overlay as child files | a73x | 2026-08-30 |
| d1c39002 | feat: the wall answers ssh's prompts in a popup | a73x | 2026-08-30 |
| a514d95d | feat: a wall dial's ssh sends its prompts to mux, not to /dev/tty | a73x | 2026-08-30 |
| 1e157a6f | feat: mux askpass is a mode named by the variable ssh hands it | a73x | 2026-08-30 |
| a5fb22e2 | feat: ssh's prompt is a line on a socket, and mux askpass carries it | a73x | 2026-08-30 |
| fe5397f2 | refactor: the daemon starts itself, and every other starter asks in words | a73x | 2026-08-30 |
| ad3765ca | release: v0.0.1-16 — one binary, a wall of hosts, and a one-run handoff | a73x | 2026-08-29 |
| ab0c737f | refactor: wall.zig is gone; the hosts file is the only wall | a73x | 2026-08-29 |
| 019b1c19 | feat: the browser hub reads the hosts file and polls like the CLI wall | a73x | 2026-08-29 |
| 6e57f5f4 | refactor: the host grammar and the one atomic writer live in hosts.zig | a73x | 2026-08-29 |
| dc1f19a2 | fix: D1 review — the comments the fold made false, and two dead imports | a73x | 2026-08-29 |
| fed80c17 | refactor: the hub resolves a tile through the one resolver | a73x | 2026-08-29 |
| 1b4ed4a8 | refactor: one owner turns a spelling into a Target | a73x | 2026-08-29 |
| c651e9a0 | refactor: one QUIC client, dialled by the product and by the tests | a73x | 2026-08-29 |
| 01b6afb8 | refactor: one owner for "where under XDG does this mux file live" | a73x | 2026-08-29 |
| f5298ecc | refactor: one owner for "make a hangup EPIPE, not a signal" | a73x | 2026-08-29 |
| 33b17560 | fix: folder rules 4 and 5 had holes where a module could ask for a terminal | a73x | 2026-08-29 |
| 89de963b | fix: the spawn is an exec, not a fork — four comments still said fork | a73x | 2026-08-29 |
| 93710915 | build: the product is shell-free by rule, not by folder | a73x | 2026-08-29 |
| 5fa0d19a | build: no production line in client or tui spells /bin/sh | a73x | 2026-08-29 |
| 6c5f6a37 | feat: one binary — `mux d` / `mux a` / `mux web`, and the client with no letter | a73x | 2026-08-28 |
| ce7fb793 | build: every wall_test_* sibling is reached, or the build says which is not | a73x | 2026-08-28 |
| 2197eacd | refactor: client names no tui module — the detach byte is keymap's | a73x | 2026-08-28 |
| d22a2aa1 | build: folder rule 4 reads production lines, not test bodies | a73x | 2026-08-28 |
| 461655ce | build: the folder rule — tui imports client, never the reverse | a73x | 2026-08-28 |
| 907b6627 | refactor: modules live in the folder of what owns them | a73x | 2026-08-28 |
| 6c535804 | feat: a host's live sessions are its tiles — per-host poll, diff, stripe | a73x | 2026-08-28 |
| ccd8f101 | feat: hosts.zig — the wall file lists daemons, never sessions | a73x | 2026-08-28 |
| 91097513 | release: v0.0.1-15 — one flag parser for the four binaries | a73x | 2026-08-27 |
| ed7c14fd | refactor: muxweb parses its flags with cliflags | a73x | 2026-08-27 |
| 2c7f1c38 | refactor: muxa parses its flags with cliflags | a73x | 2026-08-27 |
| 9f3ec679 | feat: cliflags grows a positional hook, short aliases, and --version | a73x | 2026-08-27 |
| cafa56ed | refactor: the four entrypoints move to src/cli/ | a73x | 2026-08-27 |
| 0ba8f95d | feat: muxd's flags are read off the Opts struct | a73x | 2026-08-27 |
| 7c83f8de | build: a server_test_ file nobody imports fails the build | a73x | 2026-08-26 |
| 3ee30f84 | release: v0.0.1-14 — the daemon upgrades in place | a73x | 2026-08-26 |
| db1ce9eb | feat: a daemon that starts from another daemon's memory | a73x | 2026-08-26 |
| 35b76657 | feat: the daemon can write down what only it knows | a73x | 2026-08-26 |
| f973892a | feat: upgrade_req/upgrade_reply on the wire | a73x | 2026-08-26 |
| 66faa2ff | feat: the upgrade manifest — sections a stranger can skip | a73x | 2026-08-26 |
| 3bc953e2 | feat: the upgrade version rule — strictly newer or refused | a73x | 2026-08-26 |
| 1cd82bd4 | release: v0.0.1-13 — the wall splits into panes and remembers them | a73x | 2026-08-25 |
| e8a4d85c | feat: the wall's rects come from a tree that still cuts stripes | a73x | 2026-08-24 |
| b5c91a0e | feat: layout.zig grows the wall's container tree | a73x | 2026-08-24 |
| 76c34f89 | feat: the doc gate holds every file to a byte budget | a73x | 2026-08-23 |
| df9df600 | release: v0.0.1-12 — a drag copies | a73x | 2026-08-22 |
| d49ecd82 | feat: a drag across a stripe highlights the lines it crossed | a73x | 2026-08-22 |
| f04db7c5 | feat: a drag over a zoomed tile paints what it crossed | a73x | 2026-08-22 |
| cc6b38d8 | feat: a drag is a state machine, and it knows nothing about terminals | a73x | 2026-08-22 |
| b214af9e | release: v0.0.1-12-pre2 | a73x | 2026-08-21 |
| 85152686 | fix: the review round's two should-fixes and four nits | a73x | 2026-08-21 |
| ddbd08e2 | feat: -A with no agent is refused, not kept silently | a73x | 2026-08-21 |
| 0df4068a | test: the tile's -A is what consents, and it is watched now | a73x | 2026-08-21 |
| 8c1af748 | release: v0.0.1-11 — mux is the wall | a73x | 2026-08-20 |
| ae70f4ec | check: comment claims are verified, not trusted | a73x | 2026-08-20 |
| 794d1fa1 | refactor: dead import, dead JSON writer, one socket-path owner | a73x | 2026-08-20 |
| c7c055bf | feat: a wall tile is an interact.Core, so the wheel works zoomed | a73x | 2026-08-20 |
| 43667a46 | refactor: one exhaustive frame switch, in the Core | a73x | 2026-08-20 |
| 9c9ccd0f | refactor: one session's interaction is one interact.Core | a73x | 2026-08-20 |
| abe12351 | refactor: interact.zig owns what happens at an open session | a73x | 2026-08-20 |
| 479b7d97 | feat: an attach that claims the grid records its tile | a73x | 2026-08-20 |
| b585c470 | feat: the wall zooms in place — promote the tile, do not spawn a client | a73x | 2026-08-19 |
| ef27667a | feat: mux wall — CLI multiattach, the web hub's wall in a terminal (POC) | a73x | 2026-08-19 |
| b1abaa34 | release: v0.0.1-10 — ssh password prompts survive a first attach | a73x | 2026-08-19 |
| bc2efee0 | release: v0.0.1-9 — DA1 answered, PATH fallback corrected | a73x | 2026-08-18 |
| a1215774 | test: verify harness catches up with the wall header; runtime reads hashed | a73x | 2026-08-18 |
| 06adceda | release: v0.0.1-8 — dynamic wall, make install, remote ~/.local/bin muxd | a73x | 2026-08-18 |
| 7e060cc7 | release: v0.0.1-7 | a73x | 2026-08-18 |
| 83c02b92 | feat: muxweb runtime wall — POST/DELETE/PUT /tiles, argv seeds or file restores | a73x | 2026-08-18 |
| 531b8767 | feat: webhub Hub — runtime wall, stable tile ids, checkout/release | a73x | 2026-08-18 |
| 75465356 | feat: wall.zig — spelling grammar, wall model, atomic persistence | a73x | 2026-08-18 |
| bdb6f588 | refactor: drive cli side channels from client core | a73x | 2026-08-18 |
| c38ea811 | test: exercise client core wasm canary | a73x | 2026-08-16 |
| 1b10f264 | test: guard client core wasm compilation | a73x | 2026-08-16 |
| f056acea | refactor: add shared client terminal semantics | a73x | 2026-08-16 |
| 27c5bb05 | release: v0.0.1-6 — sessions, agent surface, side channels | a73x | 2026-08-16 |
| ab09f763 | test(e2e): two sessions on one daemon, on the wall and over QUIC | a73x | 2026-08-15 |
| f5ffc31d | feat(web): TARGET#NAME names a tile's session; the browser appends it at attach | a73x | 2026-08-15 |
| 316ac48e | feat(mux): --session NAME on every transport spelling | a73x | 2026-08-15 |
| 8bf9f055 | feat: the instruments learn session names, and the wire module owns the payload | a73x | 2026-08-15 |
| 9e7707c0 | build: every grant spelled, test twins enforce the column, shell gate | a73x | 2026-08-14 |
| 0769c1bb | build: fmt gate also checks build.zig.zon | a73x | 2026-08-14 |
| e4041d68 | build: comptime row lookup for every hand-written module name | a73x | 2026-08-14 |
| b2a07df2 | build: the import graph as a declared, layer-checked table | a73x | 2026-08-14 |
| 866f0929 | build: zig build fmt gate + check umbrella (fmt + unit tests) | a73x | 2026-08-14 |
| 4e6962dd | Merge branch 'feat/agent-surface' | a73x | 2026-08-14 |
| 23eb7062 | refactor: simplify-pass — one owner for fallback state, spawn prep, precmd, frame delimiting | a73x | 2026-08-13 |
| af32c00c | docs+build: record the diff-since deferral; the agent e2e becomes a gate | a73x | 2026-08-13 |
| 55484465 | refactor(quic): one owner for the dial-address grammar | a73x | 2026-08-13 |
| 593f8fa3 | feat(muxa): QUIC transport — same verbs, remote daemons, one reconnect re-issue | a73x | 2026-08-13 |
| 224be598 | feat(muxa): run and await — exit codes over marks, spans from scrollback, session death is an answer | a73x | 2026-08-13 |
| 074ffa6e | feat(muxa): agent client skeleton — status, capture, send over the unix socket | a73x | 2026-08-13 |
| 5cada44f | feat(shellint): OSC 133 marks injected at spawn — ZDOTDIR shim, --init-file, vendor_conf.d | a73x | 2026-08-13 |
| 4c363aa6 | feat(cmd): pure command state machine over OSC 133 mark events | a73x | 2026-08-13 |
| aef51048 | release: v0.0.1-5 — M17 web client, the simplify round, collect.sh | a73x | 2026-08-13 |
| 123bf352 | fix(test): the wall tile's stand-in stays 1x1 across a resync | a73x | 2026-08-13 |
| 80dab7a2 | refactor: one owner each for the sun_path bound and the key-picking rule | a73x | 2026-08-13 |
| 9273c18c | fix(hub): never call readSmallMessage speculatively; dead-leg ping; one owner per recipe | a73x | 2026-08-13 |
| a3fd1a94 | test: e2e — hub scenarios: passivity pin, origin gate, tear/re-attach | a73x | 2026-08-13 |
| 633b38dd | test: wsclient — scripted WebSocket replica client for hub scenarios | a73x | 2026-08-13 |
| b7241c32 | feat: muxweb — the hub binary; tiles are argv, transports are mux's own | a73x | 2026-08-13 |
| 1aba332b | feat: webhub tile pump — envelope, frame messages, backoff shared with the CLI | a73x | 2026-08-13 |
| a52200c3 | feat: webhub — origin gate, route table, ws endpoint naming | a73x | 2026-08-13 |
| 2e414911 | feat: wasm core — replica+keymap on wasm32-freestanding, flat damage-hinted viewport ABI | a73x | 2026-08-13 |
| 236e3205 | feat: keymap.zig — normalized key events to VT bytes, tables pinned | a73x | 2026-08-13 |
| bdc6eeb5 | refactor: replica.zig owns replay — extracted from session(), finally unit-tested | a73x | 2026-08-13 |
| eca05dea | release: v0.0.1-4 | a73x | 2026-08-12 |
| 29d88ab2 | refactor: sockpath follow-through — the seam gets its pin, the optional goes, the vestigial ordering is named | a73x | 2026-08-12 |
| f9f8a3f2 | refactor: DeltaTracker and socket-path identity extract with their tests | a73x | 2026-08-12 |
| 56ca01d6 | refactor: quic.zig follow-through — client callbacks dedup, typed pathFrom, honest topology prose | a73x | 2026-08-12 |
| b34e7a1a | refactor: src/quic.zig owns the shared QUIC vocabulary; quic_server is just the listener | a73x | 2026-08-12 |
| 08fe4c4d | refactor: extract src/paint.zig; the sync-update bracket exists once | a73x | 2026-08-12 |
| a5ed558d | refactor: quality fixes for the small-items batch — constraint-stating docs, sendPtyModeTo restored | a73x | 2026-08-12 |
| df389073 | refactor: small-items batch — detach_key, one SIGPIPE owner, dead Pty.read, ensurePtyModeSent, deps caching, writeFrame golden pin | a73x | 2026-08-12 |
| 013c8b6b | fix: handoff — writer refuses port 0, one cache error vocabulary, composed readAnnounce | a73x | 2026-08-11 |
| b6e51fdd | feat: handoff vocabulary — announce line, per-host cache, dial-host strip | a73x | 2026-08-11 |
| 0a285e41 | feat: lazy QUIC bind — endpoint_req stands up an ephemeral-port listener on demand | a73x | 2026-08-11 |
| 0a3c567f | feat: attach auto-start — muxd proxy and local mux ensure a daemon | a73x | 2026-08-10 |
| b03d9834 | feat: ptyclient script engine — escapes, consume-cursor expect, verb parse | a73x | 2026-08-10 |
| 3ef748c2 | test: make soak repeats the suite and attributes failures to runs | a73x | 2026-08-09 |
| 37ec2628 | test: render helper replays a client capture into a dump-format grid | a73x | 2026-08-09 |
| dc42cc6f | feat: spawn.ensureDaemon — probe, detach, poll; the start/auto-start core | a73x | 2026-08-09 |
| 564591de | feat: muxd keygen — one command replaces the /dev/urandom incantation | a73x | 2026-08-09 |
| f8bcbbcb | feat: xdg module — default key/log paths and key creation | a73x | 2026-08-09 |
| 78b8d479 | feat: --version on both binaries, one source in build.zig | a73x | 2026-08-09 |
| af1908af | test: e2e — prediction confirmed, suppressed, demoted, and flushed, by counter | a73x | 2026-08-08 |
| b96a01d5 | test: rawmode and delaypipe — deterministic mode transitions and root-free RTT | a73x | 2026-08-08 |
| cb63edb8 | feat: predicted echo — the keystroke paints before the RTT | a73x | 2026-08-08 |
| da104e26 | feat: prediction overlay — speculation as a layer, never as state | a73x | 2026-08-08 |
| a88c3250 | feat: mux quic://host — the transport swap, third pass | a73x | 2026-08-08 |
| d2cc2334 | test: byte fidelity, non-vacuity, and the third sun_path victim | a73x | 2026-08-08 |
| ae0b1138 | feat: muxd speaks QUIC — one UDP fd, PSK, and the protocol never noticed | a73x | 2026-08-08 |
| 76b3bce5 | feat: QUIC key handling — refused before anything listens | a73x | 2026-08-08 |
| 09d21a4f | build: QUIC deps vendored and pinned — the spike's script grows up | a73x | 2026-08-08 |
| 1e3ab018 | feat: mux HOST attaches over ssh — the VM hop is one word | a73x | 2026-08-08 |
| a518671e | feat: mux --via arbitrary-command transport; muxd proxy byte pump | a73x | 2026-08-08 |
| d890ac97 | feat: bytes-on-wire bench gates the M4 kill criterion; docs | a73x | 2026-08-08 |
| 7984d06e | feat: mux client with replica grid, renderer, resize, Ctrl-\ detach | a73x | 2026-08-08 |
| e68e5b9a | feat: daemon server core with snapshot broadcast; replica fidelity test passes | a73x | 2026-08-08 |