Pad/internal/editor
Greg Pomerantz a83cc1a72f IME: guard distant commits; arm the resync on the first anomaly
The boundary trace (PADIME at EditorStateChanged) showed why a
desynchronized IME never heals itself: gioui's EditorReplace advances
its stored selection state when the commit arrives, so the
post-commit selection push is always deduplicated away and
updateSelection is never sent after a commit. A desynced IME is
therefore healed only by a snippet restart — and the resync was
armed only after THREE consecutive anomalies, while the phone
incident's first anomaly (a 5-rune autocorrect 19,000 runes from
the caret, width > 2) sailed through the old <=2-rune guard and
clobbered distant text before any resync could fire.

Now:
- the guard also snaps commits that are far from the caret AND
  outside the live selection (a legitimate commit is always local:
  at the caret, inside the selection, or a nearby correction);
  a distant commit lands at the caret instead of clobbering text;
- the resync is armed on the FIRST anomalous commit (snapped or
  distant), not after a streak; the streak counter is gone;
- imeSelectionRuneRange() lets the guard allow selection
  replacements anywhere.

TestRealFile_IMEForceResync rewritten for the new semantics and
extended with the distant-replacement case (must land at the
caret and arm the resync).
2026-09-13 22:31:28 -04:00
..
auto_save_test.go gofmt: format all remaining files with the go1.27 toolchain 2026-08-23 10:03:27 -04:00
buffer_test.go gofmt: format all remaining files with the go1.27 toolchain 2026-08-23 10:03:27 -04:00
chunked_buffer_fuzz_test.go Data-corruption test suite: differential fuzz + atomicity contract 2026-08-17 12:43:17 -04:00
chunked_buffer_test.go Add text selection, real-file e2e tests, and Android arrow-key support 2026-08-17 00:32:53 -04:00
chunked_buffer.go IME: fix random mid-word capitalization (stable snippet window + commit in-flight handling) 2026-09-13 17:00:49 -04:00
cursor_test.go Fix word-wrap scroll jump: visual-line mapping via WrapIndex 2026-08-17 19:46:47 -04:00
deterministic_file.go feat: virtual scrolling with chunked buffer for large files 2026-06-05 09:11:32 -04:00
dirwatcher.go Browser: drive the live list off inotify, not a 1s poll 2026-09-02 19:21:19 -04:00
e2e_test.go gofmt: format all remaining files with the go1.27 toolchain 2026-08-23 10:03:27 -04:00
filename_test.go gofmt: format all remaining files with the go1.27 toolchain 2026-08-23 10:03:27 -04:00
find_scroll_test.go Fix find scroll position on long files 2026-08-20 06:50:14 -04:00
font_scale_test.go Track Android user font scale in all line-height geometry (Phase 11) 2026-08-17 10:59:34 -04:00
frame.go IME: map commits against the whole buffer; drop the renderer-side model 2026-09-13 11:57:38 -04:00
ime_range_test.go IME: map commits against the whole buffer; drop the renderer-side model 2026-09-13 11:57:38 -04:00
integration_test.go editor+ui: complete Android IME wiring (SelectionCmd, SnippetCmd, InputHintOp) 2026-08-16 02:43:58 -04:00
line_index_fuzz_test.go Data-corruption test suite: differential fuzz + atomicity contract 2026-08-17 12:43:17 -04:00
logic.go IME: fix random mid-word capitalization (stable snippet window + commit in-flight handling) 2026-09-13 17:00:49 -04:00
mock_setup.go Handle drags: 1:1 finger tracking with cross-flip; fix caret/taps on empty lines 2026-08-19 22:34:12 -04:00
perf_probe.go perf: default-off in-app profiler + debug scroll jumps; verify scroll perf & clamping 2026-08-16 16:53:28 -04:00
pinch_font_test.go Pinch-to-font-size (continuous, content-point pinned) + IME-open scroll fix 2026-08-23 09:00:51 -04:00
scroll_fix_test.go gofmt: format all remaining files with the go1.27 toolchain 2026-08-23 10:03:27 -04:00
search_test.go Stop the find input clearing itself while typing 2026-08-20 13:22:50 -04:00
search.go Hold the restored scroll on its line while wrap counts settle (spec §2.4) 2026-08-20 21:03:56 -04:00
selection_menu_track_test.go Make the editor top and bottom bars ~30% taller for bigger tap targets 2026-09-03 12:34:18 -04:00
selection_test.go Add text selection, real-file e2e tests, and Android arrow-key support 2026-08-17 00:32:53 -04:00
session.go Restore the browser page on relaunch, not the last edited file 2026-09-03 12:11:44 -04:00
state_api_fuzz_test.go Handle drags: 1:1 finger tracking with cross-flip; fix caret/taps on empty lines 2026-08-19 22:34:12 -04:00
state.go IME: guard distant commits; arm the resync on the first anomaly 2026-09-13 22:31:28 -04:00
tap_scroll_property_test.go Prove tap-to-position is scroll-offset independent; fix float32 decomposition bug 2026-08-17 09:57:21 -04:00
touch_selection_test.go Handle drags: 1:1 finger tracking with cross-flip; fix caret/taps on empty lines 2026-08-19 22:34:12 -04:00
wrap_apply_test.go gofmt: format all remaining files with the go1.27 toolchain 2026-08-23 10:03:27 -04:00
wrap_bookkeeping_test.go Fix word-wrap scroll jump: visual-line mapping via WrapIndex 2026-08-17 19:46:47 -04:00
wrap_index_test.go Fix word-wrap scroll jump: visual-line mapping via WrapIndex 2026-08-17 19:46:47 -04:00
wrap_index.go Fix word-wrap scroll jump: visual-line mapping via WrapIndex 2026-08-17 19:46:47 -04:00
wrap_mapping_test.go Handle drags: 1:1 finger tracking with cross-flip; fix caret/taps on empty lines 2026-08-19 22:34:12 -04:00