[QA] Read-receipt regression guard: rooms stay read after Home/Direct mount, thread dot clears, decoration 403/502 storm gone #193

Closed
opened 2026-09-17 23:24:12 -04:00 by jared · 1 comment
Owner

Migrated from LOTUS_TESTING.md → Outstanding verification backlog on 2026-09-17.

Shipped and CI-green; needs one human pass. Close when every check below holds; on FAIL comment with what you saw, browser/OS, web vs desktop, theme, console errors.

  • Verified live

Unread dot on federated rooms + avatar-decoration console storm (2026-07):

  • Read receipts (regression guard — highest priority): open several rooms and open the Home/Direct tabs (which mark all orphan rooms read on mount) → rooms stay read, unread dots clear and don't come back. (A prior attempt sent a receipt for the thread root when a thread's replies weren't loaded, which the SDK treats as a main receipt at an old event and re-unread every room on every mark-read. Fixed + locked by notifications.test.ts.)
  • Thread dot: a room with an unread reply in a thread whose replies are loaded → its dot clears on read; for a thread not yet loaded, the dot clears once you open/load the thread. (mark-as-read now sends a threaded receipt only for a genuine loaded reply, never the root.)
  • With DevTools console open on federated rooms, the io.lotus.avatar_decoration 403/502 (and federated media) errors should not repeat on every scroll/mount — each failing user is now requested at most ~twice per session, so the storm (and its homeserver load) is gone.
_Migrated from `LOTUS_TESTING.md` → Outstanding verification backlog on 2026-09-17._ Shipped and CI-green; needs one human pass. Close when every check below holds; on FAIL comment with what you saw, browser/OS, web vs desktop, theme, console errors. - [ ] Verified live --- **Unread dot on federated rooms + avatar-decoration console storm (2026-07):** - **Read receipts (regression guard — highest priority):** open several rooms and open the Home/Direct tabs (which mark all orphan rooms read on mount) → rooms **stay read**, unread dots clear and don't come back. (A prior attempt sent a receipt for the thread _root_ when a thread's replies weren't loaded, which the SDK treats as a main receipt at an old event and re-unread every room on every mark-read. Fixed + locked by `notifications.test.ts`.) - **Thread dot:** a room with an unread reply in a thread whose replies are loaded → its dot clears on read; for a thread not yet loaded, the dot clears once you open/load the thread. (mark-as-read now sends a threaded receipt only for a genuine loaded reply, never the root.) - With DevTools console open on federated rooms, the `io.lotus.avatar_decoration` `403`/`502` (and federated media) errors should **not** repeat on every scroll/mount — each failing user is now requested at most ~twice per session, so the storm (and its homeserver load) is gone.
jared added this to the Manual QA backlog milestone 2026-09-17 23:24:12 -04:00
jared added the bugarea: threadsarea: notificationsqa labels 2026-09-17 23:24:12 -04:00
Author
Owner

Verified on the local dev homeserver with Playwright, capturing every /receipt/ request.

Read receipts / unread dots. Setup: the other user posted a thread root + a thread reply + a main message in Busy Room and a message in a second room while alice was logged out.

  1. login → title · Lotus Chat (unread) 2. open Busy Room → still · (the other room) 3. open Other Room → Lotus Chat 4. Home tab → Lotus Chat 5. Direct tab → Lotus Chat 6. +8 s → Lotus Chat.
    Receipts sent: 3 — two main receipts, both to the room's latest event; one thread_id-scoped receipt for the reply. Zero main receipts to a non-latest event (the old regression). Rooms stay read.

Decoration 403/502 storm. Intercepted /profile/@bob:localhost to always return 502, then scrolled the 400-message room up 12 screens and back down and opened the member list: 2 requests total for bob (the documented ≤2 cap), none more while scrolling. Alice's own profile: 2 requests.

Both parts hold — closing.

Verified on the local dev homeserver with Playwright, capturing every `/receipt/` request. **Read receipts / unread dots.** Setup: the other user posted a thread root + a thread reply + a main message in Busy Room and a message in a second room while alice was logged out. 1. login → title `· Lotus Chat` (unread) 2. open Busy Room → still `·` (the other room) 3. open Other Room → `Lotus Chat` 4. Home tab → `Lotus Chat` 5. Direct tab → `Lotus Chat` 6. +8 s → `Lotus Chat`. Receipts sent: 3 — two main receipts, both to the room's **latest** event; one `thread_id`-scoped receipt for the reply. **Zero main receipts to a non-latest event** (the old regression). Rooms stay read. **Decoration 403/502 storm.** Intercepted `/profile/@bob:localhost` to always return 502, then scrolled the 400-message room up 12 screens and back down and opened the member list: **2** requests total for bob (the documented ≤2 cap), none more while scrolling. Alice's own profile: 2 requests. Both parts hold — closing.
jared closed this issue 2026-09-18 00:40:55 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#193