Mark All as Read — bulk read suppression with cross-pill sync #1

Closed
opened 2026-06-24 18:08:25 +00:00 by kutesir · 0 comments
Owner

Completed

Delivered 2026-06-24

What was built

Backend (Javis-API)

  • POST /me/read/bulk — accepts up to 500 storyIds, routes through store_read_receipt(), returns 204
  • Read suppression is cross-pill: unread_story_condition() applies to all /stories requests regardless of tag filter
  • StoriesPage schema extended with unreadCount, readSuppressedCount, lastReadSyncAt, activePill

iOS (jarvis)

  • APIClient.markAllRead(storyIds:pill:) — calls /me/read/bulk with deviceId
  • SignalFeedView: settings Button → Menu with "Mark all as read" + "Settings" items
  • Optimistic SwiftData inserts with rollback on API failure
  • Toast notification: "Marked N stories as read" slides up, auto-dismisses after 3.5s
  • showRead = true toggled automatically so suppressed stories disappear immediately

Verified

  • Marking 3 Tech stories reduced All pill total by exactly 3
  • Rollback works on network failure
  • Toast appears and auto-dismisses
## Completed ✅ **Delivered 2026-06-24** ### What was built **Backend (Javis-API)** - `POST /me/read/bulk` — accepts up to 500 storyIds, routes through `store_read_receipt()`, returns 204 - Read suppression is cross-pill: `unread_story_condition()` applies to all /stories requests regardless of tag filter - `StoriesPage` schema extended with `unreadCount`, `readSuppressedCount`, `lastReadSyncAt`, `activePill` **iOS (jarvis)** - `APIClient.markAllRead(storyIds:pill:)` — calls /me/read/bulk with deviceId - `SignalFeedView`: settings Button → Menu with "Mark all as read" + "Settings" items - Optimistic SwiftData inserts with rollback on API failure - Toast notification: "Marked N stories as read" slides up, auto-dismisses after 3.5s - `showRead = true` toggled automatically so suppressed stories disappear immediately ### Verified - Marking 3 Tech stories reduced All pill total by exactly 3 ✅ - Rollback works on network failure ✅ - Toast appears and auto-dismisses ✅
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kutesir/jarvis#1
No description provided.