[BUG] Fullscreen TUI: transcript region renders blank until a key is pressed (2.1.267, macOS, cmux/libghostty)
Environment
- Claude Code 2.1.267 (native arm64 binary)
- macOS 27.0 (26A5425a)
- Terminal: cmux (embeds libghostty as its terminal engine),
TERM=xterm-256color,TERM_PROGRAM=ghostty "tui": "fullscreen"in~/.claude/settings.json- Session in auto mode, ~52% context used (517k tokens), several
Monitorevents and a recap delivered while the session was idle
What happens
After a turn finished ("Cogitated for 20s · done 4:12 PM"), most of the transcript above the prompt was not drawn. The screen showed the end of an earlier assistant message, then a large empty region (roughly 25 rows), then the "Cogitated for 20s" status line, then the prompt. Everything that had been appended in between was missing:
- "Worked for 4m 49s · done 4:07 PM"
- Two
Monitor eventlines and therspec: passresult - "Crunched for 3s · done 4:08 PM" and the recap
- "Monitor ... stream ended", "CI green again ..."
- The final assistant message with a table and two bullet lists
Scrolling the transcript did not repaint the region. The blank gap moved with the scroll, so the missing rows are missing from the buffer, not just stale on screen.
Typing a single character into the prompt made the entire missing block appear immediately, with no other layout change. Deleting the character did not make it disappear again.
Expected
The transcript should reflect all content appended since the last draw as soon as the turn completes (or when a Monitor event / recap is delivered), without requiring input to trigger a redraw.
Steps to reproduce
Not yet reduced to a minimal case. The conditions present when it happened:
- Enable
"tui": "fullscreen". - Run a long session (large context) where several background
Monitorevents and a recap arrive while the user is idle. - Let the assistant finish a turn that ends with a markdown table and lists.
- Observe the transcript region above the prompt.
The fact that it recovers on the first keypress suggests a missed invalidation / dirty-region miss for content appended by background events (Monitor notifications, recap) rather than by the streaming response itself.
Recording
Screen recording (8.6 s) and before/after frames are attached in the first comment below. Timeline:
| Time | What is visible |
|------|-----------------|
| 0.0 s | Blank gap between the earlier message and the "Cogitated" status line |
| 0.8 s | Scrolled up slightly; gap persists and moves with the scroll |
| 2.3 s | One character typed into the prompt; full transcript appears |
| 2.3–8.6 s | Character deleted; content stays rendered |
Related issues (not duplicates)
- #90733 — fullscreen renderer withholds slash-command output until the next repaint (macOS, Terminal.app and Ghostty). Same symptom class: content is complete internally but not painted until some later event forces a repaint. That report covers local slash-command output; this one covers transcript entries appended by background events and a completed turn.
- #83714 — fullscreen history view omits entries or shows a blank band after deep scroll-up/scroll-down (Windows). Similar "blank band with correct neighbours" appearance, but triggered by scrolling; here the gap is present before any scroll, and scrolling does not repair it.
- #87985 — stale placeholder text under
TERM_PROGRAM=ghostty; a maintainer reply notes the fullscreen renderer sends only changed cells and points toCLAUDE_CODE_ALT_SCREEN_FULL_REPAINT=1as a diagnostic. Not yet tested here; will report back whether the full-repaint mode masks this.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗