feat(core): structural insert — insertNodes + insertTimeline verbs (0.6.41)#71
Merged
Conversation
….6.41)
Completes the structural-editing CRUD surface (add/remove/reorder/insert).
Two positioned-insert compose verbs:
- insertNodes — insert a node at a position (before/after a sibling root id,
or an index) vs addNodes appending on top, so a new layer can land under
later nodes (e.g. a montage shot below the vignette/scrim grade)
- insertTimeline — splice a step/beat into a named beat ({into, before/after
/index, step}); validates the step's targets; unknown into/before/after or
a missing target is an orphan, never a silent drop
photoMontage/videoMontage now group the shot beats directly under the
"montage" beat (drop the redundant inner seq wrapper — timing-equivalent,
golden-safe), so the play order is addressable: insertTimeline {into:
"montage", after:"shot-1", step} splices a shot in. Reorder/removeTimeline
unaffected.
Insert creates elements, so the overlay carries the full node+beat JSON — a
consumer (reframe-studio) or the author supplies it; reframe does not
generate the montage shot payload (out of scope). Example overlay +
end-to-end montage insert test (asserts play order + paints under grade).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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
Completes the structural-editing CRUD surface (add / remove / reorder / insert). Insert is the last Spine 2 op; unlike reorder/remove (which patch existing addressable elements) it creates elements, so it needs new compose verbs. Scoped to the generic verbs only (per the roadmap's deprioritize-engine-primitives call) — the montage shot-payload generator is out of scope.
How
insertNodes— insert a node at a position (before/aftera sibling root id, orindex) vsaddNodesappending on top, so a new layer can land under later nodes (a montage shot below the vignette/scrim grade).insertTimeline— splice a step/beat into a named beat ({ into, before/after/index, step }); validates the step's tween/motionPath targets; unknowninto/before/afteror a missing target is an orphan.photoMontagenow groups the shot beats directly under the"montage"beat (dropped the redundant innerseqwrapper — timing-equivalent, golden-safe), so the play order is addressable asinto:"montage". Reorder/removeTimelineunaffected.Verification
verify-overlay … montage-insert.json→ 2 applied / 0 orphaned;montage-restructure.jsonstill 4 / 0reframe labelsrows unchanged by the flattenNotes
montageInsertShotpayload generator; node-insert into a nested group (root covers montage); exact neighbour-crossfade recompute across an insert (cosmetic, same tradeoff as remove).🤖 Generated with Claude Code