Skip to content

feat(bar): the mouse wheel walks the rows; move the zellij pin to 0.45.1 - #275

Merged
olliegilbey merged 3 commits into
mainfrom
feat/bar-wheel-045
Oct 6, 2026
Merged

olliegilbey merged 3 commits into
mainfrom
feat/bar-wheel-045

Conversation

@olliegilbey

@olliegilbey olliegilbey commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

What changed

A trackpad swipe over the bar panicked it ("" at the register_plugin! line of main.rs). The host runs zellij 0.45.1, which added horizontal scroll events (zellij-utils-0.45.1/src/plugin_api/event.proto:328-338). The bar was built on the 0.44.3 tile crate, whose decoder refuses them, and register_plugin! unwraps the decode (zellij-tile-0.44.3/src/lib.rs:130-141).

  • The zellij pin moves to 0.45.1 (zellij-tile, zellij-utils, the tripwire const, AGENTS.md, CONTRIBUTING.md, README). unicode-width moves to 0.2, the line zellij-utils 0.45.1 lays out its grid with.
  • The mouse wheel now walks the rows, one row per event, through the same walk as Alt+j/Alt+k. For trackpad momentum it stops at the ends of its block instead of wrapping, and a step that goes nowhere emits nothing. It walks from the bar's own tab, not the beacon, because only the bar under the pointer gets the event.
  • FOOTGUNS: the decode panic and how to read it; the OpenSSL headers the host test build needs on Linux.

Closes n/a (no issue; found and asked for in session).

Risk class(es)

  • Pure logic / model
  • Generated artifacts (config.kdl / layout.kdl / launch.kdl)
  • CLI surface (new subcommand or flag)
  • Cross-process / IPC (pipes, plugin shellouts, multi-writer store paths)
  • Install / environment (release mechanics, dev-install, PATH, doctor) → label needs-live-validation
  • Visual / UX (glyphs, colours, widths, fonts) → label host-untestable

Verified automatically

just gates on ollie-xps (Linux), exit 0:

Command Result
cargo test --workspace 829 passed; 0 failed (bar lib 320, clave lib 435, the rest integration)
cargo build -p clave-bar --target wasm32-wasip1 ok
cargo clippy --workspace --all-targets -- -D warnings ok
  • Tests added: the_wheel_selects_standby_rows_and_opens_none (red-first, from review), the_wheel_steps_one_live_row_per_event, the_wheel_stops_at_the_ends_of_its_block_and_emits_nothing_there, the_wheel_walks_from_its_own_tab_not_the_beacon, the_wheel_walks_the_dormant_block_after_a_dormant_pick, a_wheel_on_a_bar_with_incoherent_frames_does_nothing. Written after the code, not red-first; just mutants stands in: 41 of 41 mutants over the diff caught or unviable.
  • config_with_the_frame_slice_parses_and_carries_pane_frames now asserts pane_frame_style is carried, as its own comment asked for at the 0.45 bump.
  • The nav refactor (walk and landing split out for reuse) kept all 314 existing bar tests green.
  • Proptests: n/a, no new reachable branch in the ring walk beyond the Stop edge the unit tests pin.
  • Cross-process: a wheel event reaches one instance only. Its landing is the same SwitchTab/FocusPane + AnnounceVisit pair a click emits, so the beacon hand-off is unchanged. A burst that reaches the old bar before the switch lands re-targets the same next tab: idempotent.

Review lanes run

Lane Ran? Findings
Vendored fugu review no
Independent adversarial reviewer yes, 3 subagents in parallel: wheel logic, zellij bump audit, repo standards fixed in b5e916b, see below
CodeRabbit CLI (coderabbit review --committed --base main -c AGENTS.md, v0.8.1) yes, at b5e916b 0 findings over all 13 changed files
Other (Codex, PR bots) PR bots on this PR pending

Fixed (b5e916b):

  • Wheel logic: a trackpad flick opened every standby row it crossed (confirmed by a scratch test: two OpenAgent in ten steps). The wheel now only selects a standby row; click or Alt+Enter opens it. New test the_wheel_selects_standby_rows_and_opens_none, red on the old code.
  • Bump audit: clave doctor still named 0.44.3 as tested and told 0.45.1 users to downgrade. Stale pin comments (unicode-width "held at 0.1", tripwire and guardrail headers, TESTING.md recipe, FOOTGUNS preamble). The tripwire's kdl note was wrong: zellij-utils declares ^4.5.0.
  • Bump audit, clean: no shim signature changed; every server handler the bar calls is byte-identical between the tags; wheel events reach unselectable panes, one per notch; no bar glyph changes width between unicode-width 0.1.14 and 0.2.2.
  • Standards: no blocking issues. README now says a scroll stops at the ends and opens nothing.

Findings DECLINED:

  • Late wheel events on the old bar could, in theory, land after the new bar's step and pull focus back one tab (per-plugin threads, wasm_bridge.rs:913-938). Not observed; the old bar drains in well under a millisecond against 8-16 ms between trackpad events. Left as is.
  • No UBIQUITOUS_LANGUAGE entry for "wheel": plain English, and the reviewer judged it consistent with precedent.

Could NOT be verified, and why

  • The panic fix is read from source, not reproduced on 0.44.3 then cleared: the old panic was seen live by Ollie before, and it did not appear in the drive below.
  • Only Linux ran the gates. The Mac has not built this branch.
  • A zellij 0.44.x host with this bar is untested and may break: the plugin API is only promised for the matching version. Only Ollie runs clave today, on 0.45.1 everywhere.
  • The OpenSSL workaround is local to ollie-xps; CI's ubuntu-latest has the headers.

Live steps for the maintainer

Done by Ollie on 2026-09-28, sandbox clave-test-wheel on the devbox, driven over ssh from the Mac trackpad: "looks like it works flawlessly". Sandbox killed after.

  1. ssh -t devbox 'cd ~/code/clave/.claude-worktrees/wheel && just launch' from a Mac terminal outside zellij. Expect the tall scenario fleet.
  2. Open two or three rows as tabs, then scroll over the bar. Expect one row per step, stopping at the first and last running tab.
  3. Swipe sideways and diagonally over the bar. Expect no error box.

Handoff and links

  • Status handoff: n/a, single-session change.
  • Related: docs/status/2026-09-22-1214-devbox-width-flap.md listed this panic as open and unmeasured.

https://claude.ai/code/session_01Ux1k31S1gRHVRWyCwzbwq7

A trackpad swipe over the bar panicked it: "<NO PAYLOAD>" at the
register_plugin! line of main.rs. The host runs zellij 0.45.1, which
added horizontal scroll (MouseScrollLeft/Right, zellij-utils-0.45.1
src/plugin_api/event.proto:328-338). The bar was built on the 0.44.3
tile crate, whose decoder refuses those events, and register_plugin!
unwraps the decode (zellij-tile-0.44.3 src/lib.rs:130-141). A swipe is
almost never exactly vertical, so nearly every swipe hit it.

The pin moves to 0.45.1 for zellij-tile and zellij-utils, with the
tripwire const. unicode-width moves to 0.2, the line zellij-utils
0.45.1 lays out its own grid with. The frame-slice guardrail now
asserts that pane_frame_style is carried, which the 0.45 parser reads.

The wheel moves the selection one row per event, like Alt+j/Alt+k,
through the same walk. It differs in two ways, both for trackpad
momentum: it stops at the ends of its block instead of wrapping, and
a step that goes nowhere emits nothing. It walks from the bar's own
tab, not the beacon, because only the bar under the pointer gets the
event (the same reason click is not executor-gated).

Verified: just gates green; five model tests pin the wheel (step,
stop at both ends, own tab over a stale beacon, dormant block,
incoherent frames); just mutants over the diff, 41 of 41 caught or
unviable. Ollie drove it in the clave-test-wheel sandbox over ssh
from the Mac trackpad: scroll walks the rows, and no panic.

Claude-Session: https://claude.ai/code/session_01Ux1k31S1gRHVRWyCwzbwq7
Agreed with Ollie in the wheel session. The pin moved in the previous
commit; the index still sent agents to the 0.44.3 source.

Claude-Session: https://claude.ai/code/session_01Ux1k31S1gRHVRWyCwzbwq7
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@olliegilbey olliegilbey added the needs-live-validation Merged but requires maintainer-at-terminal validation before the next tag label Sep 27, 2026
@coderabbitai

coderabbitai Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Repository: olliegilbey/clave/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 7fbcdd55-1fe1-426a-aa3f-ff6c043595cf


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

… names 0.45.1

Three independent reviews ran on #275 (wheel logic, the zellij bump,
the repo's standards). Fixes for what they found:

- A trackpad flick opened every standby row it crossed. Standby rows
  sit in the live block and open on arrival, so after a quit one
  flick would start the whole old fleet. A wheel landing on a standby
  row now only selects it; a click or Alt+Enter opens it. The new
  test failed on the old code (10 wheel steps emitted two OpenAgent)
  and passes now.
- `clave doctor` still named 0.44.3 as the tested zellij, so it told
  every 0.45.1 user to downgrade. TESTED_ZELLIJ is 0.45.1, and the
  healthy-case fixtures read the const instead of a literal.
- Stale comments that argued for the old pin: the unicode-width note
  ("held at 0.1") above a 0.2 line, the tripwire header, the guardrail
  header and expect messages, TESTING.md's vendored-path recipe, the
  FOOTGUNS zellij preamble. The tripwire's kdl note claimed
  zellij-utils pins kdl 4.7.1; it declares ^4.5.0, and 4.7.1 is ours.
- The dormant-block wheel test now asserts a step past the end emits
  nothing. README says a scroll stops at the ends and opens nothing.

Verified: just gates green, 829 passed, 0 failed.

Claude-Session: https://claude.ai/code/session_01Ux1k31S1gRHVRWyCwzbwq7
@olliegilbey
olliegilbey merged commit 950450d into main Oct 6, 2026
10 checks passed
@olliegilbey
olliegilbey deleted the feat/bar-wheel-045 branch October 6, 2026 18:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-live-validation Merged but requires maintainer-at-terminal validation before the next tag

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant