feat: Claude Code's warm thinking-spinner shimmer (CLFY-27) #57
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "clfy-27-spinner-shimmer"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Replicates Claude Code's spinner "wave" captured in CLFY-26. The spinner verb and glyph now, keyed to the spell's elapsed time:
#D78787→ tan → orange#FFAF5F(bold at ~17s) → gold#FFD700at ~20s, then plateaus. One-way, no cycle-back.#FFAF87) sweeping right→left across the verb during the first ~15s, then uniform.Emits CC's exact 256-color indices for fidelity.
The capture's open question — resolved
CLFY-26 flagged: can pi's render loop even repaint the spinner mid-stream at ~5 Hz? Yes.
ui.setWorkingMessage→Loader.setMessage→updateDisplay→requestRenderruns synchronously (pi-tuicomponents/loader.js), so refreshing the working message at the sweep cadence repaints immediately, independent of the 500ms glyph timer. A fast-refresh window (200ms), bounded to the ~20s escalation, drives the animation; past the plateau the color is constant and the existing text-equality guard throttles re-renders.Scope / gating
spinnerShimmersetting (Spinner section, default on). Chasing CC's look is claudify's whole point, so it's on by default.spinnerColoris set — the shimmer imposes CC's fixed warm palette, so a user's static color choice wins.✻ Worked for …completion line is never shimmered.Tests + smoke
bun run test— 15/15 green. Pure functions (shimmerBase/shimmerSweep/colorizeShimmerVerb/shimmerGlyphAnsi) unit-tested through the gold+bold plateau and the moving sweep window.tsc --strictclean.spinnerColorsuppressed the shimmer entirely.\x1b[1mis zero-width so it can't overflow.Note: this mutates pi's spinner render, so re-run the live smoke before the next
npm publish(ideally catching the gold plateau).Closes CLFY-27