8192da5a12
Two federated-room bugs surfaced by the desktop build: 1. markAsRead only sent one unthreaded receipt at the main-timeline tail. With threadSupport enabled, thread replies leave the main timeline, so a reply newer than that tail was never covered — its per-thread notification count (which the room dot sums) lingered, so the unread dot never cleared even after reading. It also early-returned when the main timeline was already read. Now also send a threaded receipt at each unread thread's latest reply. 2. useAvatarDecoration never cached non-404 failures, so every avatar mount re-requested io.lotus.avatar_decoration for federated users whose homeserver 403s/502s the field — a refetch storm that spammed the console and hammered our homeserver's federation. Now cache definitive rejections (400/403/404) and give up after ~2 transient (429/5xx) attempts per session. Gates: tsc/eslint/prettier clean, build OK, 665 tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>