Paginate the unread updates inbox without slowing live refresh #147

Closed
opened 2026-08-06 23:21:29 +00:00 by timmy · 0 comments
Owner

Evidence

The live account currently has 210 unread Gitea notifications, while src/gitea_proxy.py requests only limit=50 and discards X-Total-Count. The mobile My Work UI presents that partial page as the complete inbox and says “Mark all,” leaving 160 updates undiscoverable. No open/closed issue title or recent commit covers notification pagination or completeness.

User flow

Keep the pooled live snapshot bounded to page 1, report “50 of 210 unread updates,” and let the user load subsequent pages on demand. Merge pages by notification ID, preserve loaded updates on retryable failures, and prevent duplicate concurrent loads.

Acceptance tests

  • Live snapshot fetches only page 1 and exposes total, page, and has_more.
  • A bounded no-store page endpoint loads only the requested next notification page.
  • Loading more merges unique IDs without refetching context or events.
  • Concurrent load-more taps are single-flight; errors retain existing updates and allow retry.
  • Final page removes the load action and reports the complete count.
  • Mobile controls are at least 44px and bulk acknowledgement remains capped at 50 loaded IDs.
## Evidence The live account currently has 210 unread Gitea notifications, while `src/gitea_proxy.py` requests only `limit=50` and discards `X-Total-Count`. The mobile My Work UI presents that partial page as the complete inbox and says “Mark all,” leaving 160 updates undiscoverable. No open/closed issue title or recent commit covers notification pagination or completeness. ## User flow Keep the pooled live snapshot bounded to page 1, report “50 of 210 unread updates,” and let the user load subsequent pages on demand. Merge pages by notification ID, preserve loaded updates on retryable failures, and prevent duplicate concurrent loads. ## Acceptance tests - Live snapshot fetches only page 1 and exposes `total`, `page`, and `has_more`. - A bounded no-store page endpoint loads only the requested next notification page. - Loading more merges unique IDs without refetching context or events. - Concurrent load-more taps are single-flight; errors retain existing updates and allow retry. - Final page removes the load action and reports the complete count. - Mobile controls are at least 44px and bulk acknowledgement remains capped at 50 loaded IDs.
timmy self-assigned this 2026-08-06 23:21:29 +00:00
timmy closed this issue 2026-08-06 23:31:28 +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#147
No description provided.