Bound mobile Updates discovery with one atomic snapshot #753

Closed
opened 2026-08-13 16:20:08 +00:00 by timmy · 0 comments
Owner

Problem

Opening mobile Updates currently walks every unread page sequentially in the browser. At the supported 1,000-thread envelope this can require 19 serial round trips, has no client cancellation/deadline, and can assemble a moving partial inbox. The server already has a bounded concurrent unread_notification_snapshot() primitive used by Push.

Slice

Expose that primitive as one authenticated, no-store dashboard endpoint and use it for Updates triage launch. Replace the visible unread set only after a complete snapshot succeeds. Preserve the current inbox/checkpoint and show retry guidance on timeout or pagination churn. Manual first-page polling and Load older remain unchanged.

Acceptance

  • One dashboard request returns all unique unread threads as an atomic snapshot.
  • The request is bounded by the existing notification deadline and returns retryable 503 on timeout/churn.
  • Updates triage starts only after the complete snapshot replaces the visible unread set.
  • Failed discovery does not overwrite the inbox or resume/start a checkpoint.
  • Rapid taps share one discovery request; navigating away prevents triage opening.
  • Existing manual paging remains unchanged.

Evidence / non-duplication

frontend/dashboard.js currently calls notificationPager.loadAll() and frontend/my-work.js performs sequential page requests. src/gitea_proxy.py already provides bounded concurrent atomic discovery. All 749 historical issue titles and recent commits through de6d6d0 were reviewed: #749 added complete browser-side discovery, but no issue implements a single atomic server request for interactive triage.

## Problem Opening mobile Updates currently walks every unread page sequentially in the browser. At the supported 1,000-thread envelope this can require 19 serial round trips, has no client cancellation/deadline, and can assemble a moving partial inbox. The server already has a bounded concurrent `unread_notification_snapshot()` primitive used by Push. ## Slice Expose that primitive as one authenticated, no-store dashboard endpoint and use it for Updates triage launch. Replace the visible unread set only after a complete snapshot succeeds. Preserve the current inbox/checkpoint and show retry guidance on timeout or pagination churn. Manual first-page polling and Load older remain unchanged. ## Acceptance - One dashboard request returns all unique unread threads as an atomic snapshot. - The request is bounded by the existing notification deadline and returns retryable 503 on timeout/churn. - Updates triage starts only after the complete snapshot replaces the visible unread set. - Failed discovery does not overwrite the inbox or resume/start a checkpoint. - Rapid taps share one discovery request; navigating away prevents triage opening. - Existing manual paging remains unchanged. ## Evidence / non-duplication `frontend/dashboard.js` currently calls `notificationPager.loadAll()` and `frontend/my-work.js` performs sequential page requests. `src/gitea_proxy.py` already provides bounded concurrent atomic discovery. All 749 historical issue titles and recent commits through `de6d6d0` were reviewed: #749 added complete browser-side discovery, but no issue implements a single atomic server request for interactive triage.
timmy self-assigned this 2026-08-13 16:20:08 +00:00
timmy closed this issue 2026-08-13 16:27:33 +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#753
No description provided.