Manage Today blockers offline and sync on reconnect #533

Closed
opened 2026-08-11 02:19:43 +00:00 by timmy · 0 comments
Owner

Problem

Today issue details are available offline, but blocker controls disappear while offline. Operators can already reply, review, close, and acknowledge from saved work; changing the dependency that determines whether Today work is ready still requires a foreground connection. Retrying the current imperative add/remove API is also unsafe after an ambiguous successful response.

Product slice

Allow a saved Today issue to queue a desired blocker relationship while offline, persist that account-bound operation through reload, deliver it on reconnect/background sync, and update cached readiness only after the server returns the canonical dependency list.

Acceptance criteria

  • A saved issue opened offline exposes blocker add/remove controls and reports Queued only after durable outbox admission.
  • Reloading preserves the queued blocker change and shows it in Delivery activity for the originating account only.
  • Reconnect/background sync converges to the desired relationship and updates the cached dependency list and Today readiness after canonical confirmation.
  • Retrying after a lost success response is idempotent: already-present add and already-absent remove succeed without a false attention state.
  • Permanent upstream rejection remains actionable and does not optimistically mark blocked work ready.
  • Revoked/expired offline access purges or prevents delivery consistently with other private authored mutations.
  • Behavioral frontend, API, service-worker, and full-suite tests pass.

Evidence / non-duplication

frontend/dashboard.js hides blocker management for selectedIssueOffline; frontend/issue-sheet.js sends foreground-only imperative requests without an idempotency key; frontend/authored-outbox.js has no blocker mutation kind. Historical issue-title and recent-commit searches found dependency display/planning work (#435, #443, #531) and other offline mutation flows, but no durable offline blocker mutation.

## Problem Today issue details are available offline, but blocker controls disappear while offline. Operators can already reply, review, close, and acknowledge from saved work; changing the dependency that determines whether Today work is ready still requires a foreground connection. Retrying the current imperative add/remove API is also unsafe after an ambiguous successful response. ## Product slice Allow a saved Today issue to queue a desired blocker relationship while offline, persist that account-bound operation through reload, deliver it on reconnect/background sync, and update cached readiness only after the server returns the canonical dependency list. ## Acceptance criteria - [ ] A saved issue opened offline exposes blocker add/remove controls and reports **Queued** only after durable outbox admission. - [ ] Reloading preserves the queued blocker change and shows it in Delivery activity for the originating account only. - [ ] Reconnect/background sync converges to the desired relationship and updates the cached dependency list and Today readiness after canonical confirmation. - [ ] Retrying after a lost success response is idempotent: already-present add and already-absent remove succeed without a false attention state. - [ ] Permanent upstream rejection remains actionable and does not optimistically mark blocked work ready. - [ ] Revoked/expired offline access purges or prevents delivery consistently with other private authored mutations. - [ ] Behavioral frontend, API, service-worker, and full-suite tests pass. ## Evidence / non-duplication `frontend/dashboard.js` hides blocker management for `selectedIssueOffline`; `frontend/issue-sheet.js` sends foreground-only imperative requests without an idempotency key; `frontend/authored-outbox.js` has no blocker mutation kind. Historical issue-title and recent-commit searches found dependency display/planning work (#435, #443, #531) and other offline mutation flows, but no durable offline blocker mutation.
timmy added the
P1
backend
frontend
labels 2026-08-11 02:19:43 +00:00
timmy self-assigned this 2026-08-11 02:19:43 +00:00
timmy closed this issue 2026-08-11 02:32:31 +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#533
No description provided.