What problem does it solve? Progressive web app caching and update behavior is full of silent failure modes: stale service workers serving old builds, updates that never reach installed users, and precache lists that break on every deploy. This Skill captures the hard-won operational knowledge for this arcade's PWA shell so changes to sw.js, the manifest, or offline behavior do not reintroduce fixed bugs. ## Core Features & Use Cases - Cache strategy guidance: Explains the cache-first precache of hand-authored shell files, why Vite-hashed JS/CSS is deliberately excluded, and why individual cache.add calls are used instead of cache.addAll. - Update flow rules: Documents the deliberate no-skipWaiting decision, the waiting-worker detection prompt (src/ui/swUpdate.ts, UpdateBar.tsx), and the three easy-to-get-wrong rules around registration.waiting, installed state, and guarded controllerchange reloads. - Debugging traps: Covers the stale-service-worker trap that makes a correct fix look broken, the stale dist/ build trap, and why the in-app browser pane cannot register a service worker. - Use Case: You rebuilt the app but the browser still shows the old version. This Skill tells you to unregister service workers, delete caches, and rebuild dist/ before concluding your fix failed. ## Quick Start Explain why my PWA change is not showing up in the browser after rebuilding and how the service worker update prompt works.