Opening a room silently marks every thread you don't follow as read, so the Threads panel's "Unread" filter never shows them #314

Closed
opened 2026-10-05 01:26:04 -04:00 by jared · 0 comments
Owner

markAsRead (src/app/utils/notifications.ts, the "Clear per-thread notification counts too" block) runs whenever you view a room. It sends a threaded receipt for the last reply of every unread thread. The only exceptions are threads you follow (#217) and the open thread.

Measured: two threads in a room. You've replied in "root FOLLOWED"; "root OTHER" you've never touched. You're elsewhere while Bob adds 2 replies to each. Then you open the room and the Threads panel:

  • "root FOLLOWED" shows unread (2), the Mark all read chip appears, and clicking it works (the chip goes away). ✔
  • "root OTHER" is already read and is absent from the Unread tab. Nothing in the room tells you it got 2 new replies, apart from the plain "3 replies" count.

So the "Unread" filter, the "unread replies" row label and "Mark all read" (#165) only ever work for followed threads. Opening the room, which you need to do to reach the panel, has already cleared every other thread. Before you open the room, the room-list dot does count those replies, so the room looks unread, you open it, see nothing new in the main timeline, and the dot is gone.

Options:

  • Leave unfollowed threads' counts alone when viewing the room, and stop counting them toward the room's unread dot or badge (the "room is unread" problem #217 worked around). The Threads panel can still show them as unread until you open the thread or press Mark all read.
  • Or keep the current behaviour but say so: e.g. a one-time hint in the Threads panel ("Threads you haven't replied to are marked read when you open the room"), and drop the "Unread" filter for unfollowed threads.

Verified in the same pass: the paste-as-code offer works with a real multi-line JS paste (chip, then Format as code sends <pre><code class="language-js"> with indentation intact). The composer toolbar show/hide setting works (hiding Location removes "Share location"). Operator-only searches other than from: show "Add a word to search for, or a from:@user.", as designed.


Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny 30e2dbcd, cinny-desktop 8f67ec7, element-call 3b0050e8.

`markAsRead` (`src/app/utils/notifications.ts`, the "Clear per-thread notification counts too" block) runs whenever you view a room. It sends a threaded receipt for the last reply of **every unread thread**. The only exceptions are threads you follow (#217) and the open thread. **Measured:** two threads in a room. You've replied in "root FOLLOWED"; "root OTHER" you've never touched. You're elsewhere while Bob adds 2 replies to each. Then you open the room and the Threads panel: - "root FOLLOWED" shows **unread (2)**, the **Mark all read** chip appears, and clicking it works (the chip goes away). ✔ - "root OTHER" is already read and is **absent from the Unread tab**. Nothing in the room tells you it got 2 new replies, apart from the plain "3 replies" count. So the "Unread" filter, the "unread replies" row label and "Mark all read" (#165) only ever work for followed threads. Opening the room, which you need to do to reach the panel, has already cleared every other thread. Before you open the room, the room-list dot does count those replies, so the room looks unread, you open it, see nothing new in the main timeline, and the dot is gone. **Options:** - Leave unfollowed threads' counts alone when viewing the room, and stop counting them toward the room's unread dot or badge (the "room is unread" problem #217 worked around). The Threads panel can still show them as unread until you open the thread or press Mark all read. - Or keep the current behaviour but say so: e.g. a one-time hint in the Threads panel ("Threads you haven't replied to are marked read when you open the room"), and drop the "Unread" filter for unfollowed threads. Verified in the same pass: the paste-as-code offer works with a real multi-line JS paste (chip, then **Format as code** sends `<pre><code class="language-js">` with indentation intact). The composer toolbar show/hide setting works (hiding Location removes "Share location"). Operator-only searches other than `from:` show "Add a word to search for, or a from:@user.", as designed. --- _Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny `30e2dbcd`, cinny-desktop `8f67ec7`, element-call `3b0050e8`._
jared added the priority: lowuxarea: threads labels 2026-10-05 01:26:04 -04:00
jared closed this issue 2026-10-19 02:33:26 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#314