[BUG] Fullscreen sticky prompt bar (clickable scrolled-off prompt at top) stopped rendering in 2.1.247

Status Fixed / completed
Reported on v2.1.247
Maintainer reply None cached
Activity 1 comment · opened Aug 31, 2026 · closed Sep 9, 2026

What's Wrong?

The fullscreen renderer used to pin a one-line, clickable copy of the nearest scrolled-off user prompt to the top of the viewport. Clicking it scrolled the transcript to that prompt (and the bar hid until you scrolled again) — a fast way to travel between prompts in a long session.

Since v2.1.247 the bar never renders. Still broken in v2.1.251. The 2.1.247 changelog doesn't mention it, so this looks like an accidental casualty of that release's scroll refactor rather than an intentional removal.

Bisect with pristine npm @anthropic-ai/claude-code-darwin-arm64 binaries, same scripted scenario each time (tmux 120x30, real text prompt, a 60-line response, PageUp x2, inspect the top line):

| Version | Sticky prompt bar |
|---|---|
| 2.1.241 | ✅ shows |
| 2.1.246 | ✅ shows |
| 2.1.247 | ❌ gone |
| 2.1.248 | ❌ gone |
| 2.1.251 | ❌ gone |

What Should Happen?

With the transcript scrolled up so a prompt is above the viewport, the top line should show the grayed, clickable prompt text, and clicking it should scroll to that prompt — as in ≤2.1.246.

Steps to Reproduce

  1. Fullscreen rendering mode (/tui fullscreen), any terminal (reproduced in Ghostty, Terminal.app, and tmux).
  2. Send a normal text prompt (not a slash command) and get a response tall enough to scroll.
  3. Scroll up (PageUp or mouse) so the prompt is above the viewport. The "Jump to bottom" pill appears, confirming the scrolled state.
  4. On ≤2.1.246 the top line shows the grayed, clickable prompt text. On ≥2.1.247 the top line is just regular transcript content.

Is this a regression?

Yes. Last working version: 2.1.246.

Additional Information

What I found in the bundle: the feature's code is fully intact in 2.1.251 — the top-bar component is still mounted in the fullscreen layout, and the virtual-message-list companion that scans for the nearest off-screen prompt (excluding meta/<-prefixed entries, 500-char cap) is still wired via trackStickyPrompt with the same guards as 2.1.241 (teammate view hidden, fullscreen required, virtualization required). Its setStickyPrompt just never fires anymore.

2.1.247 rewrote the fullscreen scroll plumbing (the old scrollRef wiring was replaced by a scrollViewport handle with isSticky()/getScrollTop()/getPendingDelta()/subscribe). The scanner only computes while isSticky() is false and treats a missing handle as pinned-to-bottom (?? true), so after the refactor it appears to be starved of scroll state: the bar is rendered-but-never-fed rather than removed.

Environment

  • Claude Code version: 2.1.251 (broken since 2.1.247)
  • Model: any (UI-level; reproduced independent of model)
  • Platform: Claude Max (api.anthropic.com)
  • OS: macOS 15 (darwin-arm64)
  • Terminal: Ghostty, Terminal.app, tmux — all reproduce
  • Fullscreen rendering mode, default settings; CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL not set

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗