I assume you created some node that represented a page, and you then split the various content nodes inside of it and put them together again if content on that page is being removed. Have you added something to make sure you don’t join paragraphs that shouldn’t be joined that just coincidentally end/start at the page boundary? (should be doable by assigning an ID to each paragraph)
I wonder if it would not be possible to use widget decorations to simulate page splits instead. The advantage would be that one wouldn’t touch the content. One could have one user looking at the editor in pagination mode on a laptop and another looking at it in continuous mode on a mobile phone simultaneously.
No matter whether using decorations or page nodes – under all circumstances it seems like one is forced to do at least two renderings to find the page splits – unless one is able to calculate the exact size of everything on beforehand. So I wonder: Do you end up letting ProseMirror render whatever change, and if a page overflows then you rerender and make it cause another transaction? Is that fast enough for the user not to notice?