Prevent post-action flashes before video holds#9
Draft
mmkal wants to merge 7 commits into
Draft
Conversation
commit: |
Playwright's recorded frame timestamps trail the action clock, so raw pre-action pieces could include completed-action frames before the captured hold. Start highlight timing before capture and replace the final 100ms of raw footage with the known pre-action screenshot.
mmkal
marked this pull request as ready for review
July 24, 2026 15:14
mmkal
marked this pull request as draft
July 24, 2026 15:37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
Video holds no longer leak completed action frames before replaying the pre-action state.
The renderer now maps video-mode timestamps onto Playwright's recorder clock:
The regression decodes every rendered frame before the hold and fails if it sees the completed action state. It also rejects the untrimmed recorder tail.
Videos
The same three fixtures attached to #7, regenerated from this branch:
Playwright captions and the account flow:
captions.webm
Dead-air compression, holds, pointer movement, and highlights:
dead-air.webm
Synthetic dialog rendering and pointer click:
dialog.webm
Relationship to #8
The current heads conflict in the constants and
videoPieces()sections. The tested resolution is mechanical:liveActionflag, raw-action rendering, and 50 ms decoder tail.With that resolution, a live typed fill uses raw frames from its calibrated highlight start through
actionEnd; ordinary holds still use the stable pre-action screenshot. The typed-fill spec, frame-ordering regression, and caption fixture pass in a synthetic merge.Validation
pnpm typecheckpnpm buildpnpm exec publintCodex session:
019f948f-9c73-7d02-b1d1-788391083076