I think you hit the nail on the head. I'll just add for clarity that (unless something has changed) Lemmy can only determine cross-posts based on matching links (whether it's an article, image, etc.). There is no way to correlate text cross-posts, which is why the UI (both the Lemmy web UI and Thunder) put the little "cross-posted from..." note in the body. At the very least, that helps the user find the original post from a cross-post, considering there is no special relationship in the back-end between cross-posted text posts.
Again, this was my understanding of how things worked last time I looked into this.
Oh good catch! You're absolutely right, we only look up the first 50 unread messages when we generate notifications.
https://github.com/thunder-app/thunder/blob/f02fbfa0f80c26c59d4e7a88fced8059807e6df7/lib/notification/utils/local_notifications.dart#L75
We would have to implement some paging here to retrieve all unread messages.
Tagging @darklightxi@lemmy.world as you might be interested in this!