SessionPool accepts headedHostCount; when > 0 it launches a second Chromium in headed mode and creates the first N sessions in it. Joiners (sessions N..count) stay headless in the main browser. Each headed context gets a 960×900 viewport — tall enough to show the full game table (deck + opponent row + own 2×3 card grid + status area) without clipping. Horizontal tiling still fits two windows side-by-side on a 1920-wide display. window.moveTo is kept as a best-effort tile-placement hint, but viewport from newContext() is what actually sizes the window (window.resizeTo is a no-op on modern Chromium / Wayland). Verified: 1-room tiled run plays a full game cleanly; 2-room parallel tiled had one window get closed mid-run, which is consistent with a user manually dismissing a window — tiled mode is a best-effort hands-on debugging aid, not an automation mode. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Golf Soak & UX Test Harness
Runs 16 authenticated browser sessions across 4 rooms to populate staging scoreboards and stress-test multiplayer stability.
Spec: docs/superpowers/specs/2026-04-10-multiplayer-soak-test-design.md
Bring-up: docs/soak-harness-bringup.md
Quick start
cd tests/soak
bun install
bun run seed # first run only
TEST_URL=http://localhost:8000 bun run smoke
(The scripts also work with npm run, pnpm run, etc. — bun is what's installed
on this dev machine.)
Full documentation arrives with Task 31.