squint: capture at twice the resolution

Every shot was taken at one image pixel per CSS pixel, so on any display
that is not 1x the report was stretching one pixel over four and every
screenshot looked soft. That is unusable for a reader who depends on being
able to see the thing clearly, which is most of the point of a tool that
takes pictures.

Captures are 2x now: a 390-wide phone viewport gives a 780-wide file, a
1280-wide desktop viewport gives 2560. The report shows them at CSS size,
so the extra pixels go into sharpness rather than into size, and clicking
one opens the full-resolution file -- zooming in finds real detail instead
of a bigger blur. `scale:` in squint.yaml takes 1 to 4 and defaults to 2.

The old force-device-scale-factor=1 flag is gone. It was there for
determinism, but determinism needs the scale to be the same everywhere,
not to be small, and it is now set explicitly through the protocol for
every shot rather than inherited from whatever display the machine has --
which is the stricter guarantee, not the looser one.

It also cost about eight seconds and eleven megabytes on a thirty-four
shot run, both of which are worth it.

Compare takes the scale as well, because the fix exposed a report quoting
two different numbers for the same page: the verdict said 780x2616 while
the label beside it said 390x1308. Measuring is done on every pixel there
is; everything a reader sees is quoted in CSS pixels, the same units as
the viewport in the config.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X1aAjLD4wvan3wsmkHPPh3
James Millscommitted parent d4c553e1f47e287b1474cdbd70cb2df674d47bbbc041ad7Browse files
5 files changed+64−20

Rendering diff…