Send bounded Web Push digests for update bursts #569

Closed
opened 2026-08-11 12:49:56 +00:00 by timmy · 0 comments
Owner

Problem

When many unread updates accumulate, each subscribed device receives one sequential Web Push per update. A 50-item page can hold the poll loop for hundreds of seconds and flood a phone after an outage. Delivery history also grows per notification.

Vertical slice

  • Send at most 3 individual update notifications per device per poll.
  • Send one privacy-safe digest for the remaining updates, opening the unread Updates inbox.
  • Mark digest-covered notification IDs delivered only after the digest send succeeds, so retries neither lose nor duplicate work.
  • Render digest pushes without item-specific actions; keep current Mark read/Tomorrow actions on individual pushes.
  • Make the threshold configurable and preserve current device concurrency, lease fencing, and session authorization.

Acceptance tests

  1. Fifty unseen updates produce three individual pushes and one generic digest per device; no repository/title/author content is exposed.
  2. A successful digest atomically checkpoints all covered IDs and a repeated poll sends nothing.
  3. A failed digest leaves all overflow IDs retryable while retaining successful individual checkpoints.
  4. Digest clicks open #/my-work/updates and expose no Mark read or Tomorrow actions.
  5. Focused tests and full suite pass.

Discovered from current origin/main at c94fc53 after review of all historical issue titles and recent commits; no existing issue or commit implements burst aggregation/digests.

## Problem When many unread updates accumulate, each subscribed device receives one sequential Web Push per update. A 50-item page can hold the poll loop for hundreds of seconds and flood a phone after an outage. Delivery history also grows per notification. ## Vertical slice - Send at most 3 individual update notifications per device per poll. - Send one privacy-safe digest for the remaining updates, opening the unread Updates inbox. - Mark digest-covered notification IDs delivered only after the digest send succeeds, so retries neither lose nor duplicate work. - Render digest pushes without item-specific actions; keep current Mark read/Tomorrow actions on individual pushes. - Make the threshold configurable and preserve current device concurrency, lease fencing, and session authorization. ## Acceptance tests 1. Fifty unseen updates produce three individual pushes and one generic digest per device; no repository/title/author content is exposed. 2. A successful digest atomically checkpoints all covered IDs and a repeated poll sends nothing. 3. A failed digest leaves all overflow IDs retryable while retaining successful individual checkpoints. 4. Digest clicks open `#/my-work/updates` and expose no Mark read or Tomorrow actions. 5. Focused tests and full suite pass. Discovered from current `origin/main` at c94fc53 after review of all historical issue titles and recent commits; no existing issue or commit implements burst aggregation/digests.
timmy self-assigned this 2026-08-11 12:49:56 +00:00
timmy closed this issue 2026-08-11 12:59:32 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-dashboard#569
No description provided.