ARRFLIX/bin
s8n 917d21b3be doc 28 + INC7: fix prod black-screen via SW cache pin
Five sibling agents converged on root cause:
jellyfin-asset-immutable Traefik router (priority 90) was matching
/web/serviceworker.js (Jellyfin PWA's actual SW filename), pinning it
with Cache-Control: public, max-age=31536000, immutable. The
priority-100 jellyfin-html-nocache router only excluded the literal
path /web/sw.js, missing serviceworker.js.

Stale SWs from earlier ARRFLIX iterations intercepted /Videos/* and
/web/* fetch events, returning cached/empty bytes. Result:
MediaSource appendBuffer got bad data -> black <video>. INC6's
Clear-Site-Data: "cache" couldn't fix it (per MDN spec, "cache"
excludes SW registrations; "storage" would have worked).

Fix: added jellyfin-sw-nocache router at priority 250 in
/opt/docker/traefik/config/dynamic.yml on nullstone, forcing
cache-no-store@file on /web/serviceworker.js + /web/sw.js. Hot-reload
via Traefik file provider, no docker restart.

Verified at the wire (curl -I /web/serviceworker.js now returns
no-cache, no-store, must-revalidate; main.jellyfin.bundle.js still
immutable as intended) and via headless Chromium probe of MNS S1E4
(33s of currentTime advance, readyState 4, videoWidth 1920x1080,
no errors, both s8n admin and guest user).

bin/prod-vs-dev-compare.py also lands as a one-shot diff helper used
during the investigation.
2026-05-09 02:50:00 +01:00
..
add-jellyfin-user.sh force English everywhere on all 9 users + wrapper 2026-05-08 23:46:13 +01:00
apply-26-incident-fixes.sh doc 26: case CLOSED — final state + 8 forbidden patterns 2026-05-09 02:03:39 +01:00
english-lockdown-runner.sh docs+bin: English-only lockdown — re-apply runner + doc 20 2026-05-08 17:04:12 +01:00
force-english-all-users.sh doc 15: force English UI for all users (plan + script) 2026-05-08 04:22:04 +01:00
headless-test-v2.py doc 26 INC4: black band + 4K HDR slow transcode + v2 test + methodology audit 2026-05-09 01:46:47 +01:00
headless-test.py doc 26 INC2+INC3: pin backdrop, transparent sub-sections 2026-05-09 01:21:01 +01:00
inject-shim.py web: english-lockdown shim — pin locale + hide switchers 2026-05-08 17:04:03 +01:00
prod-vs-dev-compare.py doc 28 + INC7: fix prod black-screen via SW cache pin 2026-05-09 02:50:00 +01:00