Autocorrect and autocomplete should be independent undo units
Aliases: correction on undo stack · completion on undo stack · separate undo item
What it is
A stretch the system wrote—the word correction swapped in, the suffix completion appended—should occupy its own item on the undo stack, not fuse with typed letters before or after. One undo removes only what the system wrote; the typed prefix or the next word stays. If they fuse, undoing a bad correction also undoes a word the user just typed.
Why it happens
Typing, correction, and completion are three authors. If the stack melts them by time into “the current word,” authorship is lost and undo cannot aim at “the thing the system just did.” Correction fires on a space boundary and looks like part of the word; it is a replace command. Completion fires on a tap or Tab; it is an insert command. Both should push like paste. A separate item also lets “undo the correction” work without depending on correction’s private backspace gesture—that gesture may remain, but general undo must do the same job, or people who only know undo have no fallback. Fusion fails in a typical way: type a prefix, accept completion, undo, and the whole word vanishes when the user only wanted the completion’s tail gone.
Studying it
Build “type a prefix → system replace or complete → type the next word,” then press undo once and see where the document stops. Independent variables include whether correction and completion push separately, and whether undo shares a gesture with backspace. Dependent measures include whether the prefix remains, whether the next word is deleted, and whether users think that undo aimed at the system action. Do not count “tap the correction mark to restore” as this claim: that is a correction control, not the undo stack.
Where it stops holding
Ghost text not yet accepted has not been written and should not push. An IME candidate the user explicitly tapped is a confirmed insert, unlike correction, and still should not fuse with neighbouring keystrokes. Fields with correction and completion off have no such items. Someone else’s auto-edit in a collaborative document should not appear on my stack.
Applying it
- Push one undo record per silent replacement and per accepted completion, storing the range that was replaced or inserted.
- One undo should leave the prefix and drop the system write; accept with “type prefix—accept completion—undo.”
- General undo and restore-on-the-correction-mark should return to the same original string, so the two paths do not diverge.