Finding 1: the empty-anchor optimistic residual was never GPU-only (the TUI mirror tracks no selection state; its gate checks cursor freshness/EOL only). The fix moves daemon-side: handle_remote_crdt_op clears a selection whose anchor equals the pre-edit cursor (= empty) before applying the source cursor update; nonempty selections stand. Covers both frontends. The TUI gate's missing type-over check (nonempty selection at EOL) is a named deferral. Finding 2: Q#AI8 invalidation is one helper (search_invalidate_for_edit) invoked from all four edit paths -- apply_active_edit, notify_buffer_edit, and now undo/redo, which received precise Edits but invalidated nothing. rebuild_views_for is named as a lower-frequency bypass (deferral). Finding 3: acceptance matrix trued up -- added active-search fail-closed + retype recovery, delete translation on both paths, undo/redo staleness + origin tests; modal contexts narrowed to what this suite pins (query-replace/menu/completion ride their own suites). Finding 4: indent extraction is a forward-chunked scan stopping at the first non-whitespace byte -- Enter at the end of a giant minified line no longer materializes the line. Functional pin at 64 KiB. Both medium fixes are bite-verified (tests fail with the fix disabled). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ATiKMwJ4864d82D39EvsU6 |
||
|---|---|---|
| .. | ||
| api | ||
| commands | ||
| hooks | ||
| keymaps | ||
| menus | ||
| packages/repl | ||
| runtime | ||