Skip to content

cmux NEXT model picker: compact like Claude Code's menu (as wide as its rows), one tab per harness pinned - #30194

Merged
teamleaderleo merged 9 commits into
feat-cmux-nextfrom
lane/nx-picker-compact-one-tab-per-harness
Nov 1, 2026
Merged

teamleaderleo merged 9 commits into
feat-cmux-nextfrom
lane/nx-picker-compact-one-tab-per-harness

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-01: "i also don't like the way this composer has so much space between stuff surely we can get more compact horizontally" / "see claude code has that" / "we have too many harnesses because you didn't put those things into accounts or whatever"

Spec: design/model-picker.md (checklist 1 and new 21, teamleaderleo/leo-workspace PR on lane/design-model-picker-compact).

What changes

  1. Compact width. The symbols-row menu was a fixed 480px (.acpmux-quick-railed, from fix(next): size model picker to available content #26615), and its width probe measured every model of every harness, Legacy lists included. So the keys and the effort sat far from short names like "Opus 5.5".
    • Now the menu is as wide as the open tab's rows (fit), as Claude Code's menu is. The probe leaves out Legacy models and adds the star and ⌘N columns.
    • The effort column is 88px (a level's name and chevron) instead of 112px.
    • While open, the menu keeps its widest width (a ResizeObserver on the popup, made and disconnected with the rail's ref), so a tab switch never narrows it or moves the rail (Fix the combined model picker's harness list and sizing #25796's test still passes).
  2. One tab per harness. Base already folds routes since cmux NEXT model picker: one tab per model family; transports and logins are Account routes #29770 (00:03Z, before Leo's 05:05Z message): every entry that draws the Claude mark (Claude Code, claude-sr2, a work login, the SR route) is one Claude tab, and Codex with its app server and SR route is one OpenAI tab. Each route is a radio in that tab's Account submenu, above the logins, so every route stays reachable. Leo's screenshot (nine tabs; Account showing only "CLI login") matches a build from before cmux NEXT model picker: one tab per model family; transports and logins are Account routes #29770.
    • This PR adds a gallery fixture shaped like his rail and a test that pins the fold: routes-one-tab, routes-account, and "one tab per harness: Claude and Codex routes are Account choices, never tabs".

Gallery (new-tab.quick-model-menu): 4 versions, fit picked

version width in the fixture
width-fit (picked; closest to Claude Code's) 323px
width-stable (every tab's rows) 391px
width-snug (tighter columns, 360px cap) 360px
width-wide (before) 480px

Before (width-wide, dark) and after (width-fit, dark and light):


Leo's rail, eight entries folded into four tabs, and its Account submenu with the routes:

Viewed after image: yes. Visual verdict: SHIP. The fit menu reads like Claude Code's: effort, star and ⌘N sit right after the names, with no empty band, and one mark per harness.

Tests

quick-model-menu-layout: 22 pass, including the two new ones and "harness controls keep their position while each direction follows visible content". model-menu-compact, QuickModelMenu and model-menu-started-chat-fork: 105 pass. vp fmt and vp lint are clean.

Risk

Small: the compact menu's CSS width and its width probe, plus one ResizeObserver whose cleanup is the rail's ref callback (it disconnects when the rail unmounts or the menu closes).

Agent session: agent session

🤖 Generated with Claude Code

… close to the name; gallery widths and Leo's routes rail

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

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

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

Review dca8c99: 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=pr30194 -f ref=lane/nx-picker-compact-one-tab-per-harness -f platform=macos -f backend_mode=local

Gallery before/after for dca8c99: 16 states rendered, 16 images differ, 1535 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 41318157754 -R manaflow-ai/cmux -n gallery-advisory-30194-dca8c999acab2e702ed5e7644750507ec4450c98 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.composer-pickers/closed Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/closed Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/pill-rail Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/pill-rail Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/model-menu Apple System Colors Light changed 1.01% own QuickModelMenu.tsx
agent-pane.composer-pickers/model-menu Apple System Colors changed 0.989% own QuickModelMenu.tsx
agent-pane.composer-pickers/model-more Apple System Colors Light changed 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/model-more Apple System Colors changed 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/model-focus Apple System Colors Light changed 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/model-focus Apple System Colors changed 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/model-press-drag-release Apple System Colors Light changed 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/model-press-drag-release Apple System Colors changed 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/effort-menu Apple System Colors Light changed 3.62% own QuickModelMenu.tsx
agent-pane.composer-pickers/effort-menu Apple System Colors changed 3.62% own QuickModelMenu.tsx
agent-pane.composer-pickers/effort-focus Apple System Colors Light changed 0% own QuickModelMenu.tsx
agent-pane.composer-pickers/effort-focus Apple System Colors changed 0% own QuickModelMenu.tsx
agent-pane.composer-row/claude-auto Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/claude-auto Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/grid-running Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/grid-running Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/grid-draft Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/grid-draft Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/long-model Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/long-model Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/leo-report Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/leo-report Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/granted Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/granted Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/fast-off Apple System Colors Light changed 4.12% own QuickModelMenu.tsx
agent-pane.composer-row/fast-off Apple System Colors changed 3.99% own QuickModelMenu.tsx
agent-pane.composer-row/fast-on Apple System Colors Light changed 4.12% own QuickModelMenu.tsx
agent-pane.composer-row/fast-on Apple System Colors changed 3.99% own QuickModelMenu.tsx

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

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards.

CI failed on dca8c999ac (run 41318158195 attempt 1): 1 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (6) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs new-tab-typing.test.ts shell typing and the normal prompt keep Markdown punctuation literal: failed (job)
Matched log lines
web / react-apps-base-check (6): (fail) shell typing and the normal prompt keep Markdown punctuation literal [592.53ms]

Not re-run automatically: web / react-apps-base-check (6), 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); no finished base run on cefc64e to compare; do not merge until green; see lane-rules

Shipped in:

@blacksmith-sh

blacksmith-sh Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Found 9 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmprkj7udf9/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpz0nyirtb/summary-fail.json (live):/summary-fail.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
test/new-tab-typing.test.ts/new-tab-typing.test View Logs
test/new-tab-typing.test.ts/new-tab-typing.test View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

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

… stable to every tab

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3cf6bed67d0bb92a21bd
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3cf6bed67d0bb92a21bd
@teamleaderleo teamleaderleo changed the title cmux NEXT model picker: compact width (effort and ⌘N close to the name), one tab per harness cmux NEXT model picker: compact like Claude Code's menu (as wide as its rows), one tab per harness pinned Nov 1, 2026
@teamleaderleo
teamleaderleo marked this pull request as ready for review November 1, 2026 14:49
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

The full review at 8169d24 was a SHIP. The ResizeObserver lifecycle is correct: it disconnects on unmount, the next open gets a fresh node, and it cannot loop. wide keeps the old behaviour exactly, and specificity is correct. The delta dca8c99 caps the held min-width at min(Wpx, var(--available-width, ...)), which is valid inline, inherits from Base UI's positioner, and keeps the observer's early return. At this head, quick-model-menu-layout passes 22 tests and the model-menu unit suites pass 105; fmt and lint are clean.

Follow-ups:

  • no browser test narrows the pane while the menu is open (the held-width cap)
  • the probe assumes a 16px key slot; at a larger interface scale the menu may come out slightly narrower than its rows (cosmetic)

@teamleaderleo
teamleaderleo merged commit eb08adc into feat-cmux-next Nov 1, 2026
164 of 174 checks passed
@teamleaderleo
teamleaderleo deleted the lane/nx-picker-compact-one-tab-per-harness branch November 1, 2026 15:24
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…eed run

Base 762fda7 (after #30652 and #30194) adds center-line violations to the folded-run,
queued-from-agent, hover-fade and incoming-message states; the base replay cannot excuse them
until base has the checker, so they join the baseline rows from gallery-health run 41322226213.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-e1bbe8a486fbacd68f4a
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…#31124)

In the compact fit menu (#30194) a short searched row's middle falls on its
effort item, which sits over the row and takes the click, so react-apps-check
shard (7) timed out clicking 'Sonnet 5.5'.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-25f47763ee5347118457

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…30256)

* gallery health: gate layout shift on load and every play step (element boxes per frame)

WIP: baseline seeded in a following commit.

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

* gallery: shift scenarios play Codex folds and the debug load_seed history; document the shift gate

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

* gallery health: check the design specs' geometry rules from the DOM of every state

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

* gallery-matrix: write shift rows from the worst seeding run

A state that shifts in some runs got a 0 row when rows were written from the
least run, and would then fail unrelated PRs on its flaky runs. Review
follow-ups 2 and 3 on #30250.

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

* gallery: older-history waits on a boolean (typecheck)

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

* gallery-matrix: seed shift-baseline.json from two gallery-health runs

Rows from the worst of #30250's two full gallery-health runs (0ac1691 and
a17daa5): 2763 states, 561 with a non-zero row. A state at 0 now fails on
any shift; the rest fail past their row by a quarter.

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

* gallery: a wait step never fails a play; gallery health scores its shift

The webview suite found that measuring waitFor as a step made existing plays fail
on what they wait for: the header PR button arriving (header-tools), the mention
list opening (composer-mention), the composer controls settling
(narrow-layouts). A wait now goes unjudged in judgeStep, for shift, anchor moves,
long frames and settle. Its shift is still measured and scored against the
state's row in gallery health's shift baseline.

Test: bun test test/gallery-shift.test.ts. The new case fails on the previous
head and passes here.

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

* gallery: say a wait step still gets the popup-layer check

Review follow-up on #30250.

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

* gallery: smooth zero-row shift limit, copy-proof violation keys, listboxes only in popups

Three review follow-ups on #30256, fixed before the geometry baseline is seeded so
its keys do not bake them in:
- Every shift row's limit now adds LIMIT_SLACK (0.0005), a 0 row's included. A 0
  row was ten times stricter than a tiny row, at the level where frame timing
  alone scores.
- Violation keys use the row id, data-id, data-value, value or aria-label before
  an element's text, so a copy-only PR does not rename a listed violation. Plain
  generated ids are never used.
- A listbox counts as a menu only inside a popover or dialog, so pane-wide list
  panels do not trip menu-fit.

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

* gallery-matrix: reseed shift rows from three runs, seed geometry rows

Shift rows are rebuilt from the worst of three full gallery-health runs: the two
on #30250 and this PR's run at 92c5bb5 on base 593b25f. That gives 2843
states, 608 of them non-zero. Base moved after the first seed, and one flaky
state, model-picker#quick-search-field-opencode (0.0024 to 0.0081 across renders),
came out as this PR's own red. Geometry rows come from that run: 2841 states, 345
with listed violations.

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

* Gallery geometry baseline: add the violations base gained since the seed run

Base 762fda7 (after #30652 and #30194) adds center-line violations to the folded-run,
queued-from-agent, hover-fade and incoming-message states; the base replay cannot excuse them
until base has the checker, so they join the baseline rows from gallery-health run 41322226213.

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

* Shift baseline: motion.sync-list#inserts-from-second-client row 0.0059

The insert from a second client animates the list rows into place; three seed runs scored 0, gallery-health
run 41327725064 scored 0.0059 on the Replay click. A real insert moves rows, so its row is that run's score.

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

* Gallery baselines: seed shift rows from the worst of five full runs

Full renders (this PR changes scripts/gallery-matrix) kept turning up states that shift in some runs and in
every attempt of that run (guest-page.waiting#decided, artifact-panel#svg, settings-menus#customized), so
three seed runs were not enough. Shift rows are rebuilt from scratch as the worst score of the three seed runs
plus gallery-health runs 41322226213 and 41335560293; geometry rows gain the 3 keys the last run saw.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…ays) (#30265)

* gallery health: gate layout shift on load and every play step (element boxes per frame)

WIP: baseline seeded in a following commit.

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

* gallery: shift scenarios play Codex folds and the debug load_seed history; document the shift gate

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

* gallery health: check the design specs' geometry rules from the DOM of every state

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

* gallery: real-shaped recorded Claude and Codex chats (anonymized replays)

Leo, 2026-11-01: "how about like the apparatuses for improving ui verification? let's examine what we can do better for our workflows".

anonymize-recording.ts turns an acpmux session recording into a fixture with
none of its words (same lengths, line breaks and punctuation; fake ids, fixed
epoch). agent-pane.recorded-chats replays the #30176 Claude turn and a real
Codex turn steered by agent inbox messages through the pane's own client, so
gallery health's shift and geometry checks see real-shaped chats.

Tests: bun test test/gallery-anonymize-recording.test.ts (2 pass).

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

* gallery-matrix: write shift rows from the worst seeding run

A state that shifts in some runs got a 0 row when rows were written from the
least run, and would then fail unrelated PRs on its flaky runs. Review
follow-ups 2 and 3 on #30250.

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

* gallery: older-history waits on a boolean (typecheck)

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

* gallery-matrix: seed shift-baseline.json from two gallery-health runs

Rows from the worst of #30250's two full gallery-health runs (0ac1691 and
a17daa5): 2763 states, 561 with a non-zero row. A state at 0 now fails on
any shift; the rest fail past their row by a quarter.

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

* gallery: a wait step never fails a play; gallery health scores its shift

The webview suite found that measuring waitFor as a step made existing plays fail
on what they wait for: the header PR button arriving (header-tools), the mention
list opening (composer-mention), the composer controls settling
(narrow-layouts). A wait now goes unjudged in judgeStep, for shift, anchor moves,
long frames and settle. Its shift is still measured and scored against the
state's row in gallery health's shift baseline.

Test: bun test test/gallery-shift.test.ts. The new case fails on the previous
head and passes here.

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

* gallery: say a wait step still gets the popup-layer check

Review follow-up on #30250.

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

* gallery: smooth zero-row shift limit, copy-proof violation keys, listboxes only in popups

Three review follow-ups on #30256, fixed before the geometry baseline is seeded so
its keys do not bake them in:
- Every shift row's limit now adds LIMIT_SLACK (0.0005), a 0 row's included. A 0
  row was ten times stricter than a tiny row, at the level where frame timing
  alone scores.
- Violation keys use the row id, data-id, data-value, value or aria-label before
  an element's text, so a copy-only PR does not rename a listed violation. Plain
  generated ids are never used.
- A listbox counts as a menu only inside a popover or dialog, so pane-wide list
  panels do not trip menu-fit.

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

* gallery-matrix: reseed shift rows from three runs, seed geometry rows

Shift rows are rebuilt from the worst of three full gallery-health runs: the two
on #30250 and this PR's run at 92c5bb5 on base 593b25f. That gives 2843
states, 608 of them non-zero. Base moved after the first seed, and one flaky
state, model-picker#quick-search-field-opencode (0.0024 to 0.0081 across renders),
came out as this PR's own red. Geometry rows come from that run: 2841 states, 345
with listed violations.

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

* Gallery geometry baseline: add the violations base gained since the seed run

Base 762fda7 (after #30652 and #30194) adds center-line violations to the folded-run,
queued-from-agent, hover-fade and incoming-message states; the base replay cannot excuse them
until base has the checker, so they join the baseline rows from gallery-health run 41322226213.

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

* Shift baseline: motion.sync-list#inserts-from-second-client row 0.0059

The insert from a second client animates the list rows into place; three seed runs scored 0, gallery-health
run 41327725064 scored 0.0059 on the Replay click. A real insert moves rows, so its row is that run's score.

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

* Gallery baselines: seed shift rows from the worst of five full runs

Full renders (this PR changes scripts/gallery-matrix) kept turning up states that shift in some runs and in
every attempt of that run (guest-page.waiting#decided, artifact-panel#svg, settings-menus#customized), so
three seed runs were not enough. Shift rows are rebuilt from scratch as the worst score of the three seed runs
plus gallery-health runs 41322226213 and 41335560293; geometry rows gain the 3 keys the last run saw.

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

* anonymize-recording: keep each event's kind in its typed output

The scrubbed rest is typed through Omit of an index-signature type, which drops the required kind, so the
merge with base failed the webviews type check (TS2741). The kind is a protocol word the scrubber keeps;
set it from the event.

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

---------

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

This branch was previously deployed

3 inactive (2 outdated) deployments
ci-routing-agent — dca8c999 Deployed Nov 1, 2026 by teamleaderleo via cmux-tui tree preflight #96609
artifacts — d351ad2a Deployed Nov 1, 2026 by teamleaderleo via publish to R2 #96379
sentry-dsyms — d351ad2a Deployed Nov 1, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #96379
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant