Repository navigation
[cx-ncc.112.66, cx-ncc.112.74] cmux NEXT agent chat: the rail's lit band glides at rest, shows at 75%, and stays lit on hover - #24526
Conversation
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on d5928a9 to compare; do not merge until green; see lane-rules Tour of |
|
Owned by transcript-parity on cosmic-gray · session |
|
|
|
Found 8 test failures on Blacksmith runners: Failures
|
|
|
…r and leaving snap Codex review of #24526 (BLOCK at 61de4e9): - A key focusing a tick made it active while the rail stayed at rest, so the focused row faded in. Active ticks never take the glide now. - The pointer leaving the rail dropped data-hovering in the same commit that changed the hovered row's tone, so leaving faded too. A commit that changes the active row, the hover or the scrub marks the rail data-snap and its rows switch at once; the rail's next render that changes none of these drops the mark. - thread-minimap-motion asserted durations with a pattern a single 0.12s also matched. It now reads transitionProperty: exactly "transform, opacity", each 0.12s with no delay. thread-minimap-default-wave: the glide's selectors exclude data-snap and the active tick, and a VirtualTranscript render marks data-snap on focus and blur and clears it on the next band move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16030-bf28-7072-b1f6-b83bbd0beacc&host=cosmic-gray
|
|
|
Review (codex xhigh, correctness first): SHIP at b6762ca Reviewer: Codex gpt-6.1-sol, Verdict: "No correctness findings. The snap pose is commit-safe, hover/focus/leave/scrub changes are marked in the same render, scroll updates clear it, and the full map remains excluded from the new rules." The first round, at 61de4e9, blocked on three findings, all fixed in b6762ca:
CI at this head: the only reds are base reds (rust workspaces, release-notary, Guard status, cmux-next checks); web and react-apps checks and fast gates are green. |
|
|
…%, and stays lit on hover Carries over the parts of #24065 that #24058 does not cover, built on #24058's rail (railScrollTop, followPointer). The full-height map stays as #24058 left it. - At rest a row coming on screen brightens, and one leaving dims, over the motion scale's micro step (120 ms), so the band glides down the rail. Hover, scrub, data-reduce and prefers-reduced-motion switch at once; the full map keeps its look. - Lit ticks draw at --acpmux-minimap-lit, 75% by default (was 60%), over rest at 40%. lit.experiment.ts keeps 60/70/75/85% for the gallery's compare view and dogfood. - The prompts on screen stay lit while the pointer is on the rail (#22228 dimmed them back to rest there). Tests: thread-minimap-default-wave (default arm, each arm reaches the rail, the CSS); thread-minimap-motion reads the bar's transitions as a list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16030-bf28-7072-b1f6-b83bbd0beacc&host=cosmic-gray
…r and leaving snap Codex review of #24526 (BLOCK at 61de4e9): - A key focusing a tick made it active while the rail stayed at rest, so the focused row faded in. Active ticks never take the glide now. - The pointer leaving the rail dropped data-hovering in the same commit that changed the hovered row's tone, so leaving faded too. A commit that changes the active row, the hover or the scrub marks the rail data-snap and its rows switch at once; the rail's next render that changes none of these drops the mark. - thread-minimap-motion asserted durations with a pattern a single 0.12s also matched. It now reads transitionProperty: exactly "transform, opacity", each 0.12s with no delay. thread-minimap-default-wave: the glide's selectors exclude data-snap and the active tick, and a VirtualTranscript render marks data-snap on focus and blur and clears it on the next band move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16030-bf28-7072-b1f6-b83bbd0beacc&host=cosmic-gray
3a47dc1 to
a7e8cfe
Compare
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
|
|
Review (codex xhigh, correctness first): SHIP at a7e8cfe This is a delta review over b6762ca, the head of the full SHIP review above. Since then the branch was rebased onto b671d11, in two steps:
Reviewer: Codex gpt-6.1-sol, CI at this head:
|
|
Shipped in:
|
…ut (#24539) The pull_request checkout holds the merge ref at depth 2: the merge and its two parents. The PR head's own parents are cut, so a cut head reads as a root commit that adds the whole tree. On #24526 at 3a47dc1 the head was a commit bringing the base in; `rev-list --no-merges` listed it (a cut merge shows no parents) and the Sidebar-Look check saw it add 162 sidebar files. prepare now deepens the pull_request checkout with the same rule the dispatch path already used (shared as deep_enough/deepen): until the base meets the head at its true merge base with no cut between them. A full clone is left alone, as before. Tests: a depth-2 merge-ref checkout whose head brings the base in. After prepare, rev-list base..merge --no-merges is only the PR's own commit, and that commit's diff is only its own file. This fails on the old script with the cut merge listed instead. A full-clone pull_request fetches nothing. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1603a-6462-72f0-a4b0-6937eb58e4c3&host=cosmic-gray Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo-ask: ask-50f889c053
Leo-ask: ask-8dbc4a81e1
Takes back #22228: it lit the prompts on screen at 60% and dimmed them back to rest while the pointer was on the rail, so the band barely showed where the reader was. This PR lights them at 75% and keeps them lit on hover. #22228's rail, geometry, fisheye, card, click and scrub are unchanged.
This PR carries over the parts of #24065 that #24058 (5082646) does not cover. #24058 already restored the compact rail as the default and made its band reach the bottom ticks (
railScrollTop). It also keeps the band followed with the pointer on the rail (followPointer). This PR builds on that code. The full-height map (#22784) stays selectable fromcmux.experiments, as #24058 left it. #24065 is closed in favour of #24058 plus this PR.What Leo said
On the nightly, the agent chat's left-edge prompt rail (#22228, the Codex rail) "felt short". He explained: "it wouldn't show the highlighted bottom text where I was scrolling at the bottom, and it just didn't go to the bottom. It didn't show the bottom bits being highlighted." About the full-height map: "Why did you turn it into a whole mini map? ... I didn't want the mini map." From #24065's notes on the band's motion (Leo, 2026-10-21): "the wave didn't look good enough".
Change against #24058
--acpmux-minimap-lit--cmux-motion-micro)data-reduce,prefers-reduced-motiondata-snapfullarm):not(.acpmux-scrollmap)railScrollTop,followPointer, the bottom fixthreadMinimap.css: a@media (prefers-reduced-motion: no-preference)block gives the rail at rest acolortransition on ticks andtransform, opacityon bars. The lit bar readsopacity: var(--acpmux-minimap-lit, 0.75). The two[data-hovering] … [data-tone="current"]rules that dimmed the band are gone.lit.experiment.ts(new, registered):thread-minimap-litwith armslit-60,lit-70,lit-75(default) andlit-85.ThreadMinimapreads the arm once per pane and sets--acpmux-minimap-liton the rail. Dogfood:{"thread-minimap-lit":"lit-60"}incmux.experiments.Timers and cleanup: this PR adds no timer, observer or animation loop. Each glide is a CSS transition that ends by itself after 120 ms. A hovered, scrubbed or Reduce Motion rail runs none. No new per-token work: the arm is read once per pane in a
useStateinitializer.Versions (gallery)
New entry
agent-pane.thread-minimap-lit: 18 or 70 synthetic prompts (Prompt N: check the next step of the plan), with statesmid-thread,at-the-endandhovered, and the fourthread-minimap-litarms side by side in the compare view.Stills: the rail strip of each gallery frame at 2x, taken with Playwright's headless Chromium from the gallery host's builds. "Before" is base ea5f81f and "after" is this head, 61de4e9. Each frame waits for
data-gallery-ready, then 600 ms for the transitions to finish. The computed bar opacities read in the same frames are: rest 0.4 everywhere; lit 0.6 before and 0.75 after; with the pointer on the rail, lit 0.4 before (dimmed) and 0.75 after; the hovered tick 1.Before / after (dark, light):
Pointer on prompt 9 of 18, band on prompts 15 to 18. Before: the band drops back to rest. After: it stays lit.

At rest mid-thread:

Seventy prompts at the bottom of the chat (#24058's fix, now lit at 75%):

Versions: lit at 60% (#22228's, the before), 70%, 75% and 85%; dark, then light:
At rest mid-thread:

At the end of a 70-prompt chat:

Pointer on prompt 3, band on prompts 4 to 7:

Pick: 75% (the default). At 60% the band is a soft step over rest, most of all in light mode. At 85% in light mode the band is nearly as dark as the hovered tick, so the row under the pointer stops standing out. 75% reads as lit in both schemes and stays clearly under the hovered tick. The other arms stay selectable from
cmux.experiments.Gallery: agent-pane.thread-minimap-lit, agent-pane.thread-minimap/rest, agent-pane.thread-minimap/long-chat, agent-pane.thread-minimap/seventy-prompts-bottom
gallery-advisory-24526-<head>.Tests
webviews/test/thread-minimap-default-wave.test.tsxadds:lit-60andlit-85reach the rail's--acpmux-minimap-lit(rendered throughVirtualTranscript);var(--acpmux-minimap-lit, 0.75), and no rule dims the rail's band under[data-hovering];transformandopacity, and the tick transitionscolor, over--cmux-motion-micro, both inside the no-preference query, and never on an active tick or adata-snaprail;data-snap, and the next band move from the scroll clears it (rendered throughVirtualTranscript).thread-minimap-motion(browser lane) reads the bar's transition at rest: exactlytransform, opacity, each 0.12 s with no delay.Review: Codex (gpt-6.1-sol, xhigh) blocked 61de4e9 on focus and pointer-leave fading, and on the motion test's loose pattern; b6762ca fixes all three.
Observed / Not run
scripts/ci/run-webviews-tests.sh, bun 1.4.2): 14 of 15 files pass: thread-minimap default-wave, bottom, rail, current, feel, stream, tiny, room and card-glass, plus gallery agent-pane-entries, manifest, play-names and touched-rank. The 15th,gallery-coverage, fails its two cover checks with the same lists on base, none of them this PR's.vp lintandvp fmt --checkare clean on the touched files.typecheckreports 3 errors, all inthread-minimap-stream.test.tsx, which this PR does not touch (base).thread-minimap-motion's browser lane (CI only).Changelog
Webview only; no Swift change.
Agent session: cosmic-gray
🤖 Generated with Claude Code