The pairing field sat at the bottom of the Devices page, below the device grid — unreachable on any account with more than a screenful of devices (the user's dev account has ~480 accumulated test devices; scrolling 224k px to reach the field is a non-starter). The Add Device button at the top of the page is where pairing intent already lives, so the code input and Find device button now sit inside the Connect a KOReader Device modal as instruction step 6, with the confirm card swapping into the same modal (container keeps the pairing-lookup ids; the htmx error-toast listener scopes to #add-device-modal now). Verified live: modal renders the full instruction list + input, a wrong code swaps the templ error partial inside the modal, and claim still HX-Refreshes on success (modal state resets with the reload, paired device appears in the grid). ui-controls glossary where-fields and the COVERAGE row updated with the control's new home.
tests/ui — Playwright sweep (plan §7.5)
Real-browser sweep of the SSR/HTMX frontend. Dev server must be up on localhost:8765. Run inside the official image (no host browsers needed):
cd tests/ui
docker run --rm --network host \
-v "$PWD":/work -w /work \
mcr.microsoft.com/playwright:v1.49.0 \
bash -c "npm install --no-audit --no-fund && npx playwright test"
Personas (see rls_sweep.spec.ts): testuser (admin) and rls-phone
(restricted — Audiobooks hidden from them).
Coverage: COVERAGE.md enumerates every swept page/control per the
plan; new pages/controls get a line when added.