# SMOKE-TEST — pre/post-deploy verify checklist > Run this on dev BEFORE every prod promotion. Run again on prod AFTER deploy. ## Manual (5 min, browser) 1. **Login pristine** — open dev.arrflix.s8n.ru in a fresh incognito window. Hard-refresh. - [ ] ARRFLIX red logo top-left - [ ] No Movies/Series links visible (gated by auth) - [ ] User+Password fields, red Sign In button, "Welcome to ARRFLIX" footer - [ ] Background pure black, no #101010 stripe 2. **Login + home** — sign in as `test/123` (dev) or your account (prod). After login: - [ ] Wordmark logo dead-center in header - [ ] MOVIES + SERIES uppercase nav links left - [ ] 🔍 search icon right - [ ] No My Media row (.section0 hidden) - [ ] Continue Watching / Next Up / Recently Added rows render - [ ] No grey stripe at bottom of page when scrolled 3. **Movies / Series navigation** — click MOVIES. - [ ] MOVIES link gets red glow + bold (variant E active state) - [ ] No back arrow visible on header - [ ] No duplicate "Movies" h3 title - [ ] Library renders or shows spinner (Jellyfin viewContainer) 4. **Search** — click 🔍 icon. - [ ] Search input has red bottom underline on focus (NOT cyan ring) - [ ] Suggestions list red text on black 5. **Playback** — click any movie's Play button. Wait 10 seconds. - [ ] Video frame visible (not black, not white, not grey washed out) - [ ] OSD scrubber + play/pause buttons + settings icon click-able above video - [ ] Header bar HIDDEN during playback - [ ] Letterbox bars (top/bottom of video) are BLACK not white - [ ] Seek with scrubber works - [ ] Click settings → audio/subtitle dropdowns show red hairline ring on selected 6. **Browser tab favicon** — check tab. - [ ] Red ARRFLIX "A" mark (not Jellyfin triangle, not wordmark) ## Headless (1 min, automated) ```bash ssh user@nullstone 'docker run --rm --userns=host --network container:jellyfin-dev mcr.microsoft.com/playwright/python:v1.49.0-noble bash -c "pip install --quiet playwright==1.49.0 && python /tmp/smoke.py"' ``` (`/tmp/smoke.py` lives in testing/recipes/smoke-headless.py — TODO) Expected diag output: ``` { "loginRedSignIn": true, "wordmarkCenter": true, "myMediaHidden": true, "darkPctOnVideoFrame": 0.10, "osdControlsClickable": true, "letterboxBlack": true, "favIconAMark": true, "selectorOutlineRed": true } ``` If ANY false: rollback (testing/ROLLBACK.md) and check testing/ERROR-PATTERNS.md for the matching pattern. ## md5 chain check ```bash ssh user@nullstone 'md5sum /opt/docker/jellyfin/web-overrides/index.html /opt/docker/jellyfin-dev/web-overrides/index-dev.html' ssh user@nullstone 'docker exec jellyfin md5sum /jellyfin/jellyfin-web/index.html' ssh user@nullstone 'docker exec jellyfin-dev md5sum /jellyfin/jellyfin-web/index.html' ``` Expected on dev-only deploy: prod ≠ dev (intentional). Container view = host file (else inode swap, restart). Once prod-promoted: all 4 should match.