Protect offline work from browser storage eviction #1110

Closed
opened 2026-08-19 03:20:19 +00:00 by rockachopa · 0 comments
Member

Problem

Device Setup says offline work is saved, but the browser may still evict IndexedDB and cache data under storage pressure. frontend/device-storage.js reports quota only and never checks or requests navigator.storage.persist(). No historical issue/PR title or recent commit covers persistent browser storage.

User flow

Device Setup reports whether offline work is protected, lets the user explicitly request protection, and truthfully handles protected, best-effort/denied, unsupported, and retryable error states without disabling offline work. The Private device storage panel reports the same status.

Acceptance

  • Opening setup checks persisted() but never calls persist() without a user gesture.
  • A dedicated >=44px action requests persistence once and rechecks confirmed state.
  • Protected, best-effort/denied, unsupported, and retryable failure states are distinct and truthful.
  • Unsupported protection is excluded from readiness totals; denied protection remains incomplete while offline work continues.
  • Existing private data, cache cleanup, and offline workflows remain unchanged.
  • Focused behavioral tests and full suite pass.
## Problem Device Setup says offline work is saved, but the browser may still evict IndexedDB and cache data under storage pressure. `frontend/device-storage.js` reports quota only and never checks or requests `navigator.storage.persist()`. No historical issue/PR title or recent commit covers persistent browser storage. ## User flow Device Setup reports whether offline work is protected, lets the user explicitly request protection, and truthfully handles protected, best-effort/denied, unsupported, and retryable error states without disabling offline work. The Private device storage panel reports the same status. ## Acceptance - Opening setup checks `persisted()` but never calls `persist()` without a user gesture. - A dedicated >=44px action requests persistence once and rechecks confirmed state. - Protected, best-effort/denied, unsupported, and retryable failure states are distinct and truthful. - Unsupported protection is excluded from readiness totals; denied protection remains incomplete while offline work continues. - Existing private data, cache cleanup, and offline workflows remain unchanged. - Focused behavioral tests and full suite pass.
timmy was assigned by rockachopa 2026-08-19 03:20:19 +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#1110
No description provided.