diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0566a87..23559d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,13 +63,13 @@ jobs: zsh -n bin/off-probe zsh -n bin/root-probe zsh -n bin/ctx-probe - zsh -n bin/zoom-probe + zsh -n bin/grid-probe zsh -n bin/agent-probe zsh -n install.sh sh -n bin/office-attn sh -n bin/office-ctx sh -n bin/office-cwd - python3 -m py_compile bin/key-probe bin/mouse-probe + python3 -m py_compile bin/key-probe bin/mouse-probe bin/menu-probe # tmux refuses to parse a config it cannot read, and a broken one would # otherwise only surface as "the keys do nothing" inside a probe. @@ -80,6 +80,10 @@ jobs: tmux -L cfg source-file "$PWD/theme/office-theme.tmux.conf" tmux -L cfg list-keys -T prefix | grep -qE '^bind-key +-T prefix +n ' \ || { echo "prefix n is not bound"; exit 1; } + # the pane toggles are gone: a pane is whatever you pick from n + if tmux -L cfg list-keys -T prefix | grep -qE "^bind-key +-T prefix +[scea] .*office"; then + echo "a pane toggle key is back"; exit 1 + fi # No destructive action may sit behind one hard-coded letter again. # `confirm-before` takes exactly one key for yes -- y -- and on a # QWERTZ keyboard the key the hand reaches for sends z, so the prompt @@ -135,8 +139,9 @@ jobs: - name: root-probe run: bin/root-probe - - name: zoom-probe - run: bin/zoom-probe + # one pane that asks, then the grid: three across, two down, six in all + - name: grid-probe + run: bin/grid-probe - name: attn-probe run: bin/attn-probe @@ -157,3 +162,7 @@ jobs: - name: agent-probe run: bin/agent-probe + + # the menu draws only on a real client, so this one attaches one + - name: menu-probe + run: bin/menu-probe diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 32bbcad..6c7bc32 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ something that turns out to be out of scope. A tmux cockpit for running several coding-agent sessions at once. Around 2,100 -lines of zsh and tmux config, seven probes that drive a real tmux server, and one +lines of zsh and tmux config, nine probes that drive a real tmux server, and one iTerm2 profile. **In scope:** making that faster, clearer or harder to get wrong. Support for @@ -113,13 +113,19 @@ hidden copy mode it opened. And a double-click cannot be read back for a full second: tmux holds it for its own 500ms triple-click window before the binding starts, so a check that looks sooner reports a working gesture as broken. -Touched anything that reads `pane_left`, `pane_top` or a window size? Run -`bin/zoom-probe`. It builds a throwaway office, zooms a pane, and runs every -command that moves one. **A zoomed pane reports full-window coordinates**, so -every "which column is this in" question in `office.zsh` is answered about a -room that is not on screen — and `_office_layout_ok` then calls a perfectly good -office broken and hands it to `_office_relayout`, which breaks every pane out to -the stash. Reading the code does not show you this; the probe does. +Touched the grid — adding, parking, unparking, moving or closing a pane, or +anything that reads `pane_left`, `pane_top` or a window size? Run +`bin/grid-probe`. It builds a throwaway office and drives the same calls the +menu items and key bindings make (`office new --agent N`, `--shell`, `--edit`, +`--back ` — `display-menu` cannot be made to draw headless, so the menu +itself is out of reach), then checks the geometry after every step: at most +three across, at most two rows, the top row filling first and taking the odd +pane (three panes is always "2 1", five is "3 2", never "2 3"), zoom dropped before anything is +measured, and the grid re-fitting itself after a close it did not initiate +through `office.zsh` (the config's `after-kill-pane` hook). Reading the code +does not tell you whether the layout string it built was actually valid; the +probe does — tmux silently refuses one whose checksum does not match, so a bug +here reads as "nothing happened" rather than an error. Touched `bin/office-attn`, `@office_attn_gate` or a `pane-border-format`? Run `bin/attn-probe`. It builds a throwaway office and puts fake agents in the desks @@ -152,11 +158,18 @@ does not. Touched `OFFICE_AGENTS`, `_office_new` or the `Ctrl-Space n` menu? Run `bin/agent-probe`. It builds a throwaway office and drives `office new` -directly — no real client, so it also proves the shape display-menu cannot be -made to draw headless: one agent opens the desk with no menu at all, `--agent -2` (by number) and `--agent