Mark all as read from Drawer tree #75

Closed
opened 2026-08-04 23:20:37 +00:00 by TheAnachronism · 1 comment

What to build

Long-press a category or feed in the Drawer tree to open a context menu with Mark all as read. Confirm with the row’s Unread count, then mark every unread article in that row’s scope as read (category scope includes nested descendants). Do not change Selection when opening the menu. Optimistically update Unread counts and refresh the List hub when the current Selection could include those articles.

Product language: Mark all as read (not Catch up). Virtual feeds are out of scope for the menu in this ticket.

Server: catchupFeed with mode all, pairing feed/category id with is_cat correctly.

Acceptance criteria

  • Long-press on a category or feed row opens a context menu that includes Mark all as read
  • Virtual feed rows do not get this long-press menu in this ticket
  • Choosing the action shows a confirmation that includes the row’s Unread count and name
  • Confirming calls server catchup for that feed or category (mode all); category catchup includes nested descendants
  • Long-press / menu does not change the current Selection by itself
  • On success, Unread counts for the marked scope update optimistically (row zeroed; ancestors / descendants / All / Fresh adjusted in the same spirit as existing optimistic unread patches), then counters are reconciled
  • When the open Selection could include articles from the marked scope (exact row, descendant of a marked category, ancestor of a marked feed, or All / Fresh), the List hub headlines reload and jump to the top
  • Canceling the confirm dialog leaves marks and Selection unchanged
  • Automated coverage covers catchup client behavior and the “affected Selection” refresh decision; drawer/menu happy path covered at the highest practical pure/controller seam

Blocked by

  • None — can start immediately
## What to build Long-press a category or feed in the Drawer tree to open a context menu with **Mark all as read**. Confirm with the row’s Unread count, then mark every unread article in that row’s scope as read (category scope includes nested descendants). Do not change Selection when opening the menu. Optimistically update Unread counts and refresh the List hub when the current Selection could include those articles. Product language: **Mark all as read** (not Catch up). Virtual feeds are out of scope for the menu in this ticket. Server: `catchupFeed` with mode `all`, pairing feed/category id with `is_cat` correctly. ## Acceptance criteria - [ ] Long-press on a category or feed row opens a context menu that includes **Mark all as read** - [ ] Virtual feed rows do not get this long-press menu in this ticket - [ ] Choosing the action shows a confirmation that includes the row’s Unread count and name - [ ] Confirming calls server catchup for that feed or category (mode all); category catchup includes nested descendants - [ ] Long-press / menu does not change the current Selection by itself - [ ] On success, Unread counts for the marked scope update optimistically (row zeroed; ancestors / descendants / All / Fresh adjusted in the same spirit as existing optimistic unread patches), then counters are reconciled - [ ] When the open Selection could include articles from the marked scope (exact row, descendant of a marked category, ancestor of a marked feed, or All / Fresh), the List hub headlines reload and jump to the top - [ ] Canceling the confirm dialog leaves marks and Selection unchanged - [ ] Automated coverage covers catchup client behavior and the “affected Selection” refresh decision; drawer/menu happy path covered at the highest practical pure/controller seam ## Blocked by - None — can start immediately
Author
Owner

Done in 4b36fb6 with follow-up f72e1c9 — Drawer long-press Mark all as read (catchupFeed mode all), optimistic/reconciled counters, and List hub refresh including ancestor category Selections.

Done in 4b36fb6 with follow-up f72e1c9 — Drawer long-press Mark all as read (catchupFeed mode all), optimistic/reconciled counters, and List hub refresh including ancestor category Selections.
Sign in to join this conversation.
No description provided.