Skip to content

cmux NEXT: status dots are still; a guard fails on any breathing or blinking dot in a web stylesheet - #24057

Merged
teamleaderleo merged 7 commits into
feat-cmux-nextfrom
composer-look-still-dots
Oct 23, 2026
Merged

teamleaderleo merged 7 commits into
feat-cmux-nextfrom
composer-look-still-dots

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Leo: "let's get rid of the blinking dot asap", "we need to guarantee the breathing dot doesnt come back".

#23776 (merged) made the spinner the default working look again, and #23870 (open, owner alive) deletes the native and web breathing working look. Both leave alone the other web status dots that still breathe at default settings. #23870's body lists them as "a different feature". This PR makes those dots still and adds a guard over every shipped web stylesheet, so a breathing or blinking dot can't come back under any class name.

Still now (they breathed at default settings on base)

  • Floating chat: the header's streaming status dot (.acpmux-floating-status[data-status=streaming], acpmux-floating-breathe, webviews/src/agent-session/acpmux/styles.css:543). It is a still accent dot now.
  • Chief dock: the card's streaming status icon (.acpmux-chief-dock-status[data-status=streaming], same keyframes, styles.css:633). It is a still accent colour now.
  • Home ledger: the working state's dot and the avatar's working mark (.lg-state.working::before, .lg-state-mark.working), and a running run's mark (.lg-run-mark.running). These used lg-pulse in webviews/src/pages/home-channels/ledger.css:303-313, 1252-1256.
  • Settings > Accounts: the cmux account dot while a sign-in runs (.accounts-status[data-busy] .accounts-dot, accounts-busy, webviews/src/pages/settings/styles.css:926-935). The status words beside it ("Signing in…") still say it is busy, and aria-busy is unchanged.

The Static status indicators triangle for a floating chat that needs you is unchanged. The unused acpmux-floating-breathe keyframes are deleted, along with the Static and Reduce Motion rules that only stopped them. That includes the Chief dock status's dead animation:none in its Reduce Motion block.

The Inspector's running subagent avatars carry their status dot (.cv-subagent-avatar__dot, subagents.css:87-98). They breathed on this PR's original base (acpmux-chat-inspector-breathe), and this PR's second commit deleted that. Since then, #23995 (merged) replaced it on base with RUNNING-WAVE (ui/wave.css, cmux-wave): one opacity shimmer that sweeps across the running avatars. Static, Reduce Motion and the motion gate stop it. That is a newer, deliberate decision by another lane, so the guard lists it explicitly rather than this PR undoing it.

Guard

webviews/test/no-breathing-dots.test.ts is a static read, with no browser. It parses every stylesheet under webviews/src, except the never-loaded prototypes/. It reads:

  • rules nested in @media and in CSS nesting;
  • the animation shorthand and the animation-name / animation-iteration-count longhands, with or without -webkit-, with infinite in any case;
  • a repeat count (or a name-less infinite shorthand) set in a different rule, which counts for every rule whose subject has the same class.

It lists every animation that repeats forever and whose keyframes fade (opacity), blink (visibility) or pulse (scale).

Each loop it finds must be on an allowlist (file, keyframes, selector) that gives the reason it is not a status dot. Those reasons cover the mic's start wait, #23995's running wave, the Apps loading skeleton, the Cloud illustration, Home's "writing" word and the music level bars. Jump to latest's dots are listed under Left alone. The test also fails when an allowlist entry matches nothing, so the list can't quietly cover a new loop. Entries that another open PR removes or adds carry goneWith and may match nothing.

A synthetic stylesheet proves it catches a dot under any name, inside a media query, nested, with -webkit-, written INFINITE, by longhands, and with its repeat count in another rule. It also proves the guard ignores a spinner's rotation and a one-shot fade.

  • Red on base (test commit 6feda44f5fc1d8da8ae5de2612519ac4cccd1900, before the fix): 3 pass, 1 fail. no stylesheet fades, blinks or pulses a dot forever lists the 5 rules above.
  • Green on head 6cf03d272fac71bbe27010f5860f64edf223008d (feat-cmux-next brought in by a merge commit): 4 pass.
  • Green on feat-cmux-next + fix(agent status): keep spinner defaults and preserve dot options #23870's head 990280666b + this head, combined: 4 pass. static-status-loops.test.ts passes there too.
  • Command (huge-blue, from webviews/): bun test test/no-breathing-dots.test.ts

Also green on head:

  • CMUX_BROWSER_TESTS=1 bun test test/static-status-loops.test.ts test/running-wave-loops.test.ts: 11 pass.
  • bun test test/chat-inspector.test.tsx test/floating-chat.test.tsx src/pages/settings/accounts.test.tsx: 25 pass.
  • cmux-ci compile-check --ref 6cf03d272fac71bbe27010f5860f64edf223008d --app: passed (job 39abaa6c7ff32ca85d29b332).

Left alone (reported to the lane, not changed here)

Observed / Not run

  • Observed: the focused runs above on huge-blue, and vp fmt / vp check on the changed files.
  • Not run: the app itself.

No capture: webview-only change; the visible difference is motion, which a still gallery frame can't show.

Changelog

  • Fixed: The floating chat's and Chief dock's working dot, the Home ledger's working marks and the Settings account dot no longer fade in and out.

Leo-ask: ask-27caf770fa
Leo-ask: ask-f5fd37435f

Agent session: cosmic-gray

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits October 22, 2026 02:07
… forever

Reads every shipped webview stylesheet and lists each forever-repeating
animation that fades (opacity), blinks (visibility) or pulses (scale).
Each must be on an allowlist with the reason it is not a status dot.
Red on base: the floating chat and Chief dock streaming dots, the Home
ledger working marks and the Settings accounts busy dot still breathe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16027-99fc-73f0-9482-5a4babfe1b0a&host=cosmic-gray
… ledger and Settings accounts dots no longer breathe

The floating chat and Chief dock streaming status faded in and out
(acpmux-floating-breathe), the Home ledger working and running marks
pulsed (lg-pulse), and the Settings cmux account dot pulsed while a
sign-in ran (accounts-busy). Each is now a still dot in its state colour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16027-99fc-73f0-9482-5a4babfe1b0a&host=cosmic-gray
@cursor

cursor Bot commented Oct 22, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 22, 2026
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 101c11f: 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=pr24057 -f ref=composer-look-still-dots -f platform=macos -f backend_mode=local

Gallery before/after for 101c11f: 16 states rendered, 1 images differ, 1157 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 39821535688 -R manaflow-ai/cmux -n gallery-advisory-24057-101c11f66e4f860f7902eb79d2da3d72f9fe4dad (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.add-project-panel/environment Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/environment Apple System Colors unchanged 0% own styles.css
agent-pane.add-project-panel/sources Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/sources Apple System Colors unchanged 0% own styles.css
agent-pane.add-project-panel/directory Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/directory Apple System Colors unchanged 0% own styles.css
agent-pane.add-project-panel/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/closed Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/closed Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/open Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/open Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/toolbar Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/toolbar Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/commit-form Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/commit-form Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/include-new Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/include-new Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/busy Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/busy Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/push-refused Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/push-refused Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/closed Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-options-menu/closed Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/open Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-options-menu/open Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/keyboard Apple System Colors Light changed 0% own styles.css
agent-pane.changes-options-menu/keyboard Apple System Colors unchanged 0% own styles.css

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 101c11f66e (run 39821535911 attempt 1): 1 code, 1 unknown.

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

Failures:

  • seen on other PRs agent-pane-older-rows-fade.test.ts rows of an older page fade in once as they come into view; opened and live rows do not: failed (job)
  • seen on other PRs agent-pane-older-rows-fade.test.ts Reduce Motion draws rows of an older page in full ink at once: failed (job)
  • seen on other PRs lit-glyph-css.test.ts a lit control's ink is the lit glyph, not the raw accent: failed (job)
Matched log lines
web / react-apps-check (2): (fail) rows of an older page fade in once as they come into view; opened and live rows do not [6112.42ms]

Not re-run automatically: web / react-apps-check (2), 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 44fc3d3 to compare; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base 44fc3d3; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on 44fc3d3 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (2); no finished base run on 44fc3d3 to compare; do not merge until green; see lane-rules

Tour of 101c11f66e (run): no media. The tour did not run: only webview code changed (4 path(s)), which the gallery advisory run checks in Linux Chromium on the pull request (its artifact holds any captures); add the media-tour-mac label, then re-add media-tour, to tour it on a Mac.

@blacksmith-sh

blacksmith-sh Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Found 19 test failures on Blacksmith runners:

Failures

Test View Logs
---/--- View Logs
---/--- View Logs
/tmp/tmprsvl4ok4/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpt5jtgqnr/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
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test/agent-pane-older-rows-fade.test.ts/agent-pane-older-rows-fade.test View Logs

...and 9 more test failures. View all on Blacksmith: run 39821535911, run 39821536093, run 39821535815

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

@teamleaderleo

teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by land-stuck on cmux16

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-i0gc1 created for this PR by the cmux coordinator.

teamleaderleo and others added 3 commits October 22, 2026 03:37
…he dots guard catches -webkit-, any-case infinite and a repeat count set in another rule

The running avatar carries its status dot, so its breathe was a breathing
dot: removed, and its allowlist entry with it. The Apps skeleton entry is
marked as going with #23870 (which renames it), so base + #23870 + this
passes. Drops the dead Reduce Motion rule for the Chief dock status.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16027-99fc-73f0-9482-5a4babfe1b0a&host=cosmic-gray
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol): SHIP at 6cf03d2

No blocking findings.

Non-blocking finding: no-breathing-dots.test.ts is a lexical guard and does not resolve CSS variables used as animation names or repeat counts, nor animation declarations applied through selectors without classes. A future dot written through those forms could evade this check even though the current 111 shipped stylesheets are covered and all eight detected loops match the allowlist.

Checked the exact merge-base diff and whole changed files, enumerated all shipped webview CSS from the fetched commit, exercised the guard’s synthetic cases and current allowlist, and did not build the macOS app or run native suites.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol): SHIP at d9c3bf9

No blocking findings.

Non-blocking findings: none.

Checked the merge result against both parents, verified the delta since 6cf03d2 is only the clean base merge plus the intended four-file change, audited the status-dot CSS and stylesheet guard, and ran the focused no-breathing-dots Bun test from an archived PR tree.

@teamleaderleo teamleaderleo added the ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds label Oct 22, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / nightly-guards / workflow-guard-tests / release-notary is red on 18 of 18 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Checks job structure is red on 16 of 18 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › No fleet host names in gallery fixtures is red on 16 of 18 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › No new SwiftUI (macOS UI is AppKit) is red on 16 of 18 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo
teamleaderleo merged commit 13013eb into feat-cmux-next Oct 23, 2026
@teamleaderleo
teamleaderleo deleted the composer-look-still-dots branch October 23, 2026 00:15
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-land Reviewed at this head; next-autoland merges it into feat-cmux-next when its only reds are base reds risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant