Make every PWA shell release content-addressed and atomic #511

Closed
opened 2026-08-10 20:20:52 +00:00 by timmy · 0 comments
Owner

Evidence

src/frontend_bundle.py derives the service-worker cache identity only from the bundled page JavaScript. CSS, manifest, icons, the worker dependency, and service-worker behavior can change without creating a new shell generation. Because the worker installs into that reused cache and activates immediately, installed mobile clients can retain stale assets or mix release contents. No open issue/PR or historical title covers non-JavaScript shell identity.

User impact

Installed and offline users receive a complete, internally consistent shell for every release, including CSS-only, manifest/icon, and worker-only changes. A failed precache preserves the last working generation.

Acceptance criteria

  • Changing only dashboard CSS, manifest, either icon, the standalone worker dependency, or service-worker behavior changes the shell cache identity.
  • Changing page JavaScript still changes both runtime and shell identities.
  • Identical source trees produce byte-identical build output.
  • Runtime filenames remain content-addressed by runtime bytes.
  • A failed new-generation precache does not activate or delete the previous shell.
  • Activation removes only old Stackchain shell generations and never unrelated caches.
  • Focused and full suites pass.
## Evidence `src/frontend_bundle.py` derives the service-worker cache identity only from the bundled page JavaScript. CSS, manifest, icons, the worker dependency, and service-worker behavior can change without creating a new shell generation. Because the worker installs into that reused cache and activates immediately, installed mobile clients can retain stale assets or mix release contents. No open issue/PR or historical title covers non-JavaScript shell identity. ## User impact Installed and offline users receive a complete, internally consistent shell for every release, including CSS-only, manifest/icon, and worker-only changes. A failed precache preserves the last working generation. ## Acceptance criteria - Changing only dashboard CSS, manifest, either icon, the standalone worker dependency, or service-worker behavior changes the shell cache identity. - Changing page JavaScript still changes both runtime and shell identities. - Identical source trees produce byte-identical build output. - Runtime filenames remain content-addressed by runtime bytes. - A failed new-generation precache does not activate or delete the previous shell. - Activation removes only old Stackchain shell generations and never unrelated caches. - Focused and full suites pass.
timmy self-assigned this 2026-08-10 20:20:52 +00:00
timmy closed this issue 2026-08-10 20:27:07 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-dashboard#511
No description provided.