Repository navigation
Running tray: Stop inside its line, one chevron column, the header's time after its counts - #29264
Conversation
…me after its counts The open tray hung each line's Stop below and right of the line, outside its box and off its centre, and the header's chevron and the lines' sat in two columns. The folded header floated its elapsed time in a column of its own far from the counts, behind a chat bubble. - Each line: time, state, Stop's track, then the chevron, last at the row's end. Stop lies over its track, one row tall from the line's top (its controls' row when narrow), centred, with its own absolute offsets reset. - The header: a running mark (the shared spinner while work runs), the counts, the elapsed time as quiet meta one gap after them, and the chevron in the same trailing column as every line's and View all's. One row at every width. - Gallery agent-pane.subagent-tray-head with three header arms (trayHead.experiment.ts: spinner, still glyph, no mark); spinner is the default. - test/subagent-tray-trailing.test.ts measures Stop inside its row and centred and every chevron on one x, at 760 and 300px, light and dark. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Owned by an agent session · session |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Found 3 test failures on Blacksmith runners: Failures
|
|
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 Passes: CI passes on CI passes on Written by web and size checks: green Shipped in:
|
…running-tray-columns
#27103 took the spinner off the header on Leo's word ("I NEVER SAID TO PUT THE SPINNER HERE"); the spinner stays on each working line. The header now draws a still running-work glyph by default. The gallery arms are glyph (default), bare, and the chat bubble it drew before, for comparison. The tray unit test checks the glyph, and that the bubble is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…running-tray-columns
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A newer verdict blocks 80c2bcd (no independent SHIP at the head).
…cks; its state stays in the trailing meta Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat-cmux-next's #29264 added `const [head]` (the header look arm) to SubagentTray; this PR's fold-focus ref was also `head`, so the merged file declared it twice. The ref is now `headButton`. test/subagent-tray.test.tsx 39/39 and subagent-tray-motion 11/11 pass.
* fix(next): the running tray starts folded to its header, and holds the person's choice per chat Closes #28875 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit b0cef69) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * test(next): open the running tray where a test reads its lines; fixtures for between turns A headed tray starts folded (#28875): the tests that read its lines open it as the person does, by its header, and the motion edges remember chat-a as opened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 49315c7) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): the tray's header takes focus when it folds under a focused line; browser tests open it Review of #28875: a lone line gaining a header folds the list, which goes inert under a focused line or Stop; focus now moves to the header. Reading a chat's choice refreshes its place in the bounded memory. The browser tests that read the tray's lines open it by its header (test/support/openRunningTray.ts); the glyph check uses a one-line variant, the panel's closed play opens the tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 0eb37de) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): a subagent line's icons and title keep the row's 8px icon gap The kind icon (agent.fork) sat inline against the title with no gap, and in a narrow tray the title started at 22px, flush against the 14px state icon. Both now keep the summary row's 8px icon gap (--acpmux-line-icon-gap). Browser regression in test/subagent-tray-columns.test.ts measures both gaps, wide and narrow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 9543b29) * fix(next): the narrow tray keeps its 8px state-icon gap; tests wait for the fold to settle The narrow layout's title already sat 8px past the state icon (the button's padding is the icon's left); only the kind icon's gap to the title was missing. openRunningTray waits for the fold to let go of its clip, so a focus or a scroll measures the settled tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 114d49d) * test(next): a tray folding with motion off moves focus from its line to the header; focus elsewhere stays Fails before the fix: with no motion the fold leaves in the same commit, and focus falls to the body. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 2624cd3) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): the tray's header takes focus when a motionless fold removes the focused line Review of #28875: with Reduce Motion or the motion switch off the fold leaves in the same commit as the fold, taking the focused line with it, so the layout effect saw the body and moved nothing. Whether focus is in the list is now kept by focus and blur events; a blur to another control clears it, a blur to nothing (removal, inert) does not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 284a554) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(tray): rename the header button ref after the feat-cmux-next merge feat-cmux-next's #29264 added `const [head]` (the header look arm) to SubagentTray; this PR's fold-focus ref was also `head`, so the merged file declared it twice. The ref is now `headButton`. test/subagent-tray.test.tsx 39/39 and subagent-tray-motion 11/11 pass. (cherry picked from commit aca7fb3) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(tray): icon-gap tests and CSS follow #29608, which removed the kind glyph feat-cmux-next's #29608 (f66a92e) took the fork glyph off subagent lines, so this PR's two "8px icon gap" browser tests waited for .acpmux-agent-line__kind-icon and timed out after the merge (review of aca7fb3). They now check the state icon to title gap (8px, wide and narrow) and that no kind icon renders; the kind-icon margin rule that styled nothing is gone. CMUX_BROWSER_TESTS=1 bun test test/subagent-tray-columns.test.ts: 12 pass, 0 fail. (cherry picked from commit 1ab971c) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * perf(agent-pane): skip hidden subagent tray rows when folded (cherry picked from commit b4fbe35) * test(agent-pane): 300 collapsed agents construct no hidden lines (cherry picked from commit 691560b) * test(tray): avoid 300 hidden row reads across repeated collapsed renders (cherry picked from commit d47573e) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * perf(agent-pane): index 300 siblings without copying arrays (cherry picked from commit 4a9f422) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * test(agent-pane): keep 300 sibling rows and cycle fallback (cherry picked from commit 01a768b) * fix(agent-pane): every part over the composer on the box's edges and radius, one gap; the tray's chevron at 22 Leo, 2026-10-30: "the stupid right indent misalignemnt". ui-think-tank's rule, one column, one gap, nothing removed: - The running tray's header ended in an empty 24px Stop slot, so its chevron sat about 46px from the right (43 in a narrow tray) against Send at 22. The header has no Stop slot now; every row ends 12px in with a 20px mark box, so the chevron (header, line, View all) centres 22px from the right, and a line's Stop (or its empty column) centres 42px from the right. Narrow rows keep the same columns. - At composer columns under 298px the box and its quiet row reach 8px past the column; every stack part now follows (--acpmux-stack-start/end on the dock write the same step out, since the composer's container query cannot reach its siblings). - The tray (10px), the opened pull requests and the recap's card (12px) take the box's radius token, now defined on the dock as well. - The recap, the legacy PR bars, the host's line and the agents pill drop their own bottom padding and take the stack's edges; the PR fallback row and the in-transcript tray take --cv-inset-end on the right; one dock rule gives the stack token between parts. The recap's card joins the glass like the tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * fix(tray): align fixed status and action tracks with the composer Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep workflow progress out of the status track Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep action columns inside the narrowest panes Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(web): center tray controls across row heights Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d --------- Co-authored-by: Austin Wang <38676809+austinywang@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: lawrencecchen <54008264+lawrencecchen@users.noreply.github.com>
* fix(next): the running tray starts folded to its header, and holds the person's choice per chat Closes #28875 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit b0cef69) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * test(next): open the running tray where a test reads its lines; fixtures for between turns A headed tray starts folded (#28875): the tests that read its lines open it as the person does, by its header, and the motion edges remember chat-a as opened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 49315c7) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): the tray's header takes focus when it folds under a focused line; browser tests open it Review of #28875: a lone line gaining a header folds the list, which goes inert under a focused line or Stop; focus now moves to the header. Reading a chat's choice refreshes its place in the bounded memory. The browser tests that read the tray's lines open it by its header (test/support/openRunningTray.ts); the glyph check uses a one-line variant, the panel's closed play opens the tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 0eb37de) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): a subagent line's icons and title keep the row's 8px icon gap The kind icon (agent.fork) sat inline against the title with no gap, and in a narrow tray the title started at 22px, flush against the 14px state icon. Both now keep the summary row's 8px icon gap (--acpmux-line-icon-gap). Browser regression in test/subagent-tray-columns.test.ts measures both gaps, wide and narrow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 9543b29) * fix(next): the narrow tray keeps its 8px state-icon gap; tests wait for the fold to settle The narrow layout's title already sat 8px past the state icon (the button's padding is the icon's left); only the kind icon's gap to the title was missing. openRunningTray waits for the fold to let go of its clip, so a focus or a scroll measures the settled tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 114d49d) * test(next): a tray folding with motion off moves focus from its line to the header; focus elsewhere stays Fails before the fix: with no motion the fold leaves in the same commit, and focus falls to the body. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 2624cd3) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): the tray's header takes focus when a motionless fold removes the focused line Review of #28875: with Reduce Motion or the motion switch off the fold leaves in the same commit as the fold, taking the focused line with it, so the layout effect saw the body and moved nothing. Whether focus is in the list is now kept by focus and blur events; a blur to another control clears it, a blur to nothing (removal, inert) does not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 284a554) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(tray): rename the header button ref after the feat-cmux-next merge feat-cmux-next's #29264 added `const [head]` (the header look arm) to SubagentTray; this PR's fold-focus ref was also `head`, so the merged file declared it twice. The ref is now `headButton`. test/subagent-tray.test.tsx 39/39 and subagent-tray-motion 11/11 pass. (cherry picked from commit aca7fb3) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(tray): icon-gap tests and CSS follow #29608, which removed the kind glyph feat-cmux-next's #29608 (f66a92e) took the fork glyph off subagent lines, so this PR's two "8px icon gap" browser tests waited for .acpmux-agent-line__kind-icon and timed out after the merge (review of aca7fb3). They now check the state icon to title gap (8px, wide and narrow) and that no kind icon renders; the kind-icon margin rule that styled nothing is gone. CMUX_BROWSER_TESTS=1 bun test test/subagent-tray-columns.test.ts: 12 pass, 0 fail. (cherry picked from commit 1ab971c) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * perf(agent-pane): skip hidden subagent tray rows when folded (cherry picked from commit b4fbe35) * test(agent-pane): 300 collapsed agents construct no hidden lines (cherry picked from commit 691560b) * test(tray): avoid 300 hidden row reads across repeated collapsed renders (cherry picked from commit d47573e) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * perf(agent-pane): index 300 siblings without copying arrays (cherry picked from commit 4a9f422) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * test(agent-pane): keep 300 sibling rows and cycle fallback (cherry picked from commit 01a768b) * fix(agent-pane): every part over the composer on the box's edges and radius, one gap; the tray's chevron at 22 Leo, 2026-10-30: "the stupid right indent misalignemnt". ui-think-tank's rule, one column, one gap, nothing removed: - The running tray's header ended in an empty 24px Stop slot, so its chevron sat about 46px from the right (43 in a narrow tray) against Send at 22. The header has no Stop slot now; every row ends 12px in with a 20px mark box, so the chevron (header, line, View all) centres 22px from the right, and a line's Stop (or its empty column) centres 42px from the right. Narrow rows keep the same columns. - At composer columns under 298px the box and its quiet row reach 8px past the column; every stack part now follows (--acpmux-stack-start/end on the dock write the same step out, since the composer's container query cannot reach its siblings). - The tray (10px), the opened pull requests and the recap's card (12px) take the box's radius token, now defined on the dock as well. - The recap, the legacy PR bars, the host's line and the agents pill drop their own bottom padding and take the stack's edges; the PR fallback row and the in-transcript tray take --cv-inset-end on the right; one dock rule gives the stack token between parts. The recap's card joins the glass like the tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * fix(tray): align fixed status and action tracks with the composer Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep workflow progress out of the status track Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep action columns inside the narrowest panes Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(web): center tray controls across row heights Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d --------- Co-authored-by: Austin Wang <38676809+austinywang@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: lawrencecchen <54008264+lawrencecchen@users.noreply.github.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d
* fix(tray): align status and controls with the composer (#29794) * fix(next): the running tray starts folded to its header, and holds the person's choice per chat Closes #28875 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit b0cef69) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * test(next): open the running tray where a test reads its lines; fixtures for between turns A headed tray starts folded (#28875): the tests that read its lines open it as the person does, by its header, and the motion edges remember chat-a as opened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 49315c7) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): the tray's header takes focus when it folds under a focused line; browser tests open it Review of #28875: a lone line gaining a header folds the list, which goes inert under a focused line or Stop; focus now moves to the header. Reading a chat's choice refreshes its place in the bounded memory. The browser tests that read the tray's lines open it by its header (test/support/openRunningTray.ts); the glyph check uses a one-line variant, the panel's closed play opens the tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 0eb37de) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): a subagent line's icons and title keep the row's 8px icon gap The kind icon (agent.fork) sat inline against the title with no gap, and in a narrow tray the title started at 22px, flush against the 14px state icon. Both now keep the summary row's 8px icon gap (--acpmux-line-icon-gap). Browser regression in test/subagent-tray-columns.test.ts measures both gaps, wide and narrow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 9543b29) * fix(next): the narrow tray keeps its 8px state-icon gap; tests wait for the fold to settle The narrow layout's title already sat 8px past the state icon (the button's padding is the icon's left); only the kind icon's gap to the title was missing. openRunningTray waits for the fold to let go of its clip, so a focus or a scroll measures the settled tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 114d49d) * test(next): a tray folding with motion off moves focus from its line to the header; focus elsewhere stays Fails before the fix: with no motion the fold leaves in the same commit, and focus falls to the body. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 2624cd3) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(next): the tray's header takes focus when a motionless fold removes the focused line Review of #28875: with Reduce Motion or the motion switch off the fold leaves in the same commit as the fold, taking the focused line with it, so the layout effect saw the body and moved nothing. Whether focus is in the list is now kept by focus and blur events; a blur to another control clears it, a blur to nothing (removal, inert) does not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> (cherry picked from commit 284a554) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(tray): rename the header button ref after the feat-cmux-next merge feat-cmux-next's #29264 added `const [head]` (the header look arm) to SubagentTray; this PR's fold-focus ref was also `head`, so the merged file declared it twice. The ref is now `headButton`. test/subagent-tray.test.tsx 39/39 and subagent-tray-motion 11/11 pass. (cherry picked from commit aca7fb3) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * fix(tray): icon-gap tests and CSS follow #29608, which removed the kind glyph feat-cmux-next's #29608 (f66a92e) took the fork glyph off subagent lines, so this PR's two "8px icon gap" browser tests waited for .acpmux-agent-line__kind-icon and timed out after the merge (review of aca7fb3). They now check the state icon to title gap (8px, wide and narrow) and that no kind icon renders; the kind-icon margin rule that styled nothing is gone. CMUX_BROWSER_TESTS=1 bun test test/subagent-tray-columns.test.ts: 12 pass, 0 fail. (cherry picked from commit 1ab971c) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * perf(agent-pane): skip hidden subagent tray rows when folded (cherry picked from commit b4fbe35) * test(agent-pane): 300 collapsed agents construct no hidden lines (cherry picked from commit 691560b) * test(tray): avoid 300 hidden row reads across repeated collapsed renders (cherry picked from commit d47573e) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * perf(agent-pane): index 300 siblings without copying arrays (cherry picked from commit 4a9f422) Agent-Session: https://cmux.com/deeplink/agent?id=aid-08e2cc96b9b79e73b8e4 * test(agent-pane): keep 300 sibling rows and cycle fallback (cherry picked from commit 01a768b) * fix(agent-pane): every part over the composer on the box's edges and radius, one gap; the tray's chevron at 22 Leo, 2026-10-30: "the stupid right indent misalignemnt". ui-think-tank's rule, one column, one gap, nothing removed: - The running tray's header ended in an empty 24px Stop slot, so its chevron sat about 46px from the right (43 in a narrow tray) against Send at 22. The header has no Stop slot now; every row ends 12px in with a 20px mark box, so the chevron (header, line, View all) centres 22px from the right, and a line's Stop (or its empty column) centres 42px from the right. Narrow rows keep the same columns. - At composer columns under 298px the box and its quiet row reach 8px past the column; every stack part now follows (--acpmux-stack-start/end on the dock write the same step out, since the composer's container query cannot reach its siblings). - The tray (10px), the opened pull requests and the recap's card (12px) take the box's radius token, now defined on the dock as well. - The recap, the legacy PR bars, the host's line and the agents pill drop their own bottom padding and take the stack's edges; the PR fallback row and the in-transcript tray take --cv-inset-end on the right; one dock rule gives the stack token between parts. The recap's card joins the glass like the tray. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * fix(tray): align fixed status and action tracks with the composer Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep workflow progress out of the status track Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep action columns inside the narrowest panes Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(web): center tray controls across row heights Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d --------- Co-authored-by: Austin Wang <38676809+austinywang@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: lawrencecchen <54008264+lawrencecchen@users.noreply.github.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * docs: link tray release highlight to agent documentation Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(web): preserve tray icon and scrolled control geometry Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * style: wrap tray geometry assertions Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * test(tray): cover visible state and narrow scroll geometry Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep short dock controls inside scroll viewport Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep populated list at one row minimum Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep narrow stop inside fractional viewport Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): preserve folded tray behavior during rebase Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): follow current session info imports Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): settle gallery plays after folded start Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * fix(tray): keep row stop controls on the running lines Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * test(tray): cover row stop controls in trailing geometry Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * test(tray): target populated stop slots Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d * test(tray): settle only finite running-strip animations Agent-Session: https://cmux.com/deeplink/agent?id=aid-dcb1d77e7d3efe26a42d --------- Co-authored-by: Austin Wang <38676809+austinywang@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: lawrencecchen <54008264+lawrencecchen@users.noreply.github.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Fixes the running-in-background tray defects shown in Leo's screenshots of the cmux NEXT agent transcript (2026-10-31). His message didn't reach this lane, only the screenshots, so this PR builds from them and from his standing words:
What the screenshots show, and the fix
top: 12px; right: 14pxis resetKept: Stop and what it does, the counts, the elapsed time, the hover wash, the fold, colours and glass. The motion is untouched: #29092 (the line entrance) owns
subagents.css's motion block and the gallery's motion arms, and this PR doesn't touch either.Gallery: three variants, default picked
agent-pane.subagent-tray-head(variantsfolded,open) with the experimentsubagent-tray-head:Prior art and overlap
AgentLine.tsxand thesubagents.csstrailing tracks would conflict. Whichever lands second takes the other's tracks.bottomStack.csschange drops the narrow two-row header reservation, which is no longer true.Tests
test/subagent-tray-trailing.test.ts(browser lane, Chromium). At 760 and 300px, light and dark, it checks that every Stop is inside its line's box, centred on the line's state (and on the row centre when wide), sits in its own track between the state and the chevron, and is the hit target at its centre. It also checks that the header's, every line's and View all's chevrons end on one x, that the header is one row, and that its time sits 8px after its counts.test/subagent-tray-columns.test.tsandtest/subagent-tray-layout.test.tsare updated for the new header geometry. The header's time is no longer a column, the header is one row when narrow, and the chevron comes after Stop.Risk
Low and contained to the running tray's layout: CSS tracks, one span per line, and the header's mark. No data or behaviour change. Stop still stops only its own subagent or command.
Stills (Linux gallery, Chromium, 2x, synthetic fixture
agent-pane.subagent-tray-head)Other header arms: bare (folded dark, open light), session, the old bubble kept for comparison (folded light, open dark).
I viewed the after images. The header's time now sits right after "Running in background · 3 subagents". The chat bubble is replaced by a still running glyph. Each Stop sits on its line's centre, between Running and the chevron. The header's chevron and every line's chevron end on one x.
Takes back #27103: that change made the header's mark a fixed
agent.sessionchat bubble. This PR keeps it fixed (no spinner, as #27103 requires) but swaps the bubble for a running-work glyph, because the bubble reads as a message. #27103's flush-tray spacing is kept.Spec: teamleaderleo/leo-workspace#1913 (design/running-tray.md).
Checks run (fast-checks, Linux 16/32 vCPU)
subagent-tray-trailing.test.ts(new, 4 cases),subagent-tray-columns.test.ts(10),browser/glyph-alignment.test.ts,browser/gallery-control-surfaces.test.ts: all pass (run).subagent-tray-layout,subagent-tray,agent-pane-working-counts,agent-pane-background-tasksunit suites: pass.action export areas/autofix repairsfail on "generator merge snapshot is stale" forPageChromiumOffscreenParking.swift, a Swift file this PR doesn't touch. I merged the base again, which cleared it.🤖 Generated with Claude Code
Agent session: agent session