Skip to content

Transcript goes blank during incremental scrolling (no longer reproduced in 1.0.79) #4311

Description

@wuw92

Correction

The original WCr / ScrollBox measured-line-cache explanation was incorrect. The normal transcript renders its children directly, and renderer traces also ruled out clearBottom(). --stream off and terminal resizing are not reliable workarounds.

Issue

During incremental scrolling, the transcript could become blank while the tab bar, input box, working-directory line, and Working status continued rendering. The failure was reproduced in a 100x24 ConPTY and verified by replaying the raw output through @xterm/headless.

Relevant implementation change

While comparing shipped bundles, I found a renderer change that aligns with the observed behavior. Before 1.0.79-5, the cell renderer applied a detected terminal scroll and shifted its row hashes without marking the affected rows dirty.

Starting in 1.0.79-5, every row in the applied scroll range is additionally marked dirty:

for (let row = scroll.start; row <= scroll.end; row++) {
  dirty[row] = true;
}

This change is included in stable 1.0.79. It appears relevant because the failure was limited to incremental repainting, but this issue does not establish that it was the maintainers' intended fix or the sole root cause.

Validation

The same prompt, 100x24 ConPTY, capture duration, and replay scorer were used for both versions:

Version Fix present Sustained transcript collapse
1.0.79-4 no 1/3
1.0.79 yes 0/3

The implementation-change boundary and behavioral results agree. I can no longer reproduce the issue on stable 1.0.79, so I am closing this report. The maintainers may have additional context about whether the renderer change above was intended to address this case.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:terminal-renderingDisplay and rendering: flickering, scrolling, line wrapping, output formatting

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions