This appears to be a combination of you setting the paragraph to be inline, Chrome deleting all parent nodes when an inline node is emptied, and ProseMirror not being able to deal with a node’s inner structure (the li > span structure you create for the items) being messed with.
You can probably work around this by using block structure for your list items (either with flexbox, absolute positioning, or inline blocks).
The default block-splitting command keeps the block markup for both sides of the split (unless it happens at the very end of the block). You can define your own special-purpose splitting command for when the cursor is in the middle of a task list item, and bind that to enter with a higher priority than the default.
Ok, the core problem was contenteditable=false being set on the span for the checkbox - removing that solved it. Additionally, i refactored the code to not use inline elements and instead use flexbox - thanks for the hint.
Lifting multiple items is not possible
I’m not sure what i’m doing wrong then. For example, in the basic example, with the standard bullet list, the menu item for lifting items is not visible at all if the selection spans multiple items. Is there something i’m missing?
Clicking checkbox puts caret at beginning of input
I’m able to solve this in Safari by using user-select: none on the respective element. This fix does not work in Chrome unfortunately. I think what’s missing in the ProseMirror API is a handleMouseDownOn / handleMouseUpOn alongside the handleClickOn handler (unless i’m missing something). With the MouseDown handler i think i could call e.preventDefault() to solve the problem. I can create an issue for that on GitHub if you think it’s a feasible suggestion.