toastsim/scripts
monster b13750f88a deploy: gapless additive deploys, and verify the bundle not just the page
The outage: deploy did rm -rf on the web root, THEN docker cp. Anyone loading
in that window — or holding a cached index.html from before it — asked for a
hashed bundle that no longer existed, and nginx answered with HTML: "Failed to
load module script... MIME type of text/html". Exactly what got reported.

Two changes:
- Merge instead of swap. Hashed bundles never collide, so old builds' assets
  stay alive for stale HTML while the new index.html takes over. No gap, no
  orphaned caches. Disk is a few MB per deploy; prune by hand if it ever
  matters.
- The verify step now follows the chain the browser follows: fetch the live
  index.html, extract the script src, and assert it serves as
  application/javascript. A 200 on the page proved nothing — the page was
  200 all through the outage.

Verified live: page → index-CmCk0pc0.js → application/javascript, and the
game boots to the title screen on partly.party/toastsim.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 11:04:57 +10:00
..
cf-flux.py THE CRITIC'S FACE: he brings his own portraits now 2026-07-21 02:25:40 +10:00
deploy.sh deploy: gapless additive deploys, and verify the bundle not just the page 2026-07-22 11:04:57 +10:00
gen-art-batch.sh THE FRYER: day 24 — twice, love. once for cooked, once for golden 2026-07-21 03:46:37 +10:00
gen-assets.sh gen-assets: heat lane — cooktops, pans, outdoor BBQ, utensils (seeds 181-219) 2026-07-19 13:45:40 +10:00