Discord Username / User ID
interferon0
What does this improvement do?
The test run --wait / test wait progress ticker prints a single in-place line. On a narrow terminal or with a long run id the line soft-wraps to a second row, and the next \x1b[2K\r clears only one of the two rows, corrupting the redraw (ghost lines). This clips each frame to the current terminal width, re-read on every poll so it also follows a live resize. It stays completely silent on non-TTY (CI) and under --output json, so machine output is unchanged.
Details / implementation notes
Approach: width-aware truncation in src/lib/ticker.ts (read process.stderr.columns ?? 80, clip to width-1 to avoid last-cell auto-wrap, append a 1-column ellipsis). No new dependencies (ticker content is ASCII, so .length is an exact column count). Adds 10 unit tests (truncation, simulated resize, 80-col fallback, non-TTY silence). Full gate green: tsc, eslint, prettier, 1703 tests, coverage 98% on ticker.ts. PR to follow once assigned.
Confirmations
Discord Username / User ID
interferon0
What does this improvement do?
The test run --wait / test wait progress ticker prints a single in-place line. On a narrow terminal or with a long run id the line soft-wraps to a second row, and the next \x1b[2K\r clears only one of the two rows, corrupting the redraw (ghost lines). This clips each frame to the current terminal width, re-read on every poll so it also follows a live resize. It stays completely silent on non-TTY (CI) and under --output json, so machine output is unchanged.
Details / implementation notes
Approach: width-aware truncation in src/lib/ticker.ts (read process.stderr.columns ?? 80, clip to width-1 to avoid last-cell auto-wrap, append a 1-column ellipsis). No new dependencies (ticker content is ASCII, so .length is an exact column count). Adds 10 unit tests (truncation, simulated resize, 80-col fallback, non-TTY silence). Full gate green: tsc, eslint, prettier, 1703 tests, coverage 98% on ticker.ts. PR to follow once assigned.
Confirmations