Repository navigation
cmux NEXT: New Tab style switch looks as a Debug Settings choice - #20598
teamleaderleo wants to merge 37 commits into
Conversation
… pick by default Leo 2026-10-14: #20336 replaced the template dots with the style names without his look. The switch gets the looks to compare in one build (Debug Settings newTab.styleSwitch, sent as styleSwitch): the dots as before #20127, the dots that name a pick for a moment (the default), a strip of layout glyphs, and #20336's names. Every look is one radio group that saves through newTab.setTemplate, keeps focus on a keyboard pick and hands it to the field after a pointer pick. Red: bun test test/new-tab-style-switch.test.tsx fails on base (no DEFAULT_STYLE_SWITCH, no look prop). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…compare Leo 2026-10-14: #20336 replaced the template dots with the style names without his look. The switch now draws one of four looks from one build, picked in Debug Settings (newTab.styleSwitch, sent to the page as styleSwitch only when set): - hint (no knob set): one dot per style as before #20127, the name as an instant tooltip, and a pick's name over the dots for about a second; - dots: the dots exactly as before #20127, named by tooltip; - strip: a 14px sketch of each style's layout, named by tooltip; - names: #20336's style names. Every look keeps the radios, the newTab.setTemplate save and the focus hand-off: a pointer pick asks for the field, a keyboard pick keeps focus on the switch. A pointer press now marks only the change it causes, so an arrow key right after a click keeps focus too. Green: bun test test/new-tab-style-switch.test.tsx (6 pass). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
|
Bead |
|
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by |
|
|
Gallery103 states changed: agent-pane.transcript/long-code, agent-pane.artifact-panel/html, agent-pane.artifact-panel/markdown, agent-pane.artifact-panel/versions, agent-pane.composer-turn-cycle/cycle, ... · 21 new states · 53 play checks failed Diff page and renders (the run's 97 more on the diff page. Live preview (follows this branch; start it with
Play checks failed (0 px anchor movement, 0 layout shift, no frame over 33 ms unless the entry gives a reason):
325 nondeterministic states differed from a second render of the same head (a clock or fixture leak) and are not counted as changes. |
This comment has been minimized.
This comment has been minimized.
The agent pane does not load ui.css, so .ui-sr-only did nothing there and the native radio circles drew over the switch (in #20336 too, over the names). The switch hides its own radios, still focusable for keys and VoiceOver. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
cmux-next tour of The tour job failed before the tour ran (build or setup); the run log has the output. The tour produced no media. Tours are data in |
# Conflicts: # webviews/src/agent-session/acpmux/newtab/screen.css
A blind design judge (2026-10-14, 14-2) preferred the harness mark at the start of each recent-chat row: the eye runs down the left edge. The mark moves to the row's start; the age stays the last column, right aligned at its fixed 3.2em, so it never moves or resizes (Leo 10-13). CSS only, list rows only; cards are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cg-design-judge: every style in the New Tab switch shows a browser-default radio dot. StyleSwitch hides its inputs with ui.css's .ui-sr-only, which the agent pane never loads. With only the page's own stylesheet, each radio is static and auto-sized. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
StyleSwitch hid its radios with ui.css's .ui-sr-only, but the agent pane never loads ui.css, so every style name had a browser-default radio dot beside it (cg-design-judge). The page's own stylesheet now hides the inputs (.nt-style-input), as conversation.css does for its screen-reader text. Arrow keys, focus and the screen-reader names are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-variants # Conflicts: # webviews/src/agent-session/acpmux/newtab/StyleSwitch.tsx # webviews/src/agent-session/acpmux/newtab/screen.css
- cargo fmt in Native/OptChat/optchat-chief Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38570994528
…und dots (#20473) are the default look Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. |
Settings > Experimental > Labs > New Tab Style Switch (labs.newTabStyle): round dots (#20473, the default), dots that name a pick, chip dots, layout sketches or style names (#20336). Replaces the Debug Settings newTab.styleSwitch tunable, so release builds offer it too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Visual preview of 46577c6: in the maintainers' private review feed. |
…tab-style-variants # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+AgentPolicy.swift # Packages/macOS/CmuxNext/Sources/CmuxNextSettings/Schema/SettingsSchema+Labs.generated.swift # schemas/defaults/cmux-next.json # schemas/settings/source/labs.json
- regenerated schemas/defaults/cmux-next.json Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/38666409416
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lawrence 2026-10-14: no Labs registry or UI; opt-in looks are Debug Settings toggles until one earns real Settings. Drops labs.newTabStyle (schema row, parser, strings, exports) and adds the Debug Settings choice newTab.styleSwitch: round (#20473, the page's own look), hint, dots, strip, names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tab-style-variants # Conflicts: # schemas/defaults/cmux-next.json
…tab-style-variants
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. |
This comment has been minimized.
This comment has been minimized.
The names and round looks draw the name and get no title; only a dot or a sketch, which draw no text, does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps CmuxNextApp under its size cap: the Debug Settings choice newTab.styleSwitch and its looks move to AgentPaneTunables, and AgentPaneNewTab reads the override itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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)
Unclear: CI failed on
Not re-run automatically: Written by red: web / Web status; base red: the same failure on the base 262739c; does not block
Agents: |
[Low impact] The change reaches the New Tab style row and its developer-only choice. The PR appears safe to merge, with a non-blocking layout issue in the optional names look. Findings
SummaryAdds five Debug Settings looks for the New Tab style switch while keeping round dots as the default.
Reviews (1) · Last reviewed commit: "Merge feat-cmux-next into feat/newtab-st..." · Reviewed by Greptile |
| .nt-style-input{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;appearance:none;cursor:inherit} | ||
| .nt-style-mark{position:absolute;top:0;left:0;height:100%;box-sizing:border-box;border-radius:5px;background:color-mix(in srgb,var(--agent-accent,var(--agent-text)) 10%,transparent);pointer-events:none} | ||
| .nt-style-options[data-settled] .nt-style-mark{transition:transform var(--agent-motion-move,190ms) var(--agent-ease-out,ease-out),width var(--agent-motion-move,190ms) var(--agent-ease-out,ease-out)} | ||
| .nt-style-option{position:relative;padding:3px 8px;border-radius:5px;color:var(--acpmux-composer-dim);font-size:var(--text-detail);line-height:var(--text-detail--line-height);white-space:nowrap;cursor:default;transition:color var(--agent-motion-hover,80ms) var(--agent-ease-out,ease-out),background-color var(--agent-motion-hover,80ms) var(--agent-ease-out,ease-out)} |
There was a problem hiding this comment.
The names look keeps all five labels on one line, and they cannot shrink below their text widths. Panes can be 200px wide by default, so the row overflows and the outer page clips the last options. Add horizontal scrolling or a compact fallback when the names do not fit.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
|
owner: 01a15ba2-88c3-7b82-8348-60abe314258e |
Base added the Cards style (six styles, Cards first). The style switch spec now expects six radios with the new indexes, and the strip look gets a Cards sketch; Default's sketch follows its stage layout (composer at the foot). Tunables list keeps base's new entries and adds newTabStyleSwitch in order. Gallery keeps both pickThreads and base's holdsItsPlace. Agent-Session: live-reload-loop-dd (cosmic-gray 76d6c13f) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s with motion off AgentPaneTunables.swift grew past the god-file limits (419 lines, 9 types). newTabStyleSwitch and AgentPaneNewTabStyleSwitch move to AgentPaneTunables+NewTabStyleSwitch.swift, like +NewTabWidgets and +NewTabPicks; only the descriptor stays in all. .nt-style-flash started at opacity 0 and relied on a 1.1s forwards keyframe, so with data-cmux-motion=off (duration 0) the name never showed. Visible is now its base style, the fade-in is decoration on the motion variables, and StyleSwitch still removes it after PICKED_NAME_MS. Agent-Session: live-reload-loop-dd (cosmic-gray 76d6c13f) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Owned by an agent session · session |
|
Closing as stale. This branch is from 2026-10-14 and now conflicts with feat-cmux-next. Since then, base has reworked |






#20336 replaced the New Tab page's style dots with the five style names. #20473 then brought round dots back as the default. This PR keeps round dots as the default and adds every other look Leo compared as a Debug Settings choice, so a DEV or NIGHTLY build can show each one. There's no Labs row: opt-in looks go in Debug Settings until one earns a real setting (Lawrence 2026-10-14).
Hold for Leo (cg-ui-coord). Nothing changes for anyone who doesn't set the Debug Settings choice.
The looks
Debug Settings > Tabs > New tab style switch (
newTab.styleSwitch, DEV and NIGHTLY only). It applies to the next New Tab page. With nothing set, the page draws round dots, exactly as on base. From automation:app call debug.tunables {"action":"set","key":"newTab.styleSwitch","value":"hint"}.round(default, #20473)hintdotsstripnamesRound dots: point at each dot, then pick.
Full quality: clip-round-light.mp4
Hint: two picks, each name showing for a moment.
Full quality: clip-hint-light.mp4
Caveat on the captures: they come from a DEV build of an earlier head (3b533a1), when the looks were a Labs option. Two things differ from this head:
Look only at the style switch row in them.
Every look is the same radio group with the same behavior:
newTab.setTemplate(tabs.newTabTemplate, unchanged);The radio inputs fill their targets with opacity 0, so no native radio circle draws.
What changed
webviews/src/agent-session/acpmux/newtab/):StyleSwitch.tsxdraws the five looks.templates.tshasSTYLE_SWITCHESandDEFAULT_STYLE_SWITCH = "round".screen.cssscopes each look. The gallery has an entry per look.AgentPaneTunables.newTabStyleSwitch(with the enumAgentPaneNewTabStyleSwitch) is the Debug Settings choice.AgentPaneNewTabsends its override asstyleSwitch, or nothing when it isn't set. It lives with the agent pane so CmuxNextApp stays under its size cap.labs.newTabStyle) is gone.feat/newtab-rows-harness-first, for Leo on its own.Testing
Swift:
NewTabStyleSwitchTests.eachDebugStyleSwitchLookReachesTheNextNewTabsets each look through the tunable store and checks the next New Tab (NewTabPage.sparePage) sends it, and that nothing set sends nothing. Green on the fleet at this head (Swift suites, light). There's no valid red for it: its test-first commit (b5fc9ab) didn't build, because of an unrelatedCmuxConfigSnapshot.swiftstate the next base merge fixed. The web tests below did go red first.Web:
test/new-tab-style-switch.test.tsxcovers:newTab.setTemplate;It went red first (a0ff10a, 0 pass) and is green now.
tooltip-rules,ui-rulesandbun run checkpass locally (14 tests, 0 fail).Release compile on the fleet at this head.
scripts/cmux-next/check-app-size.sh: CmuxNextApp is at its base size.Changelog
none (Debug Settings only)
🤖 Generated with Claude Code
Agent session: cosmic-gray