Review of 3d242dea (MEDIUM 3, LOW 4-6):
- A file is timed on its own only from its first answer on: Chromium keeps
three to five of a worker's requests on the wire, and the rest waited past
the 30 s stall limit before they were sent, so a slow network with many
files never installed. Before an answer, the whole-install watchdog bounds
it; when nothing at all has moved for 30 s it now cancels every request
still open.
- Every file is fetched to its end even when another failed
(Promise.allSettled), so a retry copies the finished content-hashed files
(a part-downloaded wasm is no longer thrown away because another file
stalled). A file already in this version's precache is left as it is.
- Two registrations of the worker (the site's, and the app's own after WebKit
lost the site's install) never both download a content-hashed file: Web
Locks let one fetch it while the other waits (alive, not stalled), then
copies it.
- Each precache records when it was begun; activate removes only precaches
begun before its own, so it never takes a newer version's files from
another registration's install. The older-version case is documented.
- Lookups of precached files ask this version's precache first, then every
cache: an older runtime copy of a file whose name does not change no
longer wins.
- prerender-static.sh never lists a .br or .gz copy in the precache.
Co-Authored-By: Claude Opus 5.5 <[email protected]>