Animate the working indicator and narrow the side gutter - #410
Merged
Conversation
The bottom-left slot printed the phase as a flat word, so a live run and a hung one rendered identically and the only way to tell them apart was to wait and see whether anything ever changed. Lead the word with a single density cell that cycles while the turn moves, holds one static glyph while the turn is blocked on an operator gate, and blinks a bang once the run has gone silent. Every distinction is a glyph or a motion before it is a color, so the states separate on a monochrome terminal and without reading the word. The stall blink is a bounded burst that settles to a static bang: an alarm that strobes for the whole stall window becomes wallpaper, and settling lets the render loop drop back to its slow cadence. Measuring the burst from the notice threshold rather than stamping it means a resumed session with stale activity shows the settled glyph immediately instead of alarming about silence its operator was not present for. The watchdog now reports the stall as three levels rather than a boolean, so the indicator can keep reading as stalled through the abort threshold while the status flash still steps aside for the abort's own message.
The gutter held at two columns per side from 60 columns wide all the way up, never scaling down or up with the terminal, which read as excess air on a wide pane. Drop it to one column, still enough to keep content off the frame edge at every width the gutter is affordable.
TheGreatAxios
force-pushed
the
cl-5695-live-working-indicator
branch
from
August 8, 2026 20:53
c9d092e to
6c7cd70
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Working indicator (CL-5695)
The density ramp machinery (
rampFor,resolveRampPhase) was already fully built and computed correctly on every paint, but its output only ever landed inshell.turnPhase— a field nothing painted. The actual on-screen bottom-left status slot is a separate mechanism,lockup.ts, which rendered the phase word through a brief neutral crossfade and never carried color or motion tied to the turn's real state. That gap is why a genuine stall looked identical to normal progress.This wires the lockup slot to the same ramp phase the density ramp already computes, adding a third phase — stalled — driven by the stall watchdog's existing
shouldNoticeStallcheck (no new state, no second source of truth):!every ~450msBlocked and stalled share a color on purpose — both mean "not making progress on its own" — but are never confused: blocked freezes, stalled blinks and changes glyph shape, so the difference survives a monochrome terminal too.
Side gutter
The gutter held at 2 columns per side from 60 columns wide upward, with no further scaling — read as excess air on a wide pane. Narrowed to 1 column, still enough to keep content off the frame edge.
Verification
Full suite passes except one pre-existing, unrelated failure (
lsp-availability.test.ts, caused by a missing dev binary in this environment, not touched by this diff). Manually verified in tmux with a scratch driver against a real stall watchdog (no faked clock): captured ANSI output confirmed bronze while moving, frozen orange while blocked, and an orange blink between the phase word and!!!!!!!!!!!!!!!once the run went genuinely silent.