Closes the open gate from 2026-04-24-195210 handoff. Captures:
- two-host deploy topology trap (steel141 vs caddy CT) and corrected workflow
- viewport-gated visual: toolbar is display:none above 900px, so desktop
reloads were byte-for-byte identical regardless of toolbar.js version
- diagnostic chain that ruled out cache, service worker, and CDN before
finding the viewport gate
- remaining work: real-device mobile acceptance test only
Validator score: 90/100 (READY).
Wrong-path correction: previous DECISIONS.md and handoff said
toolbar.js deploys to /opt/sethmux/ 'on this host'. Caddy's
'root * /opt/sethmux' resolves against Caddy's filesystem, which is
on the caddy CT (192.168.0.185), not steel141. Deployed copy on
steel141 was harmless but unused; the served file came from caddy CT.
Symptom: 'mux.sethpc.xyz looks the same' after a successful steel141
'cp'. Resolution: scp static/toolbar.js caddy:/opt/sethmux/.
DECISIONS.md now documents the two-host split (Caddy serves static
assets from its own disk; ttyd on steel141 serves --index).
Captures: what shipped (Workspace dark refresh + compose bar in
static/toolbar.js, deployed to /opt/sethmux/), the manual-deploy gotcha
that left 3 prior fixes undeployed for a month, the Caddy-not-ttyd
serving path for static assets, and the mobile acceptance checklist
that's the only remaining gate.
Validator score: 88/100 (READY).