feat(studio): timeline glue swap — Timeline/TimelineCanvas onto the NLE engine#2212
feat(studio): timeline glue swap — Timeline/TimelineCanvas onto the NLE engine#2212ukimsanov wants to merge 4 commits into
Conversation
b36b4b5 to
a9ac3bd
Compare
ffac0fe to
08ca624
Compare
a9ac3bd to
d9e9715
Compare
08ca624 to
f07ff86
Compare
miga-heygen
left a comment
There was a problem hiding this comment.
Reviewed as part of the 25-PR NLE overhaul stack. Full stack review on #2205 (the keystone). This is one of the critical swap PRs — reviewed with extra scrutiny. No blockers. — Miga
c50d69d to
55e7fb7
Compare
3e2c01f to
5a92f6f
Compare
436fb8c to
3888f93
Compare
5a92f6f to
20115a6
Compare
miguel-heygen
left a comment
There was a problem hiding this comment.
Final rebase review: current head inspected, latest required checks pass, no unresolved blocking findings. Approving; stack order/invariants remain as specified.
3888f93 to
f6d6992
Compare
20115a6 to
4ba7711
Compare
f6d6992 to
7456861
Compare
4ba7711 to
9ea5097
Compare
7456861 to
5b35c76
Compare
9ea5097 to
0938959
Compare
miguel-heygen
left a comment
There was a problem hiding this comment.
Re-audit current head 0938959: required checks pass; no new actionable threads. Approving current head.
miguel-heygen
left a comment
There was a problem hiding this comment.
Re-reviewed current head and verified the addressed feedback and required behavior. Approval is for this exact head; Graphite mergeability may still be pending.
What: AssetCard — the sidebar asset tile (thumbnail, hover preview, click policy, context menu incl. add-at-playhead), unwired. Why: standalone sidebar concept; AssetsTab adopts it in the app-shell swap. How: new file against the coexistence layer (assetHelpers, AssetContextMenu, assetClickBehavior, assetPreviewStore); one TEMP(studio-dnd) entry until AssetsTab wires it. Test plan: tsc --noEmit; fallow audit clean.
…l form What: flips the canvas editing glue to its final NLE form (25 files): DomEditOverlay renders DomEditSelectionChrome/CanvasContextMenu, the gesture pipeline gains center-anchored corner resize (CapCut model) + z-order commit, dom selection/wiring/geometry-commit hooks move to the multi-select store API. Adds the anchored-resize characterization test. Why: first of three swap steps; the coexistence layer makes it compile-green without touching timeline or App glue. How: modified files to final content; no deletions (nothing is orphaned by this step — verified). Both characterization suites from the earlier PR stay green. Test plan: tsc --noEmit; bunx vitest run (full suite; anchored-resize suite passes from this PR on); fallow audit clean.
…LE engine What: flips the timeline glue to its final form (23 files): Timeline and TimelineCanvas rebuilt on TimelineLanes/TimelineOverlays, useTimelineClipDrag drives preview/commit through the new drag engine, range selection goes multi-select, playback loop moves to useTimelinePlayerLoop. Deletes the 9 old-engine files this orphans (group drag, marquee selection, snap targets, layer gutter, selection overlays + their suites) — each is compile- or gate-forced by this swap, verified by probe. Why: second swap step; timeline-only, canvas and App untouched. How: modified files to final content + forced deletions. playerStore/timelineEditing/timelineCallbacks stay at their coexistence form until the app swap (the old App still runs on them). Test plan: tsc --noEmit; bunx vitest run (full suite); fallow audit clean.
0938959 to
e73977c
Compare
5b35c76 to
9f3e9ac
Compare
…ngine (#2213) What: the final swap (43 files): App mounts EditorShell; contexts, hotkeys, sidebar (AssetsTab→AssetCard, toolbar, audio row), useTimelineEditing and the store drop the legacy single-select API and trimmed callbacks; deletes the 7 files this orphans (StudioPreviewArea, NLELayout, useTimelineGroupEditing, timelineLayerDrag + suites, legacy hook test); .fallowrc.jsonc lands at final content, dropping every TEMP(studio-dnd) suppression — everything shipped unwired is now reachable. Why: last step of the NLE integration; after this the tree is byte-identical to the previously-green integration checkpoint. How: modified files to final content + gate-forced deletions + suppression cleanup. Tree parity with checkpoint 86dd2a32b verified. Test plan: tsc --noEmit in studio, studio-server, core; bun run --filter @hyperframes/studio build; bunx vitest run (full suite); fallow audit clean with zero remaining TEMP entries; tree-diff vs 86dd2a32b empty.

What
flips the timeline glue to its final form (23 files): Timeline and TimelineCanvas rebuilt on TimelineLanes/TimelineOverlays, useTimelineClipDrag drives preview/commit through the new drag engine, range selection goes multi-select, playback loop moves to useTimelinePlayerLoop. Deletes the 9 old-engine files this orphans (group drag, marquee selection, snap targets, layer gutter, selection overlays + their suites) — each is compile- or gate-forced by this swap, verified by probe.
Why
second swap step; timeline-only, canvas and App untouched.
How
modified files to final content + forced deletions. playerStore/timelineEditing/timelineCallbacks stay at their coexistence form until the app swap (the old App still runs on them).
Test plan
tsc --noEmit; bunx vitest run (full suite); fallow audit clean.
Stack position 21/25 — studio NLE overhaul (CapCut-parity timeline + canvas). Graphite manages bases; merge from #2192 upward. Temporary
TEMP(studio-dnd)fallow entries (unwired-component windows) are all removed by #2213 (app-shell swap), whose tree is byte-identical to the fully-verified integration branch.