1# tools/check-songs 2 3`buck2 run //:check-songs` plays every song fast in a silent headless tab 4on the running dev server and prints what Jev did with each one: 5 6- the path it took, section by section: the section Jev picked and every 7 part's answer; 8- **late** answers, which arrived after their section began, so it played 9 its fallbacks; 10- **fallbacks** from the rate limit, a backoff, or an unusable answer; 11- problems Jev's core reported, and the page's warnings and errors. 12 13It exits nonzero when a song fails to evaluate or the page throws. 14 15``` 16buck2 run //:check-songs # every song, 4× speed 17buck2 run //:check-songs -- --speed 8 lightning-in-a-bottle system-one 18buck2 run //:check-songs -- --url http://localhost:4395 dial-up # another dev server 19``` 20 21Run from a worktree while the dev server serves another checkout, songs hear 22the worktree's `samples/`, and the output says so first 23(`tools/worktree-samples/`). The site's code is still that server's: to 24check a worktree's site or `jevCore` changes, run a dev server from the 25worktree on its own ports (tools/dev/CLAUDE.md) and pass `--url`, as 26`tools/measure` takes it. 27 28It needs `buck2 run //:dev` running and the devshell. Playwright and its 29browsers come from the flake (`.#playwright`, `.#playwright-browsers`), not 30npm. 31 32This complements `website/src/jev/allSongs.test.mjs` (`nix flake check`), 33which evaluates every song in Node against a stand-in Jev. This tool is the 34real thing: the browser, the scheduler, the relay and Jev itself. So it 35needs the dev server, and it spends real calls against the relay's rate 36limit. 37 38At high speed a section can be shorter than Jev's round trip. The parts 39request waits for the section's answer, so late answers at 8× are 40expected and do not happen at 1×.