fix(terminal): merge-time fixes for the silent-failure paths (#431)

- While another device holds the pane width (_paneWidthRefused), a resize
  now asks for the container's width without applying it locally
  (_geometryForResizeRequest: rows follow the container, columns stay at
  the PTY's). Fitting first re-wrapped the whole buffer to the container
  and back on every 30s mobile retry, and throttledResize ran the
  scrollback clear for a resize that brings no redraw. selectSession
  clears the flag, since it belongs to the previous pane. New unit tests
  run the real mixin against a fake terminal and fail without the fix.
- Session seeds _ptyCols/_ptyRows at spawn (_notePtySpawnGeometry), so a
  reattached pane reports its tmux window's real size through ptyGeometry.
- Session.resize's declined-branch comment names ptyGeometry, not the
  deleted ptyCols/ptyRows getters.
- Delete the dead terminalGeometryAgrees() and its window export.
- test/xterm-private-api.test.ts header: it pins the exact locked version,
  so any bump fails, not only a major.
- The main-terminal fit sweep also matches fitAddon?.fit?.(), and
  CLAUDE.md names the modules it actually covers.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Codeman maintainer
2026-09-23 11:40:03 +02:00
parent fdfcc15c10
commit 7a30a31430
8 changed files with 173 additions and 26 deletions
-6
View File
@@ -1770,11 +1770,6 @@ function clampTerminalDimensions(proposed) {
};
}
/** Whether two geometries are the same screen. Either being absent is a mismatch. */
function terminalGeometryAgrees(a, b) {
return !!a && !!b && a.cols === b.cols && a.rows === b.rows;
}
/**
* What to do when the server reports the PTY's real geometry.
*
@@ -1829,7 +1824,6 @@ if (typeof window !== 'undefined') {
};
window.CodemanTerminalGeometry = {
clampTerminalDimensions,
terminalGeometryAgrees,
reconcilePtyGeometry,
TERMINAL_MIN_COLS,
TERMINAL_MIN_ROWS,