You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
bug(terminal): WebGL atlas changes leave stale glyphs after scrolling #789
Scrolling raw terminal history and displaying colored CLI output must repaint the visible cells correctly without disturbing running sessions.
Actual behavior and evidence
User reports left-edge stale colored cells/text fragments after scrolling a plain terminal running interactive Claude on macOS after the WebGL performance change (#783). The exact screenshot cause is not yet confirmed.
An independent Electron reproduction using the installed @xterm/xterm 6.0.0 and @xterm/addon-webgl 0.19.0 found a concrete related defect: atlas page merges during colored output leave stale rendered pixels; repainting without changing terminal buffer content corrects them. Scrollback navigation also reproduced this instability. Synthetic two-terminal stress: 148 removed atlas pages, 33 output-frame mismatches and one scroll-frame mismatch, versus a subsequent explicit refresh of identical buffer contents.
Investigation and acceptance
Verify whether scheduling a coalesced repaint after atlas layout changes resolves the deterministic reproduction.
Preserve GPU acceleration, input/PTY ordering, terminal history, and DOM context-loss fallback.
Cover teardown and late-import lifecycle, real rendered-pixel stability, and all shared-helper terminal hosts.
Do not restart or kill live agents to investigate.
Related upstream investigation: xtermjs/xterm.js#6038 . Our pinned 0.19.0 implementation predates newer merge-retry logic; do not assume every upstream failure mode applies unchanged.
Implementation and verification are in #790. The installed 0.19.0 addon has two reproduced mechanisms: stale cell texture coordinates after a mid-frame atlas merge, and per-page texture-version collisions that can leave an old GPU texture bound. A refresh-only experiment removed frame instability but failed an independent fresh-atlas pixel oracle, so it was not shipped. The final repair invalidates bindings and coalesces a viewport refresh on atlas layout events without clearing the shared glyph cache. Final real Electron run: 148 distinct page removals; control has 33 output-frame mismatches, one scroll mismatch, and 1,264,868 differing pixel channels against an independent reference; production loader has zero mismatches and zero reference differences. Exact screenshot confirmation remains pending deployment; no live session was restarted.
Activity
Juliusolsson05 commentedon Sep 5, 2026
Implementation and verification are in #790. The installed 0.19.0 addon has two reproduced mechanisms: stale cell texture coordinates after a mid-frame atlas merge, and per-page texture-version collisions that can leave an old GPU texture bound. A refresh-only experiment removed frame instability but failed an independent fresh-atlas pixel oracle, so it was not shipped. The final repair invalidates bindings and coalesces a viewport refresh on atlas layout events without clearing the shared glyph cache. Final real Electron run: 148 distinct page removals; control has 33 output-frame mismatches, one scroll mismatch, and 1,264,868 differing pixel channels against an independent reference; production loader has zero mismatches and zero reference differences. Exact screenshot confirmation remains pending deployment; no live session was restarted.
fix(terminal): stop attaching the WebGL renderer until a stable addon…