Skip to content

Prompt rail: one Codex-sized height that nothing changes; the wave keeps up with a sweep - #34666

Merged
teamleaderleo merged 7 commits into
feat-cmux-nextfrom
lane/rail-wave-fast-codex-height
Nov 4, 2026
Merged

teamleaderleo merged 7 commits into
feat-cmux-nextfrom
lane/rail-wave-fast-codex-height

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-04:

hovering across the session rail gets a bit laggy and the missing chunks of the wave bother me :( it needs to get faster

also the left side session rail should just be having a nicer max height instead of going all the way up and down. make it look like codex's size.

also the height of the left scroll rail should never be affected by anything

Leo-ask: ask-0eea9d95e5

What changes

  • One height for every chat, the Codex rail's size. The prompt rail's box was max(count × 10, 320) capped at 92% of the window, so in a long chat it ran from the top of the pane to the bottom. It is now 240 px for every chat. The prompt count, the window, the pane's height, the prompts on screen (the band) and the bottom stack don't change it. Past 24 prompts its list scrolls and keeps the band in view (railScrollTop). Only a view too short for 240 px clips it (railRoom). A composer or tray that grows tall enough to reach the rail lays over its foot: the rail neither moves nor shortens (Leo, 2026-11-03: "i just don't like it when the thing shifts"). The other arms keep the old foot-shortening (railClearHeight). height.experiment.ts gains fixed-200, fixed-240 (default) and fixed-280 (fixed: true in RAIL_HEIGHTS), and the agent-pane.thread-minimap-height gallery entry's notes describe them beside the old arms.
  • No holes in the wave on a sweep. In the zipper (the shipped wave), every tick that was not the hovered one eased to its new length over 180 ms. So during a sweep the hovered tick snapped long, but the rows ahead of it were still short, and the trailing rows were still long. The bump had holes on its leading side. Now growing ticks ease over the quick step (80 ms), like the hovered tick does on arrival, and shrinking ticks keep 180 ms as the zipper's tail. The hovered tick is still the single longest every frame.

The hover lag itself (React work per row change, the preview card) is measured separately, and its fix follows in a separate PR.

Tests

Red first (fa0b8ea), then the fix:

  • bun test test/thread-minimap-wave-model.test.ts: new "a sweep keeps the bump whole". On base, after one frame of a 60 Hz sweep, the row ahead has 0.18 of its length; it needs more than 0.35. Passes on head.
  • bun test test/thread-minimap-rail.test.tsx: new "the rail is one height, the Codex rail's, whatever the prompt count or the pane's height" (1 to 1,000 prompts, 400 to 2,100 px views → 240). Fails on base (320, 450, 662, …), passes on head.
  • bun test test/thread-minimap-rail.test.tsx: the band (1, 24, 50 and 1,000 prompts on screen) keeps 240. Fails at 8a21b18 (500 for 50), passes on head.
  • bun test test/thread-rail-layout-box.test.tsx: the rail's box is identical with a 120 px, a 188 px and a rail-reaching stack. Fails at 8a21b18 (the height shrank), passes on head.
  • test/thread-rail-full-height.test.tsx was updated to the fixed box: the rows not drawn are counted through the list's gaps.
  • All test/thread-minimap* and test/thread-rail* jsdom suites pass locally.

Observed / Not run

  • Observed: the bun suites above, red on base and green on head; vp fmt --check on changed files. scripts/web-lint.sh fails only on base files (pages/changelog/updateSurfaces.css design token, App.tsx and others' format).
  • Not run: the type-aware lint/type check (left to CI on this shared host), and gallery captures.

Follow-ups

Review follow-ups: #35239.

Spec

design/session-rail.md "Height and overflow" (leo-workspace) should read: the compact rail is one fixed height, 240 px (the Codex rail's size), for every chat. Prompt count, window, pane height, the band and the bottom stack never change it or move it (a stack tall enough lays over its foot), and a view shorter than that clips it. Past 24 prompts its list scrolls. This replaces "starts at 320 px, grows toward 92%" (last good commit d53567b). This host can't publish to leo-workspace, so that edit follows from a lane that can.

Changelog

  • Changed: The agent chat's prompt rail is one compact height for every chat, and its hover wave keeps up with a quick sweep.

risk:normal

🤖 Generated with Claude Code

Agent session: agent session

teamleaderleo and others added 2 commits November 4, 2026 02:54
… no holes (red)

Leo-ask: ask-0eea9d95e5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6db3c1673d18051baad7
…eps up with a sweep

Leo, 2026-11-04: "the left side session rail should just be having a nicer
max height instead of going all the way up and down. make it look like
codex's size." and "the height of the left scroll rail should never be
affected by anything" and "the missing chunks of the wave bother me".

The rail's box is a fixed 240 px (fixed-240 arm, with 200 and 280 to
compare); past 24 prompts its list scrolls. Growing ticks in the zipper
ease over the quick step instead of the standard one, so the rows ahead
of the pointer are up as it arrives; shrinking ticks keep the tail.

Leo-ask: ask-0eea9d95e5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6db3c1673d18051baad7
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 4, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 8a21b18

Visual verdict: no images; code verdict only [follow-up].
Checked railHeight/railTop/overflow and wheel ownership with the fixed 240 px box, zipper invariants (no overshoot, hovered single longest), other readers of the height arms; all rail suites pass.

Follow-ups:

  • [follow-up] the band rule can still grow the rail past 240 px when >24 prompts are on screen at once
  • [follow-up] restore direct railHeight coverage for the initial-* arms
  • [follow-up] reword the height gallery note "tall initial rail"
  • [follow-up] chats with 25-66 prompts now scroll the rail list, so the wheel over the rail scrolls it (intended)

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review c55d741: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr34666 -f ref=lane/rail-wave-fast-codex-height -f platform=macos -f backend_mode=local

Stale: these images are of 8a21b18; the head is now c55d741 and a new capture is running.

Gallery before/after for 8a21b18: 16 states rendered, 32 images differ, 3438 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41763960516 -R manaflow-ai/cmux -n gallery-advisory-34666-8a21b182423257daf96c68753e1fb0b94da8633e (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-minimap/streaming Apple System Colors Light changed 0.016% imports model.ts (1 hops)
agent-pane.chat-minimap/streaming Apple System Colors changed 0.016% imports model.ts (1 hops)
agent-pane.chat-minimap/at-rest Apple System Colors Light changed 0.016% imports model.ts (1 hops)
agent-pane.chat-minimap/at-rest Apple System Colors changed 0.016% imports model.ts (1 hops)
agent-pane.chat-width/standard Apple System Colors Light changed 0.0032% imports model.ts (1 hops)
agent-pane.chat-width/standard Apple System Colors changed 0.0032% imports model.ts (1 hops)
agent-pane.chat-width/wide Apple System Colors Light changed 0.0032% imports model.ts (1 hops)
agent-pane.chat-width/wide Apple System Colors changed 0.0032% imports model.ts (1 hops)
agent-pane.chat-width/wide-blocks Apple System Colors Light changed 0.0032% imports model.ts (1 hops)
agent-pane.chat-width/wide-blocks Apple System Colors changed 0.0032% imports model.ts (1 hops)
agent-pane.composer-edge/short-edge Apple System Colors Light changed 0.0286% imports model.ts (1 hops)
agent-pane.composer-edge/short-edge Apple System Colors changed 0.0286% imports model.ts (1 hops)
agent-pane.composer-edge/wide-edge Apple System Colors Light changed 0.0286% imports model.ts (1 hops)
agent-pane.composer-edge/wide-edge Apple System Colors changed 0.0286% imports model.ts (1 hops)
agent-pane.composer-edge/no-edge Apple System Colors Light changed 0.0286% imports model.ts (1 hops)
agent-pane.composer-edge/no-edge Apple System Colors changed 0.0286% imports model.ts (1 hops)
agent-pane.composer-floats/scrolled-to-end Apple System Colors Light changed 0.0714% imports model.ts (1 hops)
agent-pane.composer-floats/scrolled-to-end Apple System Colors changed 0.0714% imports model.ts (1 hops)
agent-pane.composer-floats/composer-grown Apple System Colors Light changed 0.0714% imports model.ts (1 hops)
agent-pane.composer-floats/composer-grown Apple System Colors changed 0.0714% imports model.ts (1 hops)
agent-pane.composer-rest-gap/gap-40 Apple System Colors Light changed 0.0495% imports model.ts (1 hops)
agent-pane.composer-rest-gap/gap-40 Apple System Colors changed 0.0495% imports model.ts (1 hops)
agent-pane.composer-rest-gap/gap-56 Apple System Colors Light changed 0.0495% imports model.ts (1 hops)
agent-pane.composer-rest-gap/gap-56 Apple System Colors changed 0.0495% imports model.ts (1 hops)
agent-pane.composer-rest-gap/gap-72 Apple System Colors Light changed 0.0495% imports model.ts (1 hops)
agent-pane.composer-rest-gap/gap-72 Apple System Colors changed 0.0495% imports model.ts (1 hops)
agent-pane.continuation-spacing/shipped Apple System Colors Light changed 0.0075% imports model.ts (1 hops)
agent-pane.continuation-spacing/shipped Apple System Colors changed 0.0075% imports model.ts (1 hops)
agent-pane.continuation-spacing/two-thirds Apple System Colors Light changed 0.0075% imports model.ts (1 hops)
agent-pane.continuation-spacing/two-thirds Apple System Colors changed 0.0075% imports model.ts (1 hops)
agent-pane.continuation-spacing/half-tucked Apple System Colors Light changed 0.0075% imports model.ts (1 hops)
agent-pane.continuation-spacing/half-tucked Apple System Colors changed 0.0075% imports model.ts (1 hops)

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Unclear: web / react-apps-check (1) failed: no known signature; failed step: Fail on the gate checks. This PR merged before its CI finished: fix forward on main.

CI failed on c55d741296 (run 41804363657 attempt 1): 2 unknown.

Job Verdict Why
web / react-apps-check (1) unknown no known signature; failed step: Fail on the gate checks
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Not re-run automatically: web / react-apps-check (1), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: cmux-next checks (god files, concurrency, crash safety, l10n); do not merge until green; see lane-rules
red: web / Web status; do not merge until green; see lane-rules
red: web / react-apps-check; do not merge until green; see lane-rules
red: web / react-apps-check (1); do not merge until green; see lane-rules

Shipped in:

teamleaderleo and others added 4 commits November 4, 2026 08:56
A fixed arm no longer grows to the prompts on screen; its list scrolls to keep
them. A stack grown into it lifts the whole rail clear instead of shortening it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6db3c1673d18051baad7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6db3c1673d18051baad7
…oving it

Leo, 2026-11-03: "i just don't like it when the thing shifts". The fixed rail
keeps its rest box for every stack; the height gallery notes describe the fixed
arms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6db3c1673d18051baad7
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at c55d741

Delta since the SHIP at 06971b0 (itself a delta from 8a21b18): a fixed arm (default fixed-240) is one height whatever the band or bottom stack, and a grown stack lays over its foot instead of moving or shortening it. The jsdom suites test/thread-minimap and test/thread-rail pass (163). The new tests fail at 8a21b18 (500 for a 50-prompt band; the height shrank under a grown composer).

Follow-ups:

  • F1 [follow-up] a tall stack can cover the fixed rail's lowest ticks, including the active one; consider clamping the list's scroll to the live room without moving the box.
  • F2 [follow-up] unit test for railScrollTop with a band longer than the 240 px rail.

@blacksmith-sh

blacksmith-sh Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Found 8 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp0bt1dkje/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmp1swy6th1/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
nightly cmux-tui resolve/nightly cmux-tui resolve View Logs
the short nightly decide gate must use the pooled Linux route with a Blacksmith fallbac
k/
the short nightly decide gate must use the pooled Linux route with a Blacksmith fallbac
k
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo teamleaderleo added the leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel label Nov 4, 2026
@teamleaderleo
teamleaderleo merged commit 9c5d3c4 into feat-cmux-next Nov 4, 2026
183 of 197 checks passed
@teamleaderleo
teamleaderleo deleted the lane/rail-wave-fast-codex-height branch November 4, 2026 09:19
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Finding outcome: comment-6627083606/F1 filed-follow-up #35239
Finding outcome: comment-6627083606/F2 filed-follow-up #35239

teamleaderleo added a commit that referenced this pull request Nov 5, 2026
…re pointing at it (#35966)

* gallery: thread-minimap-unheld scrolls the rail to an old prompt before pointing at it

Since #34666 the rail has one height, so sixty prompts overflow it; it opens on the latest and
draws only the ticks in its view (tickWindow.ts). The plays hovered ticks 2 and 4 right away and
failed with 'no element for [data-tick=N]' on every health shard, red on base too. Each play now
wheels the rail (which marks it as the reader's) and scrolls its list to the top first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-cb8b9969051e7411b140

* style(webviews): format the minimap gallery play (vp fmt)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-cb8b9969051e7411b140

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

1 inactive deployment
ci-routing-agent — c55d7412 Deployed Nov 4, 2026 by teamleaderleo via wait for same-key tree publisher #110842
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant