RET now runs edit.newline-and-indent (builtin/runtime/indent.lua): one insert/replace of "\n" plus the current line's leading whitespace, copied verbatim and clipped at the split point (Q#AI3). Region RET stays a single Replace (CUA type-over, one undo step, one CRDT op); the selection clears after every successful edit (Q#AI4). Fix-up is snapshot-guarded against context-switching intercepts and repairs the cursor by right-gravity translation through the effective edit (Q#AI5). buffer.newline remains the plain-newline escape hatch. GPU (Q#AI1/Q#AI6): plain Enter is no longer optimistic-eligible -- its classifier arm's premise (byte-identical to a self-insert) died with the new binding. Enter round-trips like the TUI, which also makes global and buffer-local RET rebindings (buffer-list visit) reachable from the GPU frontend. Substrate fixes that RET would otherwise ship on top of: - Q#AI8 search staleness: notify_buffer_edit now marks matches stale and right-gravity-translates the live session origin, matching apply_active_edit; SearchStore::step and search_match_summary fail closed while stale (a live search un-sticks on the next pattern keystroke, since set() clears staleness). - Q#AI9 empty selections: insert_char reports success and the no-region arm of insert_char_over_region clears a lingering anchor only on Ok -- ordinary typing no longer type-overs its own previous keystroke after S-Left at BOF, and a rejected insert mutates no state. Acceptance: tests/auto_indent_acceptance.rs (20 dispatch-driven cases), tests/auto_indent_crdt_acceptance.rs (pending optimistic input then round-tripped Enter converges on the source replica), flipped GPU classifier test, and lib tests for the store, core, and dispatch seams. Framing: docs/auto-indent-framing.md (five review rounds). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ATiKMwJ4864d82D39EvsU6 |
||
|---|---|---|
| .. | ||
| async.lua | ||
| autosave.lua | ||
| comment.lua | ||
| completion.lua | ||
| desktop.lua | ||
| fs.lua | ||
| indent.lua | ||
| killring.lua | ||
| listview.lua | ||
| lsp.lua | ||
| mcp.lua | ||
| recentf.lua | ||
| saveplace.lua | ||
| syntax.lua | ||