anthropics / anthropics/claude-code
[BUG] Fullscreen: status-row spinner stays frozen after scrolling back to the bottom until its status text changes
- Lenguaje dominante
- Python
- Estrellas
- 145k
- Forks
- 23.1k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
### Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code
### What's Wrong?
In fullscreen rendering, scrolling the transcript up pauses the status row's animation (spinner glyph, elapsed time, shimmer). Scrolling back to the bottom with PageDown or Ctrl+End does **not** resume it. The row stays frozen until its own status text next changes, or until a focus event or SIGWINCH forces a global re-render. During a long tool run or a long think that is minutes of a dead-looking spinner.
Terminal-side blink (SGR 5) keeps blinking and the window-title spinner (`◐`/`◑`) keeps toggling throughout, so the process and its event loop are alive; only the status row stops being painted.
### What Should Happen?
Scrolling back to the bottom (PageDown, Ctrl+End, wheel) should resume the status row's animation, the same way a focus event or a resize does.
### Error Messages/Logs
Recorded with `script --log-timing` around `claude --debug-file`, in kitty 0.45.0. F9 and F10 are unbound in Claude Code and were pressed as inert timeline markers when the freeze was seen and when it ended. Times are seconds since session start; "bytes" are what reached the pty.
| time | event | bytes written to the pty |
|---|---|---|
| 117.4 | Enter | spinner frames every ~110 ms |
| 118.4 | PageUp ×3 | banner, "Jump to bottom" pill, then nothing for the row |
| 122.8 | PageDown ×3 | transcript repaint, then silence |
| 123.2 | status-row text changes | first spinner frame 21 ms later |
| 127.4 | PageDown | transcript repaint byte-identical to the previous one, then silence |
| 128.3 | F9 (seen frozen) | silence |
| 130.5 | tool result; status-row text changes | spinner frames resume at full cadence |
| 131.0 | F10 (seen moving) | |
3.18 s with zero screen bytes after the PageDown; the only output in that window was the OSC title toggle once a second.
A second recording (same result with `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL=1`) narrows what wakes the row:
| time | event | bytes written to the pty |
|---|---|---|
| 34.7 | PageDown to bottom | transcript repaint, then silence |
| 35.8 | a new tool-call row lands in the transcript | 467 B for that row; spinner still silent |
| 36.1, 37.7 | F9 ×2 | silence |
| 38.7 | status-row text changes to "running PostToolUse hook" | spinner frames resume within 15 ms |
Wakes the row: a change to the status row's own text ("thought for 2s", a new activity phrase, "running PostToolUse hook"), focus in/out, SIGWINCH.
Does not: PageDown to the bottom, Ctrl+End, new transcript rows, token-count updates, the elapsed-seconds text.
So the pause is set when the row scrolls out of view and only cleared on the row's next state-driven re-render, and scrolling back into view is not one. Every user action that "fixes" it (clicking away and back, splitting a tmux pane) happens to force a re-render.
### Steps to Reproduce
1. `tui: fullscreen`. Start a turn with a quiet stretch, e.g. ask Claude to run `sleep 30` with the Bash tool.
2. While the row shows `Running… · Ns`, press PageUp a few times, then PageDown back to the bottom (Ctrl+End behaves the same).
3. The glyph, the elapsed seconds and the shimmer stop.
4. Click to another window and back, split a tmux pane, or wait for the tool to finish: the row animates again.
### Claude Model
Other (Fable 5.1; not model-related)
### Is this a regression?
I don't know
### Claude Code Version
2.1.272 (Claude Code), native install
### Platform
Anthropic API
### Operating System
Ubuntu/Debian Linux (Ubuntu 26.04, Linux 7.0)
### Terminal/Shell
Other: kitty 0.45.0 and Ptyxis 50.1 (VTE 0.84), each both inside and outside tmux 3.6; same behaviour in every combination
### Additional Information
Auto mode was on in both recordings. Raw recordings (pty bytes with timing, debug logs) available on request.
🤖 Pete Dietl
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Evaluación
Este issue todavía no se ha evaluado.