Skip to content

fix(engine): detect onUpdate callbacks and enable verification events - #3794

Merged
miguel-heygen merged 1 commit into
mainfrom
fix/dedup-onupdate-verification
Sep 9, 2026
Merged

fix(engine): detect onUpdate callbacks and enable verification events#3794
miguel-heygen merged 1 commit into
mainfrom
fix/dedup-onupdate-verification

Conversation

@miga-heygen

Copy link
Copy Markdown
Contributor

Summary

Fixes #3793 — static-frame dedup: onUpdate-driven motion in tween-free windows is predicted static and passes verification.

Root cause: Two blind spots working together:

  1. Predictor walked tween intervals from window.__timelines but ignored onUpdate callbacks — motion driven from a timeline's onUpdate in a tween-free window was predicted static.
  2. Verifier sought with suppressEvents: true, so onUpdate never fired and the frozen frame passed verification.

Fix (two changes):

  1. Predictor: when a timeline carries vars.onUpdate, mark its full span as animated so those frames are never predicted static.
  2. Verifier: seek with suppressEvents: false so the verification page behaves identically to the capture page. The verification page is already isolated (separate Page instance created by createStaticVerificationPage), so out-of-order event side effects cannot corrupt sequential capture.

Test plan

  • Existing static-dedup unit tests pass (16/16)
  • CI regression suite (captures will now correctly differ where onUpdate drives motion)
  • Registry hw-* blocks with onUpdate-driven boil render correctly with default dedup

— Miga

The static-frame dedup predictor walked tween intervals from
window.__timelines but was blind to onUpdate callbacks — motion driven
from a timeline's onUpdate in a tween-free window was predicted static.
The verifier compounded the gap by seeking with suppressEvents: true,
so the onUpdate never fired and the frozen frame passed verification.

Two changes:
1. Predictor: when a timeline carries vars.onUpdate, mark its full span
   as animated so those frames are never predicted static.
2. Verifier: seek with suppressEvents: false so the verification page
   behaves identically to the capture page. The verification page is
   already isolated (separate Page instance), so out-of-order event
   side effects cannot corrupt sequential capture.

Fixes #3793
@miguel-heygen
miguel-heygen enabled auto-merge (squash) September 9, 2026 01:47
@miguel-heygen
miguel-heygen merged commit 1aaa35d into main Sep 9, 2026
56 checks passed
@miguel-heygen
miguel-heygen deleted the fix/dedup-onupdate-verification branch September 9, 2026 01:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

static-frame dedup: onUpdate-driven motion in tween-free windows is predicted static and passes verification

2 participants