Reject / redirect
- HTTP assets / shell → Cache API, not IDB
- File-shaped pipeline → consider OPFS
- Tiny sync flags only → memory / careful Web Storage
- Multi-device truth → server + sync policy (IDB is local)
Will it stick?
- Quota / eviction acknowledged (best-effort storage)
- Re-hydrate or degrade if data is gone
- Private mode / clear-site-data path
- iOS Safari hostility considered for “must persist” claims
- Optional:
storage.estimate / persist()
Schema & tabs
- Versioned migrations from every live
oldVersion
versionchange → close/reload old connections
blocked UX if upgrades stall
- Indexes planned (write cost) — not sprayed
Runtime
- No unrelated
await mid-transaction
- readonly by default; short readwrite
- Bounded reads (range / cursor) — no full-store dumps on hot path
- Main-thread decode cost considered (workers if heavy)
Product
- Source of truth when online?
- Conflict policy for multi-tab / multi-device?
- Offline queue vs cache-only clarity