ROOT CAUSE (from instrumented logs):
1. Duplicate entry IDs in LazyVStack — loadMore appended entries
that already existed. IDs 37603/37613 appeared twice, causing
"undefined results" from SwiftUI.
2. Offset drift — marking entries as read shifted the unread filter
results. offset=30 no longer pointed to page 2; entries moved.
3. loadMore returned +0 entries because offset was past the shifted
end of the filtered dataset.
FIXES:
1. Deduplication: loadMore filters out entries whose IDs already
exist in the array before appending.
2. Use entries.count as offset instead of a separate counter.
This naturally accounts for deduplication and status changes.
3. hasMore based on whether new (deduped) entries were actually
added, not just API page size.
Removed all debug logging.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>