# testing/ Manual + automated verification + recovery for the ARRFLIX overlay (web-overrides/index.html) + branding.xml + system.xml. Read this folder before any theme edit, deployment, or recovery. ## Index | File | Purpose | |------|---------| | THEMING.md | Safe-edit checklist + layer model + specificity rules (links to docs/31) | | ERROR-PATTERNS.md | Catalog of every theme/deploy error so far + fixes | | HEADLESS-PROBE.md | Playwright + DOM-probe recipes for verifying changes | | ROLLBACK.md | Emergency revert procedures (overlay, branding, full prod) | | SMOKE-TEST.md | Manual 4-step verify checklist before/after deploy | | DEPLOY.md | Dev → prod promotion workflow (overlay swap + restart + verify) | | snipUSER-Es/ | Reusable bash, sqlite, playwright, ssh snipUSER-Es | | recipes/ | Step-by-step recipes for common tasks (apply theme variant, fix pw, etc) | | incidents/ | Post-mortems for past + future bugs (referenced from docs/26, 28, 30, 31) | ## Quickstart for "I want to edit the theme" 1. Read `THEMING.md` — pay attention to the layer model + L1/L2 paired rules 2. Edit `bin/inject-middle-theme.py`. Keep it dev-only, scoped under `body.arrflix-themed` 3. `python3 bin/inject-middle-theme.py` to regenerate `web-overrides/index.html` 4. scp the regenerated file to dev's overlay path (NOT prod) 5. `docker restart jellyfin-dev` — bind-mount inode swap requires restart 6. Run `SMOKE-TEST.md` checklist on dev 7. Hard-refresh the browser (Ctrl+Shift+R) — defeats Service Worker + HTTP cache 8. If green: promote per `DEPLOY.md`. If red: revert per `ROLLBACK.md` ## Why this exists Five+ regressions in 24 hours during 2026-05-09 (docs/26 INC1-5, docs/28 INC7, docs/30 v6-stable). Each one was the same anti-pattern: an opaque CSS rule painted over the video. Combined with bind-mount inode + browser-cache + XML-parse-silent-failures + Cineplex CSS shadow specificity → debugging nightmare. This folder is the institutional memory.