Pad/internal
Greg Pomerantz cb8ebc003f IME: force a re-syncing snippet re-push when the IME desynchronizes
After the selection-replacement autocorrect on the phone, Gboard's
local text was out of sync with ours and it re-sent the same empty
fix-up commit in an endless loop (~one per 150 ms, each drift-snapped
to the caret and applied as a no-op). The file was never damaged, but
the IME never converged because it kept 'fixing' text that did not
exist in its own model.

The app cannot see the IME's model; the only recovery the IME
contract offers is a restartInput, which makes it re-fetch the
real text and selection around the caret. Arm that recovery
automatically: three consecutive anomalous commits (drift-snapped,
or empty text) set IMEForceResync, and the next frame ships the
snippet trimmed by one rune, which changes the pushed text and
forces the restart. The streak resets on any normal commit, so
isolated anomalies never trigger it, and the resync is one-shot.

TestRealFile_IMEForceResync pins the arm/reset/consume cycle.
2026-09-13 18:23:06 -04:00
..
browser Reload the previous directory's list after a failed navigation 2026-09-03 12:53:23 -04:00
editor IME: force a re-syncing snippet re-push when the IME desynchronizes 2026-09-13 18:23:06 -04:00
io/pool IME: map commits against the whole buffer; drop the renderer-side model 2026-09-13 11:57:38 -04:00
perf Add pre-release frame-regression profiling 2026-08-20 14:18:08 -04:00
test/e2e IME: force a re-syncing snippet re-push when the IME desynchronizes 2026-09-13 18:23:06 -04:00
ui IME: force a re-syncing snippet re-push when the IME desynchronizes 2026-09-13 18:23:06 -04:00