Oracle audit: fix Helix divergences + convert tests to oracle-checked
Sift through every command implemented so far and confirm behavior
against the real Helix oracle. Six divergences found and corrected:
- `*` (`search_selection`): used the literal selection contents,
regex-escaped. Was expanding 1-char block cursors to the surrounding
word with \\b boundaries — that's `<A-*>`
(`search_selection_detect_word_boundaries`), a separate Helix command.
- `o` / `O` (`open_below` / `open_above`): match Helix's indent-on-
newline behavior. Source line's indent in VISUAL columns is measured,
then `indentString` (default `\\t`) is laid down to match. Range
shape is a 1-char forward block with `restoreCursor = true` instead
of a point. The "copy leading whitespace verbatim" behavior I'd
written was my own invention.
- `>` / `<` (`indent`/`unindent`): default `indentString` changed from
4 spaces to `\\t` — Helix's actual default. Dedent now measures
leading whitespace in visual columns (tab → next tab stop, space →
one column) and removes one shiftwidth's worth, not one char's worth.
- `ge` (`goto_last_line`): trailing newline does NOT count as a
separate "last line". A buffer ending in `\\n` lands `ge` on the
start of the last content line, not the empty position past the
final newline. (Earlier "fix" had been my mistaken interpretation
of the user's report.)
- `r<c>` (`replace`): replaces every char in selection, INCLUDING
newlines. Comment claiming "newlines preserved (matches Helix)" was
wrong — the oracle disagrees.
Tests converted to `checkOracle`: IndentTest (10), CopySelectionOnLineTest
(7), OpenLineTest (7), GotoReplaceJoinTest (12). The QuoteMimAndSurroundAddTest
quote-mim/mam cases stay hand-asserted with a clearer comment explaining
WHY — Helix needs tree-sitter to see a string literal as a pair, and
the oracle's test syntax loader has no grammar for our plaintext buffers.
Engine compensates with a plain-text quote-parity walker the oracle can't
match. Surround-add (ms<c>) was and stays oracle-checked.
Indent/dedent tests use `<gt>` / `<lt>` for the `>` / `<` keys: bare
`>` and `<` are reserved as escape delimiters in Helix's `parse_macro`.
This audit is the value differential testing was meant to deliver —
six wrong assumptions caught and corrected without manual reproduction.