Skip to content

cmux-next: the sidebar row's status marks are crisp, badge-tall and on the title's line (cx-b8idn) - #20320

Merged
teamleaderleo merged 8 commits into
feat-cmux-nextfrom
op-next-icons/row-status-glyph
Oct 14, 2026
Merged

teamleaderleo merged 8 commits into
feat-cmux-nextfrom
op-next-icons/row-status-glyph

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 13, 2026 •

Copy link
Copy Markdown
Collaborator

Leo's sidebar (cmux NEXT, macOS 27.0.1): the green done check and the gray working mark on a workspace row were tiny, blurry and sat low next to the "1" unread badge.

Why:

  • Blurry. StatusMarkArt took the SF Symbol's cgImage(forProposedRect: nil), a 2x bitmap, and resampled it into the mask.
  • Low. The mark's box was centered on the row, not on the title's capitals. Inside that box the symbol's ink sat a quarter point low, because its box carries baseline room.
  • Small next to the badge. The mark and the badge had separate sizes.

Fix:

  • The mark is drawn at its exact pixel size, so it stays vector-crisp.
  • The symbol's ink, not its box, is centered vertically, by whole pixels. Across, the symbol keeps its own side bearings.
  • The row's status mark is centered on the title's cap height and snapped to the backing pixel grid (WorkspaceRowView+StatusGlyph.swift).
  • The mark is as tall as the badge: SidebarStyle.statusGlyphSize is badgeHeight. After CmuxNext: sidebar rows tile so hover moves row to row with no flicker #20315 (op-next-theme), both read one token, Metrics.statusMarkSize (10 pt). To make both bigger, change that one token.
  • Colors still come from the theme's status tints.

Test

scripts/cmux-next/sidebar-status-glyph-live.py --tag <tag> attaches to a running tagged app. It makes two workspaces whose programs report done (left unseen) and working over OSC 7501. It then reads a new status_glyphs field on debug.sidebar_rows (measured in CmuxNextSidebar, SidebarView.debugStatusGlyphs()), which reports each mark's mask at 1x and 2x, its drawn box, the badge height and the title's cap center. For the mark on each named row it checks:

  • the mask is crisp at 1x and 2x. The measure is partly covered pixels per solid one: at most 1.5 at 1x and 0.6 at 2x. A resampled 10 pt mark measured 7 to 12 at 1x and 1.3 to 1.5 at 2x.
  • the box is as tall as the badge (0.5 pt), and the drawn mark fills at least 75% of it;
  • the drawn mark is centered on the title's cap height, within 0.25 pt at 2x.

Run against a tagged DEV build on macOS 27.0.1 (Xcode 26.6) with Leo's compact density:

Review notes (two review passes, no blockers):

  • The agent mark keeps the indicator size beside the title.
  • The status frame snaps x as well as y.
  • The reporter lives outside CmuxNextApp, to stay under its size cap.
  • The live check matches marks by their workspace's title.

Known gap: on compact rows that also show a subtitle, the status mark follows the title line while the badge stays on the row's center. op-next-theme owns the badge and has been told.

The live check ran on macOS 27 only. macOS 26 was not run.

Changelog

Fixed: The sidebar's done and working marks are crisp, as tall as the unread badge, and centered on the workspace name.

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits October 13, 2026 16:02
… title's line (red)

debug.sidebar_rows now reports each visible status glyph: its box, the
box its mark draws (from the mark's mask), how soft that mask is at 1x
and 2x, its row title's cap-height center and the badge.
sidebar-status-glyph-live.py reports an agent working and then done in
a running tagged app and checks each mark. On base the SF Symbol mark
is rendered at 2x and resampled into the mask (soft 0.80 at 2x), the
glyph box is 12 pt next to a 16 pt badge, and it sits on the row's box
center rather than the title's capitals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…and on the title's line

Leo 2026-10-13 (cosmic-gray): the green done check and the working mark
read tiny, blurry and low beside the "1" badge. StatusMarkArt now renders
an SF Symbol mark at the whole-pixel size it fills and draws it 1:1; it
was rendered at the screen's scale and resampled into the mask. The row's
status mark (the shared indicator, or the agent mark in its place) is as
tall as the unread badge and centered on the middle of the title's
capitals, on the pixel grid, instead of a 10 pt box on the row's center.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: c7ff8126-6f38-402b-8e7f-c363c2607f46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

all web/size checks green

@github-actions

github-actions Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Not verified: macOS jobs did not run: compile and app tests were skipped on b9b2bb7dc9; ci-status is green without them.

CI passes on b9b2bb7dc9 (run 38488257673 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

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.

teamleaderleo and others added 6 commits October 13, 2026 16:18
…phs by row

The beside-title agent mark keeps its 10 pt image; only the mark standing in
for the status takes the badge height. The status frame snaps x as well as y.
The live check matches each mark by its workspace's title and allows half a
point at 1x, where the pixel snap alone can move it that far.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The status-glyph reporter moves out of CmuxNextApp (size cap) into
CmuxNextSidebar as SidebarView.debugStatusGlyphs(), which reads the row's
title, badge and SidebarStyle.badgeHeight directly; debug.sidebar_rows keeps
a short JSON adapter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/SidebarStyle.swift
At the shared 10 pt status size the SF Symbol's box put its ink a quarter
point low. The mark's ink is centered in whole pixels so it stays crisp.
The live check's softness bounds now cover a 10 pt mark drawn at its pixel
size, still far below a resampled one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Across, the symbol's box keeps its side bearings (the raised hand and the
question bubble are drawn off-center on purpose).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo merged commit ee58089 into feat-cmux-next Oct 14, 2026
91 of 92 checks passed
@teamleaderleo
teamleaderleo deleted the op-next-icons/row-status-glyph branch October 14, 2026 00:15
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Batch queue: dropped from this batch, conflict.

  • Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/SidebarStyle.swift: both sides changed it

Next: merge feat-cmux-next, resolve, push.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant