History: test/e2e.sh
Ref:
| Hash | Message | Author | Date |
|---|---|---|---|
| 4d48bfad | feat: mux d stop, dump and stats take --quic for a daemon whose socket is gone | a73x | 2026-09-05 |
| 67a1e976 | feat: add native host and session pickers | a73x | 2026-09-05 |
| b2cc0a99 | test: the e2e pin counts the Ctrl-\ X scenario | a73x | 2026-09-04 |
| 5b5bf1d0 | test: the e2e pins ask the OS through named oracle helpers | a73x | 2026-09-03 |
| e6fff02f | fix: a tile's application reads mouse reports in its own coordinates | a73x | 2026-09-03 |
| 372d8ada | test: the e2e pin counts the refused-layout leg | a73x | 2026-09-03 |
| 13e66d44 | test: the e2e suite pins the wall as the layout | a73x | 2026-09-03 |
| 29cbd304 | fix: a QUIC client sends CONNECTION_CLOSE on teardown, so a poll frees its slot at once | a73x | 2026-09-03 |
| 0aed35be | fix: a successor reaps the pid-named leftovers a dead daemon or wall stranded | a73x | 2026-09-02 |
| 1507f375 | fix: the keyboard re-arms the wall's mouse capture; a parked pump cannot | a73x | 2026-09-02 |
| a500b0cd | feat: sessions_reply carries the daemon's version and a stale-image bit | a73x | 2026-09-02 |
| 5c9897e0 | feat: mux d upgrade HOST pushes this image over ssh and upgrades there | a73x | 2026-09-01 |
| 479b5c2e | test: e2e - a rebooted daemon's panes wear gone and the cut never moves | a73x | 2026-09-01 |
| 90af5cbb | test: ssh's prompts, both exclusions, and the socket's hygiene | a73x | 2026-08-30 |
| 6433ab32 | test: a down host says why on the row, and nothing on the wall | a73x | 2026-08-30 |
| 502e12d7 | refactor: the daemon's foreground is `start`, and `-d` is what forks it | a73x | 2026-08-30 |
| 8443391f | fix: a warm miss on unchanged coordinates costs one deadline, not two | a73x | 2026-08-29 |
| 44755603 | feat: `mux d endpoint --start` ensures a daemon before it announces | a73x | 2026-08-29 |
| ed887277 | test: the scenario pin is 89 — web-restore went with its subject | a73x | 2026-08-29 |
| 89de963b | fix: the spawn is an exec, not a fork — four comments still said fork | a73x | 2026-08-29 |
| 5d9b51fe | refactor: the handoff recipe is an argv — ssh is exec'd, not a shell line | a73x | 2026-08-29 |
| 66e13fe3 | test: one binary through the suites, and the daemon's exe asked of the kernel | a73x | 2026-08-28 |
| d5e04be1 | test: a refused birth paints [refused] and the wall stays up | a73x | 2026-08-28 |
| 9ec2df21 | test: x on a wall ends the focused tile's session and no other | a73x | 2026-08-28 |
| 69a8393b | test: a wall polling two boxes starts no daemon; Enter and a cold mux HOST each start one | a73x | 2026-08-28 |
| ce611141 | feat: a new tile takes the lowest free digit | a73x | 2026-08-28 |
| 422efd20 | test: the picker on a real pty, and the wall that outlives its last tile | a73x | 2026-08-28 |
| 06db9c9e | test: the rigs stop the daemons they used to watch die | a73x | 2026-08-28 |
| e3f3c7bf | fix: the empty wall the keyboard sees is the one the screen paints | a73x | 2026-08-28 |
| a0524f88 | test: e2e — the first mux on a machine writes the wall it just started | a73x | 2026-08-28 |
| 0c07bcf8 | test: e2e — a wall is a daemon, not a list of sessions; pin 81 | a73x | 2026-08-28 |
| 88bcfd7a | test: e2e — the wall of hosts (two daemons, x two-step, restart re-creates nothing) | a73x | 2026-08-28 |
| 224e0465 | test: e2e — one peer holding half a frame does not stop muxd stats | a73x | 2026-08-27 |
| cafa56ed | refactor: the four entrypoints move to src/cli/ | a73x | 2026-08-27 |
| a824b1a2 | test: 14_upgrade moves to a file of its own | a73x | 2026-08-26 |
| ff52fa6d | test: 13_birth moves to a file of its own | a73x | 2026-08-26 |
| 0761be0b | test: 12_panes moves to a file of its own | a73x | 2026-08-26 |
| 8a3c3ba9 | test: 11_select moves to a file of its own | a73x | 2026-08-26 |
| fbfd75df | test: 10_agent moves to a file of its own | a73x | 2026-08-26 |
| ec5c8b51 | test: 09_wallhist moves to a file of its own | a73x | 2026-08-26 |
| 5b97e538 | test: 08_mouse moves to a file of its own | a73x | 2026-08-26 |
| fc698819 | test: 07_wallcli moves to a file of its own | a73x | 2026-08-26 |
| ea9d9ce9 | test: 06_web moves to a file of its own | a73x | 2026-08-26 |
| 13e13cc1 | test: 05_session moves to a file of its own | a73x | 2026-08-26 |
| d92023ef | test: 04_handoff moves to a file of its own | a73x | 2026-08-26 |
| d367443a | test: 03_side moves to a file of its own | a73x | 2026-08-26 |
| 078e9712 | test: 02_predict moves to a file of its own | a73x | 2026-08-26 |
| 9bd46b17 | test: 01_boot moves to a file of its own | a73x | 2026-08-26 |
| 01b5ae24 | refactor: the helpers, the registry and the trap become e2e_lib.sh | a73x | 2026-08-26 |
| 76778c7a | refactor: a daemon's declaration stands with the leg that starts it | a73x | 2026-08-26 |
| 37d38ee4 | refactor: the trap reads a register, not four hand-kept lists | a73x | 2026-08-26 |
| 2f007823 | test: the coverage run finishes the suite — three more pids that were the tracer's | a73x | 2026-08-26 |
| 866031d9 | test: the coverage run survives two verbs the tracer wrapped wrong | a73x | 2026-08-26 |
| 2c823d71 | fix: muxd stop returns when the process is gone, not when the socket is | a73x | 2026-08-26 |
| a6ad1dca | test: the upgrade keeps the shell, its pid, its title, its marks, its agent | a73x | 2026-08-26 |
| fa7a3295 | docs: an e2e comment that names a size no leg runs at is deleted | a73x | 2026-08-26 |
| f8f7392a | test: one birth is counted, not inferred from the session table | a73x | 2026-08-26 |
| 1a21cb38 | fix: a refusal the birth cannot fix backs off instead of spinning | a73x | 2026-08-26 |
| c1dac3ce | fix: a verb that never attached does not blame the client table | a73x | 2026-08-26 |
| e26e5494 | test: the browser wall brings a saved local line back | a73x | 2026-08-26 |
| 01255d37 | test: the e2e suite pins the refusal's words for run, status and send | a73x | 2026-08-26 |
| c36f3a11 | test: a rendered wall says which chord reaches which tile | a73x | 2026-08-25 |
| 5a2ed83f | test: the restored wall creates its local lines and refuses its remote one | a73x | 2026-08-25 |
| c48a660c | feat: Ctrl-\ : adds a tile by spelling from inside the wall | a73x | 2026-08-25 |
| 520a8baa | feat: the daemon holds thirty-two sessions, wall-sized again | a73x | 2026-08-25 |
| 4df85e37 | test: the rm sweep stops listing files no leg writes | a73x | 2026-08-25 |
| 113a7e2c | test: the restore leg asserts the focus came back | a73x | 2026-08-25 |
| a14ea705 | fix: a click finds its pane by column, not just row | a73x | 2026-08-25 |
| 9dca0bb1 | test: the layout survives the round trip, heals, and degrades | a73x | 2026-08-25 |
| 789fd74e | test: the wall's column era gets its legs | a73x | 2026-08-24 |
| d6bede8d | feat: Ctrl-\ r trades cells between panes | a73x | 2026-08-24 |
| 7faf0467 | feat: fullscreen is a relayout where the focus takes the terminal | a73x | 2026-08-24 |
| 6a936579 | feat: columns on — aspect hydration, rails, focus_dir, split chords | a73x | 2026-08-24 |
| 11682d56 | feat: painters address a column offset and erase only their span | a73x | 2026-08-24 |
| 55be7cab | test: the wall claims its rows, and a neighbour survives a scroll | a73x | 2026-08-24 |
| f2b711e7 | fix: the cursor rests in the focused tile, whoever painted last | a73x | 2026-08-24 |
| cf341e7c | test: the CLI wall leg stops betting on a pump race | a73x | 2026-08-24 |
| 056e4f6a | fix: a tile with nothing left to say leaves the wall | a73x | 2026-08-24 |
| 55fba86d | test: the e2e wall legs learn the focus model | a73x | 2026-08-24 |
| 31771807 | feat: every tile claims its rect; focus replaces zoom | a73x | 2026-08-24 |
| aac3c2da | feat: prediction hides itself on a path too fast to see it | a73x | 2026-08-23 |
| f6013e14 | fix: the default socket path refuses to be guessed | a73x | 2026-08-23 |
| 7c8dbc8a | fix: a resize is reported in-band to an app that turned on mode 2048 | a73x | 2026-08-22 |
| 2ae7c94b | fix: a client that never answers its first agent request is hung up on | a73x | 2026-08-22 |
| a45ee4ed | fix: a click at the wall is bounded by the grid, as a zoomed one is | a73x | 2026-08-22 |
| 1a8338f1 | fix: a highlight edge inside a wide cell no longer shifts the row | a73x | 2026-08-22 |
| e439be23 | feat: a drag copies the text it crossed | a73x | 2026-08-22 |
| c2a60319 | feat: a click at the wall selects the stripe under it | a73x | 2026-08-22 |
| bd8f4571 | fix: the unzoomed wall filters mouse reports instead of typing them | a73x | 2026-08-22 |
| a0915d2d | test: the non-tty scenarios wait for their output instead of sleeping for it | a73x | 2026-08-22 |
| 2862f603 | test: a green run that leaves residue now says so instead of passing | a73x | 2026-08-22 |
| 6c079f9d | test: hardkill must kill the child, not wait on a wrapper that cannot exit | a73x | 2026-08-22 |
| 96febc7b | test: line coverage for the e2e suite, via kcov | a73x | 2026-08-21 |
| 38deccfb | fix: the -A preflight asks the agent, it does not just dial it | 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 |
| 1be12949 | test: the refusal leg proves the daemon it means | a73x | 2026-08-21 |
| 0b356394 | test: the signing agent follows whoever typed last | a73x | 2026-08-21 |
| d225b05c | test: a real key crosses the wire; a keyless session refuses fast | a73x | 2026-08-21 |
| a2b258c9 | fix: keep the shellcheck rationale off the directive line | a73x | 2026-08-21 |
| d057e034 | refactor: an unzoomed browser tile claims no size, like every other watcher | a73x | 2026-08-20 |
| f1d908b5 | test: the hidden-tile leg pins silence, not a repaint schedule | a73x | 2026-08-20 |
| d88f3df5 | docs: README and CLAUDE.md catch up — the wall is the product now | a73x | 2026-08-20 |
| cb1e4946 | test: the mutation notes name what the mutants actually did | a73x | 2026-08-20 |
| 9e225de2 | test: the convergence, and the legs it deliberately changed | a73x | 2026-08-20 |
| 461245b2 | test: a tile the zoom is not on paints nothing at all | a73x | 2026-08-20 |
| 96378b1a | test: the wheel works in a zoomed tile, and the demote gives it back | a73x | 2026-08-20 |
| c7c055bf | feat: a wall tile is an interact.Core, so the wheel works zoomed | a73x | 2026-08-20 |
| ee301abd | feat: muxweb argv adds tiles to the wall, never overwrites it | a73x | 2026-08-20 |
| a89535be | feat: x forgets a tile, and never kills its session | a73x | 2026-08-20 |
| f88b6984 | test: the zoom claims the grid without attaching, and skips for free | a73x | 2026-08-19 |
| d9a5d6cb | test: e2e drives a real wheel from the pty side, both ways | a73x | 2026-08-19 |
| 8d60e36e | test: e2e zooms the second stripe and types into that session | a73x | 2026-08-19 |
| 69be7cc3 | feat: one wall, one argv dialect — both binaries take both --sock spellings | a73x | 2026-08-19 |
| 56781f44 | test: e2e reads the planted env out of a shell and pins that no client was made | a73x | 2026-08-19 |
| d6523df1 | test: e2e walls two sessions from inside one, and comes back | a73x | 2026-08-19 |
| 9b404327 | test: e2e walks the ring three sessions wide, both ways | a73x | 2026-08-19 |
| c3830637 | test: e2e gates the switch by what moved and what did not | a73x | 2026-08-19 |
| fb51449b | test: the harness detaches with the chord, and a scenario pins the layer | a73x | 2026-08-19 |
| 483606dd | test: e2e gates the CLI wall — two sessions and a live delta, one pty | a73x | 2026-08-19 |
| 2de1f8e3 | fix: remote ~/.local/bin is a PATH fallback, not a shadow | a73x | 2026-08-18 |
| 7c4367e8 | test: e2e — dynamic wall add/remove/reorder/restore; docs | a73x | 2026-08-18 |
| 6f9f4886 | test: pin cli side-channel atomicity | a73x | 2026-08-18 |
| 20d59fae | docs(e2e): say what the bell leg's cleanup and its zero-OSC check actually do | a73x | 2026-08-15 |
| 5d5b6fa5 | perf: one bell per drain, and the count pinned on a real terminal | a73x | 2026-08-15 |
| 24ccce50 | test(e2e): the gate fix, pinned by a test that fails without it | a73x | 2026-08-15 |
| f9c185db | test(e2e): pin the title stack's count, and sweep the leg's residue | a73x | 2026-08-15 |
| 89ebdc4d | docs(e2e): give the paste leg's waits the reasons they actually run on | a73x | 2026-08-15 |
| 2de33178 | feat: carry the session's window title to the host terminal | a73x | 2026-08-15 |
| 84a7a44f | test(e2e): say why the paste leg waits the way it does | a73x | 2026-08-15 |
| 057cbff8 | test: ptyclient pastes like a terminal, and nvim proves it | a73x | 2026-08-15 |
| c3ecb3b9 | test(e2e): the session's OSC 52 reaches the host terminal | a73x | 2026-08-15 |
| ab09f763 | test(e2e): two sessions on one daemon, on the wall and over QUIC | a73x | 2026-08-15 |
| ae9d7790 | test: leak sweep survives failure; ports are observations | a73x | 2026-08-14 |
| bd03a5c7 | fix(test): a wedged daemon fails leakcheck loudly; the sweep pins its own input | a73x | 2026-08-14 |
| ab0ecad2 | feat: DebugAllocator verdicts print a grep-able LEAK marker; e2e/agent assert absence | a73x | 2026-08-14 |
| 625c6b51 | test(e2e): four helpers, and the marker polls grow the assert they lost | a73x | 2026-08-13 |
| a3fd1a94 | test: e2e — hub scenarios: passivity pin, origin gate, tear/re-attach | a73x | 2026-08-13 |
| ca46fe0e | fix: Task 4 follow-through — the third re-timed site, the inverted mechanism comment, narrowed error set | a73x | 2026-08-12 |
| 7bf74d2b | fix: refused QUIC dial fails in ~1 RTT; quic:// attach budget is deadline_ms, not idle_ms | a73x | 2026-08-12 |
| aa247b30 | docs: M14 closed — ssh→QUIC handoff | a73x | 2026-08-12 |
| d9b17d58 | test: e2e — delete the unfalsifiable check; (c) measures the time it claims; honest bounds | a73x | 2026-08-12 |
| d6888aa5 | test: e2e — quality batch: full SOCK17 teardown, trap backstops, fixture hardening, honest comments | a73x | 2026-08-12 |
| 5b03e25b | test: e2e — (a) asserts the second marker ABSENT before ssh dies | a73x | 2026-08-11 |
| bde1af57 | test: e2e — (a) death asserted across the window; (d) ceiling reasoning; (e) evidence note | a73x | 2026-08-11 |
| 04de1f6a | test: e2e pins $SHELL — the suite must not run the developer's login shell | a73x | 2026-08-11 |
| d0550135 | test: e2e — ssh shim + five handoff scenarios; pins 15->20 / 28->33 | a73x | 2026-08-11 |
| ee04b68c | test: legible stop failures — the regrade's predicted catch must print, not abort | a73x | 2026-08-10 |
| 414d282a | test: e2e — auto-start arcs (proxy + pty), muxd stop teardown, pins bumped | a73x | 2026-08-10 |
| 7d56f0e2 | test: sun_path refusals pinned in e2e; already-running pin carries the new clause | a73x | 2026-08-10 |
| 2a47b9f5 | fix: audit refinements — client length check, nothing-listening, actionable stop hint | a73x | 2026-08-10 |
| 68e7a144 | fix: error audit — say what happened, never guess what a lower layer named | a73x | 2026-08-10 |
| d6452d03 | refactor: spawn.ensureForAttach owns the attach shape; auto-start appends, never truncates | a73x | 2026-08-10 |
| 3f277597 | fix: tp1's daemon guard proves serving, not existing | a73x | 2026-08-10 |
| 583b36c0 | test: tp1 — reconnect while scrolled restores the view and prediction | a73x | 2026-08-10 |
| 53845cb4 | docs: two comment counts read unambiguously (review nits, controller-applied) | a73x | 2026-08-10 |
| a9a5a8f3 | fix: tp2b proves arrival then silence — witness and settle each cover the other's blind side | a73x | 2026-08-10 |
| 18c4c7f5 | fix: tp2b syncs on unique markers and silence — sentinel counts have no order under split deltas | a73x | 2026-08-10 |
| da3ffc01 | fix: tp2b syncs on a width witness — a scrolling repaint reorders rows across deltas | a73x | 2026-08-10 |
| a50f92c1 | test: tp2b resizes UP so a stale replica width has somewhere to show | a73x | 2026-08-10 |
| 85da1e61 | test: tp2 — a pty client attaches at 100x30 and resizes to 90x28 | a73x | 2026-08-10 |
| 511d9974 | fix: waitexit drains the last bytes before believing the exit | a73x | 2026-08-10 |
| 00d2f8fb | feat: ptyclient main loop + fixture controls in the suite | a73x | 2026-08-10 |
| b03d9834 | feat: ptyclient script engine — escapes, consume-cursor expect, verb parse | a73x | 2026-08-10 |
| e09da54f | fix: review conditions — soak refuses a dirty baseline; the scroll bug's true severity | a73x | 2026-08-09 |
| 1b993c93 | test: a styled specimen, so the byte-exact leg has something to compare | a73x | 2026-08-09 |
| 2bc64e84 | fix: the burst's fifth keystroke aged onto the expiry bound exactly | a73x | 2026-08-09 |
| 2a5aa4d9 | test: pin scenario and convergence counts to literals | a73x | 2026-08-09 |
| 818302fd | test: convergence on the prediction scenarios; stats reads move to split stderr | a73x | 2026-08-09 |
| 2518c30b | test: convergence on every transport scenario that ends with a live daemon | a73x | 2026-08-09 |
| d351788c | test: e2e asserts render-vs-dump convergence, with a control that fires | a73x | 2026-08-09 |
| 143e2b46 | test: burst scenario tolerates one in-flight confirmation at detach | a73x | 2026-08-09 |
| 715f71b6 | fix: a --via command that dies before connecting says so | a73x | 2026-08-09 |
| f0c3a9d9 | fix: deadline line reads right from any caller, and stays two lines untty'd | a73x | 2026-08-09 |
| 9bd43fcf | fix: muxd start reports a dead child instead of panicking on it | a73x | 2026-08-09 |
| c5656224 | feat: muxd start — the setsid-nohup incantation becomes a subcommand | a73x | 2026-08-09 |
| 144f6af7 | test: e2e pins daemon MUX_KEY_FILE, and --key beating it at the call site | a73x | 2026-08-09 |
| 63b9dff2 | feat: key resolution --key > MUX_KEY_FILE > ~/.config/mux/key, both binaries | a73x | 2026-08-09 |
| 5c02dad4 | test: refuse bound gets an absolute ceiling | a73x | 2026-08-09 |
| 01a27648 | feat: port 4433 is the default on both ends of quic:// | a73x | 2026-08-09 |
| ab4e375d | test: e2e refuse bound derives from the usage block | a73x | 2026-08-09 |
| 564591de | feat: muxd keygen — one command replaces the /dev/urandom incantation | a73x | 2026-08-09 |
| ac834e38 | fix: e2e cleanup trap survives a failure before the first daemon starts | a73x | 2026-08-09 |
| a33238ab | test: e2e pins that both binaries report one version | a73x | 2026-08-09 |
| 78b8d479 | feat: --version on both binaries, one source in build.zig | a73x | 2026-08-09 |
| 1ad4be3e | test: DELAY_MS is pinned, in the unit test and on the wire | a73x | 2026-08-08 |
| af1908af | test: e2e — prediction confirmed, suppressed, demoted, and flushed, by counter | a73x | 2026-08-08 |
| 8a005f3a | feat(m8): QUIC held on a real path — three legs of four; the record | a73x | 2026-08-08 |
| c35a9687 | test: e2e over QUIC — same semantics, same counters, new transport | a73x | 2026-08-08 |
| a88c3250 | feat: mux quic://host — the transport swap, third pass | a73x | 2026-08-08 |
| ae0b1138 | feat: muxd speaks QUIC — one UDP fd, PSK, and the protocol never noticed | a73x | 2026-08-08 |
| 20016508 | test: e2e proves resume-by-delta across a transport tear and resume-by-snapshot across a daemon restart | a73x | 2026-08-08 |
| f6a54d28 | feat: transport death is a non-event — reconnect with have_seq, resume by delta | a73x | 2026-08-08 |
| a518671e | feat: mux --via arbitrary-command transport; muxd proxy byte pump | a73x | 2026-08-08 |
| 909a0377 | feat: two-client e2e and demo; docs: resize decision recorded — M5 complete | a73x | 2026-08-08 |
| 9ea510f6 | test: kill-reattach e2e; docs: M3 decisions and usage | a73x | 2026-08-08 |
| 439d9e14 | test: e2e through the real client/daemon loop | a73x | 2026-08-08 |
| 076d28eb | feat: muxd run/dump wired through poll loop; e2e passes | a73x | 2026-08-08 |