Soul found that an ENOBUFS-truncated showinfo list gave a plausible rate with the
stalls measured only on the file's start, and that deleting the visualGapMs line
in feel.mjs left every check green. Both now fail a test.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A MediaRecorder webm declares no frame rate (`1k tbr`), so readVideo fell back to
30 fps without saying so, and the truth interval used the resampled period, not
the capture's own gaps. A Perlines v2 capture stalling to 34-50 ms per frame read
as tightly bounded as a 60 fps one. The rate now comes from the frame times, the
interval's period is at least the 95th-percentile source gap, and the report says
when the gap sets it. Adds a 0.5 MB Perlines capture fixture and tests.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>