W4 fix lane proof (branch w4-fix, head 21f3b16, dry run 7095, headless bundled Chromium)
- Screen 2 Blackout hold: judge hold.mjs, 9 of 9 holds on each surface (none YYY, mid-hold look change YYY, mid-hold timeline start YYY) on screen 2, desk, phone (was screen 2 4 of 6). One tap releases on all three, 3 of 3 each (tap.mjs). The stage card now keeps #killHost in the document across repaints and #boBtn updates in place.
- Desk tap on the live mood tile: probe.mjs desk.tapLiveTileAgain before [703], after [703] (was live []).
- Phone latched hit: top line reads "STROBE / latched, tap to stop" with Stop 51x44 at 390x844 and 844x390, visible on the Mixer tab too; the latched pad shows a pulsing amber HELD tag; Stop clears both.
-
tlName at 1366x768: 88 px (was 48 in this data, 18 in the judge run); set list pick shrinks to 78 px. Scroll 1366x768, 1536x864 and 1920x1080 equal the viewport.
- Close on a stubbed /api/shutdown: 0 page errors and 0 /api requests in the next 5 s (was 6 TypeErrors). Close stops the SSE, the screen 2 link, every timer and the resize observers.
- Rig now under caps: /api/level KEY 25 gives raw level 25 on fids 1 to 3; cells read "5% · cap 5" with class capped and the hatched cap mark; FOH reads cap 10.
- desk.html map label: "Tap a light to pick it, Shift adds or removes, hold a light to find it in the room." No lasso claim.
- Tutorial: chapters 4, 6, 7, 9 edited in build-help.py and rebuilt; check-controls.mjs 147 of 147 controls resolve.
- Effects: a mood recall that ends running effects shows "Effect stopped by Anthem." on screen 2 and the phone (fxtest.mjs); an Undo of the effect start shows nothing (fxundo.mjs).
Sweep (sweep.mjs): desk 1536x864, 1366x768, 1920x1080; screen 2 1920x1080, 1536x864; phone 390x844, 844x390: scroll = viewport, 0 targets under 44 px, 0 console errors, 0 responses >= 400. regress-v2.sh 7095: GREEN 14 passed. Shots: v2-shots/fix2-*.png.