Repository navigation
improve(ui): shrink the sidebar running ring on rows without an icon - #141383
Conversation
Rows with no icon, avatar, or owner chip drew the running ring at the full 24px glyph size, which read as an empty circle beside the label. The glyph renderer now marks a content-less glyph as bare, and the ring collapses to the 12px size the trailing spinner used to have, centered in the same lead slot so it lines up with neighboring avatars and unread dots. Rows with artwork keep the full ring around it. Release note: the Control UI sidebar draws a compact running ring on sessions that have no icon instead of a large empty circle.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. Reviewed September 7, 2026, 1:46 PM ET / 17:46 UTC. ClawSweeper reviewWhat this changesThe Control UI sidebar uses a smaller running ring for rows without artwork, with matching documentation and browser geometry assertions. Merge readiness✅ Ready for maintainer review This remains a useful, narrowly scoped visual improvement absent from current main. No actionable correctness or security defects were found, and the maintainer’s capture clarification resolves the previous proof follow-up. Priority: P3 Review scores
Verification
How this fits togetherThe Control UI sidebar combines session activity and artwork into a shared leading indicator. Its renderer and styles determine how running and queued sessions appear beside their titles. flowchart TD
A[Session activity] --> C[Shared sidebar indicator]
B[Row artwork] --> C
C --> D{Artwork present?}
D -->|Yes| E[Ring around artwork]
D -->|No| F[Compact centered ring]
Before mergeNone. Agent review detailsSecurityNone. PR surfaceSource +8, Tests +9, Docs 0. Total +17 across 4 files. View PR surface stats
Review metricsNone. Technical reviewBest possible solution: Keep compact bare rings in the shared renderer while preserving artwork rings, slot alignment, and existing activity semantics. Do we have a high-confidence way to reproduce the issue? Not applicable as a functional bug: this adjusts presentation, and current source confirms the larger ring used for artwork-free rows. Is this the best way to solve the issue? Yes. A shared modifier and CSS rule address all bare-ring callers without duplicating rendering logic or changing layout. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against c79ad267ba62. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (1 earlier review cycle)
|
|
Maintainer note on the two before-merge items: the before/after captures were produced on the mocked Control UI dev server (fixture sessions only, no real data) and inspected before upload. The review environment cannot fetch GitHub user-attachments, which is why they could not be verified there. The measurements in the Evidence section were taken from the same Playwright run that produced the images: every bare ring measures 12px after the change, every ring around artwork still measures 24px. |
The trailing-state check measured the gap between the running ring and the title, which the compact bare ring changes. Assert the new contract instead: a 12px ring centered in the 20px lead slot, with the title keeping its distance from the slot rather than from the ring.
|
Merged via squash.
|
…penclaw#141383) * improve(ui): shrink the sidebar running ring on rows without an icon Rows with no icon, avatar, or owner chip drew the running ring at the full 24px glyph size, which read as an empty circle beside the label. The glyph renderer now marks a content-less glyph as bare, and the ring collapses to the 12px size the trailing spinner used to have, centered in the same lead slot so it lines up with neighboring avatars and unread dots. Rows with artwork keep the full ring around it. Release note: the Control UI sidebar draws a compact running ring on sessions that have no icon instead of a large empty circle. * test(ui): pin the compact bare ring geometry in the sidebar e2e check The trailing-state check measured the gap between the running ring and the title, which the compact bare ring changes. Assert the new contract instead: a 12px ring centered in the 20px lead slot, with the title keeping its distance from the slot rather than from the ring.
Related: #141098
What Problem This Solves
Resolves a problem where sidebar sessions without an icon, avatar, or owner chip showed their running state as a large empty circle beside the label. #141098 moved the running ring onto each row's own glyph, and rows with nothing inside the ring inherited the full 24px glyph size, which reads as a missing icon rather than as progress.
Why This Change Was Made
The shared glyph renderer now marks a content-less glyph as bare, and one CSS rule shrinks that ring to the 12px size the old trailing spinner had, centered in the same 20px lead slot so it stays aligned with neighboring avatars and unread dots. Rows with artwork keep the full ring around it. All bare-ring callers (top-level sessions, child rows, and the Codex/Claude catalog rows) share the renderer, so they change together.
User Impact
Running sessions with no icon show a compact spinner in the icon column instead of an oversized empty ring. Rows with icons or avatars are unchanged.
Evidence
Mocked Control UI dev server, Playwright measuring every
.session-glyph__ringon the page: before the change every ring measured 24px; after it, bare rings measure 12px and rings around artwork still measure 24px. Captures below are fixture data from the mock scenario; the "before" is the same build with the new rule overridden back to the old inset, which is the only visual difference.Before:
After:
node scripts/check-changed.mjs: lint, format, typecheck, dead-export scans passed.chat-flow.sidebar-presentation.e2e.test.tsandsession-management.sidebar.e2e.test.ts: 15/15 passed.