The cache-first SW never revalidated the HTML, so a device that loaded the app once kept serving the old bundle forever (new deploys never landed). Now: network-first for navigations/HTML (fresh on every online load, cached shell as offline fallback), cache-first only for immutable hashed assets. Bumped CACHE to director-v2 so the stale v1 cache is purged on activate. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>