In VisualEditor's handling of observed DOM changes, a "simple change" is one guaranteed not to require the DOM to be re-rendered from the DM; in contrast a "complex" change is one that may require a re-render.
The existing heuristic (copied into https://gerrit.wikimedia.org/r/#/c/241144/10/src/ce/ve.ce.js ) has been to guess that an insertion is simple if both the prior selection and the new selection are collapsed cursors *and* the inserted text lies immediately before the new cursor. This is quite conservative; it doesn't include:
- Inserted text after, around, or away from the new cursor
- Inserted text that gets selected (as IME candidates often are)
- Any change that is a replacement (with some characters removed and some characters inserted).
In all these cases, the change handler will re-render the DOM from the DM if that would cause it to change, which could cause the IME to be closed in error.
It would be preferable to detect more changes as simple where that won't lead to rendering discrepancies. To decide when it would be safe to do so, research with multiple IME/platform combinations is needed to determine whether text input can "escape" the annotation context at the cursor and modify text that has different annotations.