Open the cached dashboard when mobile navigation stalls #353

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

Product gap

The installed dashboard has a cached application shell, but same-origin navigations wait indefinitely when the mobile network stalls without resolving or rejecting. During captive portals, tunnel failures, or network transitions, operators can remain on a blank loading screen even though My Work, Today, Drafts, and offline capture are already cached.

Vertical slice

Bound same-origin dashboard navigations with an abortable deadline. A stalled launch must abort network work and return the cached shell; when no shell exists it must return a deterministic offline response rather than hang. Late network completion must not overwrite the shell cache, while healthy navigations and existing HTTP/auth boundaries remain unchanged.

Acceptance criteria

  • A never-settling same-origin navigation is aborted at a bounded deadline and resolves to the cached dashboard shell.
  • A timed-out navigation without a cached shell returns deterministic HTTP 504 guidance instead of remaining pending.
  • Late network completion after timeout cannot replace the response or write the shell cache.
  • A later healthy navigation succeeds and refreshes the cached shell normally.
  • Completed 401/client errors remain visible; completed 500/502/503/504 responses retain existing cached fallback.
  • API, non-GET, static-asset, and cross-origin behavior remains unchanged.
  • The app-shell cache revision advances atomically, focused behavioral tests pass, and the full suite is green.

Non-duplication evidence

All 179 historical issues through #351, zero open PRs, recent commits, and releases through v0.1.0-rc.533 were inspected. #226 added fallback only after fetch rejection, #230 handled completed outage responses, #303 bounded live polling, and #305 bounded background delivery. None bounds a pending service-worker navigation. Current frontend/service-worker.js calls fetch(request) without an AbortController or deadline, and current service-worker tests have no never-settling navigation case.

## Product gap The installed dashboard has a cached application shell, but same-origin navigations wait indefinitely when the mobile network stalls without resolving or rejecting. During captive portals, tunnel failures, or network transitions, operators can remain on a blank loading screen even though My Work, Today, Drafts, and offline capture are already cached. ## Vertical slice Bound same-origin dashboard navigations with an abortable deadline. A stalled launch must abort network work and return the cached shell; when no shell exists it must return a deterministic offline response rather than hang. Late network completion must not overwrite the shell cache, while healthy navigations and existing HTTP/auth boundaries remain unchanged. ## Acceptance criteria - A never-settling same-origin navigation is aborted at a bounded deadline and resolves to the cached dashboard shell. - A timed-out navigation without a cached shell returns deterministic HTTP 504 guidance instead of remaining pending. - Late network completion after timeout cannot replace the response or write the shell cache. - A later healthy navigation succeeds and refreshes the cached shell normally. - Completed 401/client errors remain visible; completed 500/502/503/504 responses retain existing cached fallback. - API, non-GET, static-asset, and cross-origin behavior remains unchanged. - The app-shell cache revision advances atomically, focused behavioral tests pass, and the full suite is green. ## Non-duplication evidence All 179 historical issues through #351, zero open PRs, recent commits, and releases through v0.1.0-rc.533 were inspected. #226 added fallback only after fetch rejection, #230 handled completed outage responses, #303 bounded live polling, and #305 bounded background delivery. None bounds a pending service-worker navigation. Current `frontend/service-worker.js` calls `fetch(request)` without an AbortController or deadline, and current service-worker tests have no never-settling navigation case.
timmy self-assigned this 2026-08-08 23:50:06 +00:00
timmy closed this issue 2026-08-08 23:56:16 +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#353
No description provided.