cmux-next: Dots and Pictograms status glyph sets behind a debug switch (hq#1957)
Adds two alternative static status glyph sets to compete with #20410's set, which stays the default: Dots and Pictograms. You can switch between them in Debug Settings → Status icons, or with <StatusGlyph set=…> on the web. Stacked on #20410 (hq#1957 glyph thunderdome).
schemas/status-glyphs/static-status.jsonnow lists sets. Every set uses the same six states in the same order with the same tints, and the generator enforces this.- Swift
StaticStatusGlyph(state)?.plan(style:)and the webStatusGlyphrender any set. - Recommendation: Pictograms. Each state has its own outline (moon, hourglass, chat dots, padlock, check, warning triangle), so states read apart without color at 1x. Dots is the quietest set but the hardest to tell apart.
Contact sheet: all three sets × 6 states, light and dark, 1x and 2x, with sidebar rows.
In context
A tagged cmux NEXT dev build of this branch (3afe69cbf68), with a sidebar and a tab strip that show six states. Each terminal tab reports its state over OSC 7501: working, blocked with kind question (waiting), blocked with kind permission, done, and error. The idle tab sends no report. Idle draws no mark in any set, by design (StatusIconSet.plan). The sidebar has one workspace per state plus glyphs, which holds the six tabs, so every state shows on a row. Sets were switched with the status.iconSet tunable, the same switch as Debug Settings → Status icons. The theme was set in the app's own config (GitHub Light Default and GitHub Dark Default). The captures are 2x window snapshots (debug.window_snapshot), and the lower part of each set's image zooms them a further 2x. No 1x display was available.

Each set, light and dark, with zoomed detail






Recording
Tagged cmux NEXT dev builds, recorded with debug.window_record at real speed. In each clip the live sidebar row and the live tab cycle working → waiting → permission → done → error over OSC 7501, about 1.4 s apart. The other rows and tabs hold one state each. The set was switched with the status.iconSet tunable, the same switch as Debug Settings → Status icons.
Before: Static on the base, 2035f37a936.

After: Static on this PR's head, 3afe69cbf68. The glyphs match the base. With no tunable set, both builds show the same default (Symbols) marks, so the PR changes nothing by default. The sidebar order and one row's subtitle differ between the two clips; that comes from staging, not this PR, which doesn't touch the sidebar rows.

Static Pictograms:

Static Dots:

Full-quality mp4s: , , , .
Verification
- Swift
StaticStatusGlyphStyleTests: 4 tests pass. - Web
status-glyphs.test.ts(Chromium): 6 tests pass. - Typecheck, lint, format, the namespace lint, and the
check:status-glyphs, type-scale, system-blue and layers checks are clean. - Seen in a tagged cmux NEXT dev build (Retina captures above; tab states driven over OSC 7501, idle draws no mark by design).
Changelog
none (DEV/NIGHTLY debug switch; default unchanged)
🤖 Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Adds two alternative static status glyph sets—Dots and Pictograms—next to the existing Static set, switchable via Debug Settings → Status icons or <StatusGlyph set=…> on the web. The default status icon set stays Codex.
schemas/status-glyphs/static-status.jsondefines all three sets; the generator enforces their shared states, order, and tints.- Swift
StaticStatusGlyphand webStatusGlyphrender any set; CoreGraphics and browser tests hold each set to the same rules (six states apart by shape, crisp at 1x and 2x, never animated, theme-tinted). - Recommendation: Pictograms—each state has its own outline (moon, hourglass, chat dots, padlock, check, warning triangle) that reads without color; Dots is the quietest but the hardest to tell apart.
Agent session: cosmic-gray