You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(desktop): make the running-session indicator clearly in-progress — the blue status dot pulse is too subtle #5519
While a session turn is executing, the sidebar row does animate today — the shared blue (accent) StatusDot pulses with isPulsing: true. But the pulse is too weak to read as "in progress":
The animation is a plain opacity breathe — keyframes opacity: 1 → 0.5 → 1, ease-in-out, animation-duration: 2s, infinite (@astryxdesign/coreastryx.css).
It runs on an 8px dot, so a 2-second 50%-opacity fade is easy to miss — especially in peripheral vision, which is where the sidebar is when the user is watching the conversation.
The result is that "running" and "settled" look like the same blue dot, so the user cannot tell them apart at a glance.
Worse, when motion is reduced there is no cue at all: prefers-reduced-motion sets animation-name: none on the dot, leaving the running row visually identical to a finished one.
Where this lives:
packages/ui/src/session-history-list.tsx — sessionRowSignals() pushes { variant: dotForStatus('active'), isPulsing: true, ... } when the session is responding, and the row draws exactly one StatusDot.
packages/ui/src/status-vocabulary.ts — active → 'accent' (blue).
"Running" should be unmistakable at a glance — e.g. a spinner / clearly animated working mark on the running row, distinct from the resting accent dot that is shown once the turn has settled. And because the pulse is the only cue today, there should also be a non-motion fallback (an icon or label), so a running session is still recognisable with reduced motion enabled.
Alternatives or workarounds
Today the workaround is to hover the row or open the session to check whether it is still working. Making the existing pulse stronger/brighter is possible, but a spinner (or an icon + label) is the more conventional and unambiguous affordance, and it also covers the reduced-motion case. A Spinner component already exists and is used in packages/ui/src/chat-turn.tsx (compaction / "working" cues).
Additional context
@astryxdesign/coreStatusDot is a fixed 8px dot, supports isPulsing but has no spinner variant, so the stronger "working" affordance has to come from the surface rather than the dot itself.
changed the title [-]bug(desktop): running session still reads as the static blue status dot — no loading indicator while the turn executes[/-][+]feat(desktop): show a loading indicator while a session is running, instead of the static blue status dot[/+]on Sep 20, 2026
changed the title [-]feat(desktop): show a loading indicator while a session is running, instead of the static blue status dot[/-][+]feat(desktop): make the running-session indicator clearly in-progress — the blue status dot pulse is too subtle[/+]on Sep 20, 2026
Closing this as resolved by #5612 (b004473ed, merged 2026-09-23), which I verified against current main today.
What that PR shipped covers everything this issue asked for, on the exact surfaces named here:
The sidebar row no longer draws a pulsing 8px dot while responding (isPulsing has zero hits left in session-history-list.tsx); sessionRowSignals() now emits { running: true, ... } and the row renders RunningIndicator (packages/ui/src/running-indicator.tsx) — a Spinner size="sm" from @astryxdesign/core — in place of the resting StatusDot.
The reduced-motion case is handled: the Spinner decelerates to 3s/turn instead of freezing (patch note: "a frozen spinner reads as broken"), the arc stays visible statically, and a visually-hidden "Responding" label backs it up — so the running row is identifiable with motion reduced, which was the second ask.
The same replacement landed in three places (sidebar rows, goal context layer, subagent rows), and regression tests pin the visually-hidden label in session-history-list.test — stronger than the "stronger pulse" workaround this issue proposed, and it reuses the existing component rather than inventing one.
I had this issue claimed for an implementation; on inspection there is no delta left to build — an implementation PR would duplicate #5612 line for line. Releasing the claim and closing. #5265 and the remaining edit-and-resend slice of #5109 are still tracked separately.
Activity
[-]bug(desktop): running session still reads as the static blue status dot — no loading indicator while the turn executes[/-][+]feat(desktop): show a loading indicator while a session is running, instead of the static blue status dot[/+][-]feat(desktop): show a loading indicator while a session is running, instead of the static blue status dot[/-][+]feat(desktop): make the running-session indicator clearly in-progress — the blue status dot pulse is too subtle[/+]ggbdpq commentedon Sep 20, 2026
take
ggbdpq commentedon Oct 18, 2026
Closing this as resolved by #5612 (
b004473ed, merged 2026-09-23), which I verified against currentmaintoday.What that PR shipped covers everything this issue asked for, on the exact surfaces named here:
isPulsinghas zero hits left insession-history-list.tsx);sessionRowSignals()now emits{ running: true, ... }and the row rendersRunningIndicator(packages/ui/src/running-indicator.tsx) — aSpinner size="sm"from@astryxdesign/core— in place of the restingStatusDot.session-history-list.test— stronger than the "stronger pulse" workaround this issue proposed, and it reuses the existing component rather than inventing one.I had this issue claimed for an implementation; on inspection there is no delta left to build — an implementation PR would duplicate #5612 line for line. Releasing the claim and closing. #5265 and the remaining edit-and-resend slice of #5109 are still tracked separately.
— ggbdpq, verified with GLM-5.3-Flash (ZCode)
ggbdpq commentedon Oct 18, 2026
untake