Skip to content

Composer: the context ring reads as a gauge, never a spinner - #34502

Merged
teamleaderleo merged 9 commits into
feat-cmux-nextfrom
lane/context-ring-not-spinner
Nov 4, 2026
Merged

teamleaderleo merged 9 commits into
feat-cmux-nextfrom
lane/context-ring-not-spinner

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, 2026-11-03, on the composer's quiet row (5 Medium Options ⌄ ◔, the ring at about 68% used), reading the context ring as a loading spinner: "and why does it even take time to read settings? you know what things are. the read defaults/the 'not working in a project' thing that should all be instant".

The ring was a faint 30% track under a round-ended arc. At about 70% and above, the faint track all but disappears at 12 px and the round-ended arc reads as a spinner's. This PR keeps the ring (Claude desktop's look, 12 px glyph in its 22 px hit box, static) but draws the remaining share as a clearly visible track (50% of the arc's ink) and gives the arc flat ends, so the whole circle reads as one gauge with no gap. Never a pie; the ring still never animates.

Spec: leo-workspace design/composer.md (a rule is added there in a companion PR).

Variants (experiment context-ring-look, gallery agent-pane.context-ring, new variants gauge-25, gauge-68, gauge-95)

  • track (shipped): remaining share as a visible track at 0.5 opacity, flat arc ends.
  • arc (before): faint 0.3 track, round arc ends.
  • percent: the before ring plus a 68% caption in --text-caption beside it.
  • fill-quiet: thicker 2.75 stroke, flat ends, used share in --agent-text at 0.7 alpha.

Pick: track. It removes the two cues that make a static arc read as a spinner (a near-invisible track and rounded tails) while keeping Claude desktop's thin ring, size and colour. percent adds width to the quiet row and repeats the hover card's number; fill-quiet is heavier than the rest of the row's line glyphs.

Test

webviews/test/context-ring-gauge.test.tsx: at 25/68/95% the track's stroke-opacity is at least 0.5 and below the arc's, the arc has butt ends and the same radius as the track, nothing is filled, nothing animates; before usage the ring is the inert track alone.

Command: cmux-ci test -- bash -c 'cd webviews && bun install --frozen-lockfile >/dev/null && bun test test/context-ring-gauge.test.tsx && bun run check'

Observed / Not run

  • Observed: the command above, red and green as recorded; review subagent SHIP (follow-up applied: the looks table moved above ContextRing's doc comment). The Codex router-review at cc8f002 found that the new acpmux-context-ring-track/used classes matched composer-turn-cycle's [class*="-ring"] spinner probe. They are renamed acpmux-context-track/used/caption, and that test passes at f05d443.
  • Not run: gallery captures of the four arms (the gallery's compare view shows them; Leo tries the build); composer-row-one-gap and context-ring-parity (the ring's box and glyph sizes are unchanged; only stroke attributes changed in the shipped arm).

Changelog

  • Changed: The composer's context ring draws the unused share as a visible track, so it reads as a usage gauge instead of a loading spinner.

Agent session: agent session

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits November 4, 2026 01:16
Leo read the ring at 68% as a loading spinner. Pins a visible remaining-share
track and flat arc ends at 25/68/95%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-9435bc58cd1ad61a49df
…ck, never a spinner

Experiment context-ring-look (gallery agent-pane.context-ring, variants
gauge-25/68/95) compares track, arc (before), percent and fill-quiet; track ships.

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

cursor Bot commented Nov 4, 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:low Risk tier (docs/ci/risk-tiers.md) label Nov 4, 2026
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

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

Review f9588eb: 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=pr34502 -f ref=lane/context-ring-not-spinner -f platform=macos -f backend_mode=local

Gallery before/after for ef61283: 16 states rendered, 4 images differ, 2397 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 41802033761 -R manaflow-ai/cmux -n gallery-advisory-34502-ef61283f01f0cda7b15d9ac4c4f2c8111f3664b6 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.access-offer/turn-no-credits Apple System Colors Light unchanged 0% own styles.css
agent-pane.access-offer/turn-no-credits Apple System Colors unchanged 0% own styles.css
agent-pane.access-offer/turn-low-credits Apple System Colors Light unchanged 0% own styles.css
agent-pane.access-offer/turn-low-credits Apple System Colors unchanged 0% own styles.css
agent-pane.access-offer/turn-no-offer Apple System Colors Light unchanged 0% own styles.css
agent-pane.access-offer/turn-no-offer Apple System Colors unchanged 0% own styles.css
agent-pane.activity-line-looks/none Apple System Colors Light unchanged 0% own styles.css
agent-pane.activity-line-looks/none Apple System Colors unchanged 0% own styles.css
agent-pane.activity-line-looks/spinner Apple System Colors Light changed 0.0562% own styles.css
agent-pane.activity-line-looks/spinner Apple System Colors changed 0.0496% own styles.css
agent-pane.activity-line-looks/kind Apple System Colors changed 0.0268% own styles.css
agent-pane.activity-line-looks/kind Apple System Colors Light changed 0.0255% own styles.css
agent-pane.activity-line-looks/aligned Apple System Colors Light unchanged 0% own styles.css
agent-pane.activity-line-looks/aligned Apple System Colors unchanged 0% own styles.css
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/long-directory Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/long-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.add-project-panel/browse-error Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/browse-error Apple System Colors unchanged 0% own styles.css
agent-pane.all-chats-list/page-failed Apple System Colors Light unchanged 0% own styles.css
agent-pane.all-chats-list/page-failed Apple System Colors unchanged 0% own styles.css
agent-pane.all-chats-list/page-recovered Apple System Colors Light unchanged 0% own styles.css
agent-pane.all-chats-list/page-recovered Apple System Colors unchanged 0% own styles.css
agent-pane.all-chats-list/long-values Apple System Colors Light unchanged 0% own styles.css
agent-pane.all-chats-list/long-values Apple System Colors unchanged 0% own styles.css

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

Passes: CI passes on ef61283f01.

CI passes on ef61283f01 (run 41802034051 attempt 1).

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.

web and size checks: green

Shipped in:

@github-actions github-actions Bot added risk:normal Risk tier (docs/ci/risk-tiers.md) and removed risk:low Risk tier (docs/ci/risk-tiers.md) labels Nov 4, 2026
…ontextRing's doc

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

Copy link
Copy Markdown
Collaborator Author

Review (subagent opus-5.5 medium): SHIP at cc8f002

Visual verdict: the shipped arm changes only the ring's stroke attributes (track 0.3 to 0.5 opacity, flat arc ends). Its size, hit box and colour are unchanged. No captures attached.
Checked: the SVG geometry stays inside the 14-unit viewBox in every arm, and the dasharray and full-window case still hold. The 22/12 px box and glyph are unchanged, and the experiment passes registry validation. The test is red on base (opacity 0.3, round caps) and green on head (fleet runs 41753121253 and 41755413289).
Follow-ups: the percent arm's {percent}% caption is outside i18n; it only matters if that arm ships.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol xhigh, router-review): BLOCK at cc8f002

BLOCK at cc8f002

Visual verdict: no visible regression across the 16 supplied pairs; none captures the context ring.

  1. [P1] [blocking] ComposerPickers.tsx:1587: The new circle classes break the existing turn-cycle test. Its selector at line 99 matches [class*="-ring"] and exempts only the context wrapper and button, so both new circle classes count as unexpected spinners. The track exists even before usage, making all three width cases fail. Remove these unused classes or exempt the context ring’s descendants.

  2. [P2] [follow-up] ContextRing.gallery.tsx:130: Supply captures of the gauge variants; the provided screenshots cannot verify the PR’s intended visual change.

The test regression is confirmed from source; Bun and browser dependencies were unavailable for execution.

composer-turn-cycle counts any [class*="-ring"] in the quiet row besides the
context wrapper and button as a spinner; the new track/used/caption classes
matched it. Renamed to acpmux-context-track/used/caption.

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

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at f05d443

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at f05d443

Visual verdict: no images; Leo tries the build

  • [P2] [follow-up] [category:ux] [finding:F1] [outcome:pending] No after screenshots were provided for the new context-ring gallery variants (webviews/src/agent-session/acpmux/ContextRing.gallery.tsx:124); capture them for visual review.

Follow-ups:

  • F1: Provide after screenshots for the context-ring variants.

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves f05d443: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

…t-ring-not-spinner

# Conflicts:
#	webviews/src/experiments/registry.ts
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Webview verdict at adaac5d: its one "new" red, test/new-tab-live-resize.test.ts > webkit: the cards page follows a live resize, is red on base too. The whole webkit live-resize file is flaky on base; on the fleet, each test ran twice at this head and twice with this PR's webviews diff reverse-applied (run 41786391045):

test (webkit) head 1 head 2 base 1 base 2
cards page fail pass pass fail
default page pass fail fail fail
composer page fail pass fail fail
threads page fail pass fail pass

This PR changes only the context ring's look. Landing on the SHIPs at adaac5d (base merge of the reviewed f05d443).

@blacksmith-sh

blacksmith-sh Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Found 8 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpqmupdnd8/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpws5p798n/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
nightly cmux-tui resolve/nightly cmux-tui resolve View Logs
the short nightly decide gate must use the pooled Linux route with a Blacksmith fallbac
k/
the short nightly decide gate must use the pooled Linux route with a Blacksmith fallbac
k
View Logs

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

…t-ring-not-spinner

# Conflicts:
#	webviews/src/experiments/registry.ts
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, router-review): BLOCK at 357b2ed

BLOCK at 357b2ed

Visual verdict: All 16 supplied pairs reviewed; differences are limited to spinner animation phases. None shows the changed context ring.

  1. [P1] [blocking] [category:tests] [finding:F1] [outcome:pending] webviews/test/context-ring-gauge.test.tsx:84: This assertion fails at this head. ContextRing uses aria-disabled, so the button’s native .disabled remains false. Assert aria-disabled="true" and verify clicking cannot open the card; preserve right-click support. The reported green run predates the merges. Bun is unavailable here, so this finding is based on source inspection.

  2. [P2] [follow-up] [category:ux] [finding:F2] [outcome:pending] webviews/src/agent-session/acpmux/ContextRing.gallery.tsx:130: Supply light/dark captures of gauge-25, gauge-68, and gauge-95. The provided screenshots cannot establish whether the changed 12 px ring reads as a gauge.

Follow-ups:

  • Capture the context-ring variants described in finding F2.

Base's #34775 moved the empty ring from disabled to aria-disabled so its right-click
menu still opens. bun test test/context-ring-gauge.test.tsx: 5 pass.

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

Copy link
Copy Markdown
Collaborator Author

Finding outcome: comment-6625524849/F1 fixed f9588eb

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at f9588eb

Reviewer: codex gpt-6-astra high, fast tier.

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at f9588eb
Visual verdict: no images; Leo tries the build

Static review of the ring rendering, experiment wiring, gallery entry, and tests found no correctness or regression issues.

  • [P2] [follow-up] [category:ux] [finding:F1] [outcome:pending] webviews/src/agent-session/acpmux/ContextRing.gallery.tsx:119 has no rendered after screenshots available for independent visual verification of the new gauge variants.

Follow-ups: F1 — provide gallery captures for the changed context-ring variants.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Finding outcome: comment-6625788376/F1 filed-follow-up #35104

cmux-bot[bot]
cmux-bot Bot previously approved these changes Nov 4, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves f9588eb: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 4, 2026 08:46 Inactive
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, carried from f9588eb): SHIP at ef61283

Carried: ef61283 is cmux-bot's base merge of feat-cmux-next. git diff f9588eb ef61283f01f0cda7b15d9ac4c4f2c8111f3664b6 changes none of this PR's files. Original receipt: #34502 (comment)

@cmux-bot
cmux-bot Bot temporarily deployed to ci-routing-agent November 4, 2026 08:50 Inactive
@cmux-bot
cmux-bot Bot dismissed their stale review November 4, 2026 08:53

A newer verdict blocks ef61283 (no independent SHIP at the head).

@teamleaderleo
teamleaderleo merged commit 3f7349e into feat-cmux-next Nov 4, 2026
184 of 188 checks passed
@teamleaderleo
teamleaderleo deleted the lane/context-ring-not-spinner branch November 4, 2026 09:27

This branch was previously deployed

1 inactive deployment
ci-routing-agent — ef61283f Deployed Nov 4, 2026 by cmux-bot[bot] via wait for same-key tree publisher #110769
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