v2.52.0
v2.52.0
edit_engine tighten now carries audio. Previously execute_tighten assembled a video-only variant — a speech-driven dead-air cut came out silent, with nothing in the preview or readback to warn you (#67).
Fixed
plan_tightenmirrors every kept video range onto its linked audio track(s) with identical source frames, so the assembled variant stays frame-locked and audible. Audio targets the item's detected linked audio tracks (the sameGetLinkedItemsmatchingexecute_swapuses), falling back to audio track 1 where a single linked A/V clip's audio lives.
Added
include_audioparameter onplan_tighten(defaulttrue). Passinclude_audio=falsefor the prior video-only assembly.- An
audio_accountingblock on theexecute_tightenconfirm preview and readback (planned vs. actual audio/video item counts), so a silent variant can no longer ship unnoticed. Old video-only plans re-executed against this build still work and are now loudly flagged as silent.
Validation
- Static + unit checks run:
test_import,audit_api_parity, the three drift guards, full offline suite (1193 passing) including 3 newplan_tightenaudio tests,npm pack --dry-run,git diff --check. - Live Resolve validation not run by the maintainer in this cut. The fix is the exact path behind the reported silent 2h54m variant;
tests/live_edit_engine_validation.pygains an assertion that the tightened variant's A1 track is non-empty — run it against a real A/V clip to confirm end-to-end before relying on it for a delivery.
Thanks to @chenyuxiaojin for the precise root-cause report and verified workaround.