So I guess the code just isn’t aggressive enough then.
Doing some testing, what I’m seeing is that Chrome starts randomly expelling characters from the link during composition. You can reproduce this without ProseMirror by creating an editable element like this…
<div contenteditable=true><a href=/>one</a></div>
… selecting the ‘e’, and, with simplified Chinese IME, start typing ‘e’ characters. At the third, the last character of the composition (俄) is no longer part of the link. Once you commit the composition, all characters are moved out of the link. This kind of thing throws ProseMirror off (it assumes composition happens inside a single text node), causing it to redraw parts of the composed text, which triggers Chrome’s text duplication behavior.