Skip to content

fix(cli): check sees an SVG stroke drawing on, so it no longer calls it a dead stretch - #7250

Merged
miguel-heygen merged 1 commit into
mainfrom
fix/craft-svg-draw-on
Nov 5, 2026
Merged

miguel-heygen merged 1 commit into
mainfrom
fix/craft-svg-draw-on

Conversation

@miguel-heygen

Copy link
Copy Markdown
Collaborator

What

check no longer reports dead_stretch ("Nothing on screen changes for N s") while an SVG stroke draws on. The motion audit's "nothing moves" reads the same signature, so it stops saying it too.

Why

A whiteboard film drew its lines with the usual stroke draw-on (stroke-dasharray with a tweened stroke-dashoffset). The rendered frames showed each line drawing, but the craft pass reported the stretches as dead.

The liveness signature (motion-signature.browser.js) reads each element's box, opacity and paint (color, textShadow, fill, stroke). A dash offset tween moves none of them: the path's box and colour stay the same while the visible part of the line grows. So two frames of a line half drawn and fully drawn signed the same.

Released 0.9.15 on a 12 s film whose only motion is one path drawing on over 10 s: dead_stretch "Nothing on screen changes for 9.00 s (0.00–9.00 s)".

How

strokeDashoffset and strokeDasharray join the content paint channel, beside fill and stroke. Both are computed style in Blink, so attribute, CSS and inline-style tweens all show up.

Test plan

  • Unit tests added/updated:
    • fails without the fix: motion-signature.browser.chromium.test.ts "sees an SVG stroke drawing on, which moves no box and no color": in real Chromium, changing a path's stroke-dashoffset changes both the sweep and the liveness signatures. It fails with the two properties taken out.
    • motion-signature.browser.chromium.test.ts, motion-signature.browser.test.ts, motion-sample.browser.test.ts and craftAudit.test.ts (110) pass three runs in a row, with the Chromium suite running (not skipped).
  • Manual testing performed: the CLI built from this branch, check --json on the 12 s draw-on film above: ok: true, no craft or motion findings. Released 0.9.15 on the same film reports the 9 s dead_stretch.
  • Documentation updated (if applicable): none needed.
  • Comments follow CONTRIBUTING.md "Comments": no new comments.

Size

Two lines of source in one file and one test. One fix: the liveness signature sees a dash offset.

@heygengenesis heygengenesis Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: APPROVE · 0 blockers · 0 important · 0 nits · head 6ec1e38f

The fails without the fix: test holds. In real Chromium, with the two properties removed it fails with an identical sweep signature; with them in, all 48 Chromium tests in the file pass. All workflows on this head are green.

Scope

Read both files. paintChannel hashes raw computed values, and color already made every element's content-paint hash non-empty. So adding two inherited properties only changes the hash when a dash value actually changes; a still dasharray stays still. No prior reviews.

@miguel-heygen
miguel-heygen added this pull request to the merge queue Nov 5, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 5, 2026
@miguel-heygen
miguel-heygen added this pull request to the merge queue Nov 5, 2026
Merged via the queue into main with commit 644b166 Nov 5, 2026
69 checks passed
@miguel-heygen
miguel-heygen deleted the fix/craft-svg-draw-on branch November 5, 2026 16:15
SanHsien added a commit to SanHsien/hyperframes that referenced this pull request Nov 6, 2026
…view

Adopts heygen-com#7250 (SVG stroke drawing is not a dead stretch), heygen-com#7248
(contract check reads a timeline registered in a local script), heygen-com#7252
(comma-list selectors hidden by authored CSS), heygen-com#7238 (snapshot and
preview show a clip on the render frame), heygen-com#7237 (stalled cloud upload
retries) and heygen-com#7251 (per-scene SVG id namespacing), with prerequisite
heygen-com#6829. Defers heygen-com#7246 (needs the delivery limiter from heygen-com#6940) and heygen-com#7232
(needs the WebKit decode-first pipeline), with conditions in the
ledger. Watermark advances to b108f85.

Co-authored-by: Miguel Ángel <miguel.sierra@heygen.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SanHsien added a commit to SanHsien/hyperframes that referenced this pull request Nov 6, 2026
…view to heygen-com#7250

Adopts heygen-com#7310 (MPEG-4 Part 2 / MJPEG get browser-playable copies), heygen-com#7316
(check_report counts the copies a check waited for) and heygen-com#7317 (render reads
a composition src like the preview and refuses paths outside the project).
Defers heygen-com#7309 (needs heygen-com#6912); heygen-com#7314 does not apply. PR axis advances to heygen-com#7250
(heygen-com#7243 closed unmerged, heygen-com#7249 open and pinned as monitored; monitored 96->97).

Co-authored-by: Miguel Ángel <miguel.sierra@heygen.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant