mirror of
https://github.com/stablyai/orca.git
synced 2026-10-17 08:03:14 +00:00
Bug D: the serialized screen cannot carry the VT100 DECSC saved-cursor register, so a hidden ESC 7 followed by a post-reveal ESC 8 restored to home and clobbered live cells. The snapshot epilogue now re-saves at the source's saved position before the final absolute CUP (readSavedCursorRegister + serializeWithAbsoluteCursor; the active buffer's own register, so alt screens carry theirs). Position-only by design; never-saved terminals are left untouched. Bug E: a PTY read ending mid-escape leaves the sequence in the emulator's parser, so serialize dropped it and the racing tail's continuation bytes rendered literally after reveal (~24% of the fuzz corpus). The emulator now tracks the unparsed trailing partial at ingest (terminal-partial-escape-tail.ts, committed post-parse like the mouse mirror) and ships it as TerminalSnapshot.pendingEscapeTailAnsi. applyMainBufferSnapshot writes it LAST, after POST_REPLAY reset — any later ESC would abort the dangling sequence. Seq accounting is unchanged: the tail is a suffix of bytes the snapshot seq already counts, so reconcile slicing needs no adjustment. Fuzz suites: unskip the Bug B/C repros (fixed on this branch) and the new D/E repros; remove the B/C/E tolerance predicates so regressions fail loudly. Only Bug A (upstream wrap null-cell) stays tolerated + counted. Green at FUZZ_ITERATIONS=2000 (fidelity) and 1000 (reconciliation). Co-authored-by: Orca <help@stably.ai>