Register the font route ahead of precacheAndRoute so a font fetch uses CacheFirst with its ExpirationPlugin instead of being answered by the precache route. Fonts stay in the precache manifest; when the network fails and the runtime cache has no copy, the font comes from the precache. Source tests pin the expiration plugin, the precache fallback and the route order. Read the injected precache list in the production-build test as JSON and assert the index.html entry's revision there, so it no longer depends on matching the minified sw.js with a regex. Maestro task: 8fa0d0bd-4a52-4f09-ba68-41bdbdfda63b Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>