Every app module now reaches liboakengine exclusively through
oakengine_* C calls, EngineEventBridge subscriptions and app-side
handle headers (cliphandle/keyframehandle/nodevaluehandle/oakvaluehelper).
Direct C++ command construction, engine signal connect()s, and engine
type usage in MOC-visible signatures are gone: 557 -> 0 undefined
olive:: symbols in oak-editor.
- Waveform sync no longer treats uncached waveform regions as silence:
the envelope extraction now reports a per-window validity mask and the
correlation skips invalid windows on either side, improving accuracy
for partially cached clips
- Add stretch/speed sync: AudioWaveformSync::EstimateStretchAndOffset
searches a playback-rate range plus offset, and a new timeline
context action 'Synchronize by Waveform (Adjust Speed)' applies the
estimated rate as a clip speed change (with undo) when plain offset
alignment is inconclusive
- Footage properties dialog gains a Source Start Time field so the
value used by source-time sync can be viewed and edited manually
instead of relying solely on auto-detected metadata; applied via an
undo command, with Footage::ClearSourceStartTime() for removal
- Regression tests for masked correlation, stretch estimation, the
envelope validity mask, and source-start-time set/clear