docs/solutions/logic-errors/2026-04-12-structured-enter-and-backspace-need-editor-owned-keydown-paths.md
The first Android split/join proof row exposed a nasty failure shape:
Instead, both Android Appium and desktop Chromium collapsed to:
One before two middleThat proved the row was not only an Android transport problem.
Current slate-v2 was barely owning structural keyboard editing there.
Plain text insertion had good browser/input coverage, but plain unmodified:
EnterBackspaceDeletewere still falling through to browser DOM churn instead of the editor’s own structural operations.
For this row, browser DOM split/join behavior drifted far enough that commit from DOM lost the suffix.
Route the unmodified structural keys through editor operations in Editable:
Enter -> Editor.insertBreak(editor)Backspace -> Editor.deleteFragment(...) when expanded, otherwise
Editor.deleteBackward(editor)Delete -> Editor.deleteFragment(...) when expanded, otherwise
Editor.deleteForward(editor)Keep modifier variants out of scope for this narrow fix.
That was enough to turn the same semantic row green on:
This is exactly the kind of gap that looks like “Android weirdness” until you force the same sequence through desktop and see the same break.
The useful move is:
If a browser/input row depends on structural editing, do not trust browser DOM default behavior to preserve the model.
Own the structural key path in the editor first, then measure platform quirks on top of that.