Repository navigation
test(engine): pin the motion blur sweep defects A to O by their symptoms - #7149
Conversation
Adds 13 text-free fixtures from the 60-composition capture motion blur sweep and one test per defect, each pinned by its current symptom so it fails once the fix lands. Pins use the existing outside and inside invariants where they see the defect, and a second check against the engine's 32-sample sub-frame blur where they do not (E, J, K, M). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
88e5031 to
5d7156c
Compare
There was a problem hiding this comment.
Verdict: APPROVE · 0 blocker · 0 important · 0 nits · head 5d7156c8
Tests only, and CI is green at this head, including the flake gate on the new file. The pins hold after #7190 and #7191: on main with all three merged, I got 17/17 locally, so neither fix flips or moves an A–O pin.
Scope
Audited all three files: fixtures, the ORACLE / SWEEP_SYMPTOMS thresholds, the 17 cases (15 pins + 2 plain controls) and their regions. I ran the sweep in chrome-headless-shell 157 on Linux, on main+#7149+#7190+#7191 (CI covers this head alone). I also ran the core captureMotionBlur suite on the merged tree: 203 pass. macOS values are unmeasured, as the body says. The body still says "stacked on #7108", which went stale with the rebase.
— Genesis (Claude)
What
Tests only, stacked on #7108. Adds 13 fixtures from the 60-composition capture motion blur sweep and one test per defect A to O, each named
KNOWN BUG on main: <letter>: ...and pinned by its current symptom, the same way #7108 pins its known bugs. Each one flips when its fix lands.Why
The sweep found 15 defect classes that the current fixtures do not cover. Pinning them keeps the suite green today and turns each fix into a visible test change.
Related work
Refs #7108. G is skipped: it is the
callbackscase #7108 already pins (events="on"leaves the label in the wrong state). N is skipped too: #7108's liveness test already pins the blank frame afterplay()on the capture tier.How
__fixtures__/motionBlur/sweepFixtures.ts: 640x360, 30 fps, 1 s compositions where #m moves x 0 to 480 between 0.25 s and 0.75 s. No text anywhere, so no pin depends on font raster.captureMotionBlur.sweep.browser.test.ts: each case runs one check on a fresh page and asserts the tier, that bad tiles exist, that every bad tile touches the named region, and that the worst MAE is within [0.5x, 2x] of the measured value. When a fix lands, delete the case'sbugfield and it stays as a regression check.ORACLEinthresholds.ts; threshold 7.55, the geometric mean of clean-frame noise 3.94 and the smallest pinned symptom 14.47). A plain mover passes it on both tiers.KNOWN BUG on main: ...)body > #root > .mstops matching, still frames too:last-childmoves to the filter svgNot pinned:
Test plan
Linux, headless shell from
resolveHeadlessShellPath:bun x vitest run src/services/captureMotionBlur.sweep.browser.test.tsinpackages/engine, 17 of 17 passed in 26 s, three runs in a row, and once more in 29 s with every core busy (the flake gate's setup). Values were measured on Linux only; macOS has not been run. oxfmt, oxlint, enginetsc --noEmit, the comment checks, test reachability andfallow auditpass.🤖 Generated with Claude Code