fix(terminal): preserve replay and history ownership - #193
Conversation
Ark0N
commented
Aug 5, 2026
Hi Lior, closing this one as part of a cleanup of the seventeen PRs currently open from you. The full explanation is in #173, and I would rather you read that one than this note, because it is the honest version and it is not a dismissal of your work. The short form: sixteen PRs opened in a single day, roughly 42,000 added lines in total, landing mostly on the same few files (nine touch Going forward, please keep no more than three open PRs at a time, each one a single behavior change that stands on its own, with a test that fails on master and passes with the fix. #214 and #215, merged today, are good models. If this particular change fixes something that genuinely annoys you in daily use, it is a good candidate to be the first one you reopen on its own, rebased on current master. I will review it properly. Thanks for the effort you put in, and sorry to close it this way. |
Summary
Root causes
chunkedTerminalWrite()always finished the buffer-load gate, even whenselectSession()supplied and still owned that gate. Live terminal output could therefore resume between restoration stages and interleave with a later replay.Manual scroll protection also expired after 1.5 seconds. A busy Codex status redraw could reclaim the viewport while the user was still reading older output.
What changed
Commit structure
fix(terminal): retain session replay ownershipfix(terminal): keep manual history scroll anchoredValidation
npx vitest run --config config/vitest.config.ts test/terminal-flush-budget.test.ts test/terminal-buffer-flush.test.ts test/codex-snapshot-replay.test.ts(19 tests)npm run typechecknpm run lintnpm run check:frontend-syntaxnpm run check:public-assetsnpm run buildgit diff --checkScope
This PR does not include terminal streaming, warm-session caching, viewport ownership, keyboard layout settling, or authoritative frame capture.