From 3cee702980cbddc88a8406cfff582058d46e3de6 Mon Sep 17 00:00:00 2001 From: PSheon Date: Wed, 23 Sep 2026 11:03:24 +0800 Subject: [PATCH 01/27] docs(handoff): the worker-script rule, and the one stale load after a deploy Co-Authored-By: Claude Opus 5 (1M context) --- docs/HANDOFF.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 0e68450..d232350 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -117,6 +117,10 @@ stays in `lib/rt` with its tests. Read before touching it: - An overlay that mounts lazily must mount closed and open a frame later, or its first opening has no animation. - `next/link` calls `preventDefault` before the bubble phase: listen for navigation clicks in the capture phase. - A service worker hides requests from `page.route`: `test.use({ serviceWorkers: "block" })` where a test routes. +- A worker's script must never be answered from a cache: the bundler passes its chunk list in the URL fragment, which + a Request does not carry (`public/sw.js` lets `request.destination === "worker"` through). After a deploy, a reader + who already has the old service worker gets one page load under it, where every instrument that uses a worker sits + still; their next load has the new one. Verified on production on 2026-09-23. - Instruments hydrate a moment after the page. The E2E fixture in `smoke.spec.ts` waits for `[data-lab]`; a test with its own `page` must do the same before clicking. - 404s: see "How a URL that does not exist is answered" below before touching `dynamicParams`, `notFound()` or the proxy. From 471fdadb6d1d0bca1315a00b52c6458f12e35d02 Mon Sep 17 00:00:00 2001 From: PSheon Date: Wed, 23 Sep 2026 14:45:27 +0800 Subject: [PATCH 02/27] fix(ui): the outline button lost its edge on the light theme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported by paul-8b: the home page's secondary call to action, the error page's and the 404's read as plain text on light, measured border-top-color rgba(0,0,0,0) over a near-white background. The cva base carried `border border-transparent` and the outline variant added `border-input`. Both are border-colour utilities, so CSS source order decides, not class order. `