feat(timeline): add durable attached clip chains - #35
Merged
Conversation
Author
Canonical QA ReportVerifier revision binding
Gate results
Inherited baseline failuresNone. The inherited unused-export and class-member ratchet drift was repaired on this branch. Environment blockersNone. Visual/browser artifacts
Overall✅ PASS — PENDING JUDGE No merge until a trusted judge records PASS for this exact head. |
…set duration An asset whose duration failed to probe arrives with durationSeconds 0, which safeDurationFrames mapped to a 1-frame sourceDuration. The end-edge trim clamp then read that as 'no source remaining' and turned any extend drag into a collapse to 1 frame, destroying the clip on commit. - safeDurationFrames now floors the source bound at the clip's own in-use source range, so unknown durations can no longer undercut it - clampTrimAmount floors maxExtend at zero on both edges, so an inconsistent source bound clamps an extend to a no-op instead of a negative delta that shrinks the clip
lightninglu10
marked this pull request as ready for review
September 3, 2026 23:56
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.
Touching timeline clips now behave as a durable attached sequence. Dragging an attached clip carries its touching tail, ripple trim and delete stop at an explicit break, and linked audio/video cohorts continue to move atomically.
Users can detach or reattach a clip from the timeline context menu. Attachment state survives project reloads and round-trips through the published editor surface and host-authoritative edit receipts. The editor surface version advances to 0.3.12.
The final host integration also preserves exact frame boundaries when a clip is moved from a non-zero frame, preventing rounded microsecond durations from creating one-microsecond overlaps. It preserves detached state for ordinary text items during native host reconciliation as well, so an unrelated detached tail cannot create a spurious revision or make a valid clip-chain drag ambiguous.
Verification
Verified at
66307357b847bb1e20c9d8dfd9a40adec54e6272: 719 test files and 5,374 tests passed, along with lint, type/boundary checks, changed-health ratchets, production and editor-surface builds, 43 Node headless checks, 19 edit contracts, real-browser QA, provenance verification, redaction checks, and the installed-consumer smoke test.Demo
Right-clicking an attached clip exposes the detach action:
After detaching, that clip moves independently while the remaining clips stay attached:
Watch the full interaction video