mirror of
https://github.com/software-mansion/argent.git
synced 2026-09-14 19:27:14 +08:00
73280bb152
The motion oracle borrowed screenshot-diff's DEFAULT_THRESHOLD, a value sized for a baseline held across sessions and machines and so obliged to absorb real drift. This comparison holds two captures one poll apart from a single live session, where a static screen reads back byte-identical: both capture paths are lossless PNG and the downscale is deterministic. The borrowed value put the gate at ~25.5 levels/channel, which mattered because spatially uniform change is all-or-nothing — every pixel moves by the same amount, so it clears the gate on all of them or on none, and MOTION_FRACTION is never the deciding term. A cross-fade slower than ~1.4s therefore counted zero pixels and reported settled mid-animation, over a screen still painted and still hit-testing; and being settled rather than timed-out, degradedReason stayed silent while updateBaselines could adopt a mid-fade frame as golden. 0.03 (~7.6 levels/channel) keeps a margin over the +5/channel drift the tests treat as the noise floor and moves that cliff out ~3.3x, to ~4.5s at full contrast. It stays a rate floor rather than a duration floor, so the comment now names the gate as the only term bounding what is left. This supersedes the parity pin below it: coordinated drift is covered instead by pinning the value and the direction, so restoring parity trips a test rather than silently re-widening the blind spot. The +25/channel case gives way to a two-sided bracket at +7/+8, and two samples of a 2s indigo-over-white dismissal — a distance deliberately between the new gate and the old — pin the regression itself.