# 26 — Incident 2026-05-09: Page Unresponsive + Posters Missing + Playback Black-Screen > Session log. Live document — updated as fix proceeds. Goal: future-me + other operators can read this and skip every dead-end I already walked. Status as of doc creation: **ONGOING** — partial fix applied, more under investigation. --- ## Symptoms reported by owner (in order) 1. "Browser arrflix is broken videos don't play at all" 2. "I can't even see a preview of the TV series / movie" 3. After first fix: page loads, posters render, but **"Page Unresponsive"** Chrome dialog before posters paint (screenshot 1) 4. After second fix attempt: posters render, but **"Abspielen"** (German Play button) instead of "Play"; **all backdrop art replaced by black**; **video plays as black screen** (screenshot 2) --- ## Root causes identified so far ### A — Browser hangs (resolved by fix #1) `/opt/docker/jellyfin/web-overrides/index.html` deployed copy was AHEAD of repo HEAD. md5 deployed `b97c1cb4` ≠ repo `d77c106b`. Someone hot-patched a `forceEnglishUI()` text-walker MutationObserver onto `document.body` with `subtree:true, characterData:true`. Walker rewrote `alt`/`title`/`aria-label` on every DOM mutation. Poster grid lazy-load fired it hundreds of times → main thread frozen → Chrome "Page Unresponsive". **Fix applied:** scp'd repo HEAD `index.html` over deployed, restarted container. Verified md5 matches. **Lesson:** never hot-patch the bind-mount. Always commit + redeploy from repo. Drift is invisible until something breaks. ### B — DB write failures (auto-resolved before this session) Agent investigation found `jellyfin.db` had been owned by uid 101000 (userns-remap leftover, see `~/.claude/projects/-home-admin-ai-lab/memory/project_nullstone_docker_userns.md`). Container ran as 1000 → SQLite Error 8: `attempt to write a readonly database`. By the time we re-checked, file was already `user:user`. Probably fixed during 23:22 container restart. **Lesson:** if `jellyfin.db` is unwritable, EVERY user-config save silently fails (HTTP 204 success, value not persisted). Check ownership FIRST when config writes don't stick. ### C — German "Abspielen" leak (NOT YET FIXED — current focus) User's `Configuration.UICulture` is `` for ALL 12 users. Tried POST `/Users/{id}/Configuration` with `UICulture: en-US` payload via `bin/force-english-all-users.sh`. Server returned HTTP 204 but field did NOT persist on subsequent GET. **POST silently drops UICulture**. Possible explanation: the `UserConfiguration` model in 10.10.3 may have removed the per-user UICulture field, OR the `Users` table schema (verified) has no UICulture column AND no Preferences row stores it. Doc 15 claims `Configuration.UICulture` is authoritative, but that doc is from when fix worked. Behavior may have shifted. Traefik DOES rewrite `Accept-Language: en-US,en;q=0.9` on every request (`force-en-accept-lang@file` middleware) AND rewrites locale chunk JS path so `de-json.X.chunk.js` → `en-us-json.667484b4a441712c7e05.chunk.js`. Verified via curl: `de-json.X.chunk.js` returns 107425 bytes of English content. **So why German leaking?** Service Worker cache. Browser's SW serves stale German chunk from CacheStorage, never hits network, never sees the Traefik rewrite. SW from before the lockdown was deployed. Tried: `Clear-Site-Data: "cache", "cookies", "storage"` Traefik response header on `/web/index.html`. Verified live via curl. **But the user's browser STILL has SW cache** — SW intercepts the GET to `/web/index.html` and serves from cache, response from server (with Clear-Site-Data) never reaches browser cache layer. SW prevents its own death. ### D — Backdrops missing (NOT YET INVESTIGATED) User reports backdrop art (the wide background image behind episode cards) is now black for every show. Could be: - Image not in DB/cache (server returning empty) - CSS hiding backdrop element - SW serving stale 404 from a bad earlier session - Jellyfin metadata refresh interrupted ### E — Video black screen on play (NOT YET FIXED) Server logs show ffmpeg IS transcoding HEVC source → H.264 high@5.1 + libfdk_aac. But browser shows black. Earlier `/Sessions` proved DirectPlay worked for one client (RemoteEndPoint 82.31.156.86). Recent attempts: HLS segment 186.mp4 returned **499 (client closed connection)** + `POST /Sessions/Playing/Progress` returned **502 Bad Gateway** at 23:31:49 (during traefik momentary upstream-missing window). Possible causes: - SW intercepting HLS init segment, serving stale/wrong-mime - 10-bit HEVC source → H.264 transcode timing issue - CSS hiding `