squint: photograph a web application and say what moved
A visual regression tool that borrows the Chrome already on the machine and commits no baseline images. Both are the same decision. Stored baselines are what makes this kind of tool miserable: the baseline was rendered on one machine months ago and the candidate on another today, so font hinting, subpixel rounding and the processor architecture all differ, and every one of those reads as a change. The usual answer is to pin one exact renderer in a container -- about 300MB of it -- so the stored images match. squint renders both sides in the same run instead, on the same machine, seconds apart, so those differences cancel exactly and there is nothing left to pin. No container, no Git LFS, no -update ritual, no argument about which machine may regenerate a baseline. The baseline is a git worktree at any ref. Two commands. `check` diffs a revision against the working tree. `review` takes no baseline at all, which is the mode that matters: the bugs a person reports from a screenshot -- three badge sizes on one screen, a button whose label wraps a letter per line -- were never regressions. They shipped wrong and stayed wrong, and nothing with a baseline will ever find them. Scenarios are YAML and expand across every viewport and theme automatically, so the phone and dark renderings stop being the ones nobody checks. Steps are click, type, wait_for, wait and js; the last is the escape hatch, because a browser automation vocabulary grows without bound and capping it is cheaper than inventing a language. The tool measures and never calls a model, so it is useful on its own and in continuous integration. Judging what a difference means is a skill that reads result.json, which is not written yet. Dogfooded against Parley, which found three things in the first hour: that logging in per shot walks straight into an application's rate limiter, that a token minted from real randomness needs masking rather than seeding, and that a fixture reaching the real network is not a fixture. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1aAjLD4wvan3wsmkHPPh3
11 files changed+1581−0
Rendering diff…