- DM unread: the ring-eviction check ran in newMsg(), which MyMesh calls
before addDMMsg(), so the new message itself read as evicted -- the
first DM from a contact showed no badge and every later one was one
short with a false "+". Moved into addDMMsg() after the insert, and
run for every slot, so a contact whose unread entry was evicted by
someone else's message is flagged right away too.
- Channel overflow aggregate: ignore channels whose unread count is 0
(eviction can zero it with the flag left set), so the dashboard no
longer shows "0+ msgs" or a "+" borrowed from another conversation.
- Live Share scope: a stale index past the list's end now follows the
target, as the screen shows, instead of silently sending unscoped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>