v2.48.0
Edit-engine hardening: trustworthy execute readback ahead of the first real-cut pilot. Live-validated end-to-end on a disposable synthetic-media project (24/24 checks).
Added
timeline_versioning(action="diff_timelines", params={from_timeline, to_timeline}): structural diff (added/removed/moved/trimmed+ summary) between two live timelines by name — read-only, no archived snapshots needed. Built for edit-engine variants, which are new-name timelines with no shared version chain. The item walk and snapshot comparison were factored out of the version-snapshot path (capture_timeline_clip_usage/compare_usage_snapshots) and reused.execute_tightenreadback now includesstructural_diff(source vs variant);execute_selectsreadback includes ausage_summary(per-track-type item counts — a diff against a source timeline is meaningless for a fresh assembly).
Fixed
execute_swapaudio accounting: the lift was video-only while the replacement appended linked video+audio, so item counts drifted on every swap. The lift is now scoped to the target's video track plus its linked audio tracks (GetLinkedItems, with a media-id track-scan fallback; items with no linked audio and audio-only timelines are handled gracefully). Readback reports per-track-typetrack_countsbefore/after plus anaudio_accountingblock, so swap symmetry is verifiable: the live pilot showsvideo 2→2, audio 2→2with one video and one audio item lifted.
Validation
- The live edit-engine harness gained four checks (tighten structural diff,
diff_timelinesagreement with readback, swap track-count symmetry, explicit linked-audio lift) — 24/24 green on Resolve Studio with synthetic media; original timelines untouched. - 16 new unit tests (live-diff capture/compare on mocks, swap audio-track helpers); offline suite at 1159.