- oakcore-rs: Rational/TimeRange/TimeRangeList/PixelFormat/SampleFormat
mirroring oakcore C++ semantics (91.6% coverage)
- oakundo: UndoCommand/UndoStack with vtable commands (99.6%)
- oakcommon: config/XML/VideoParams/logging etc. (89.8%, 516 tests);
XML via quick-xml, logging via the log facade
- oaktimeline: markers/workarea/edit commands (95.4%)
- oakaudio: processor/manager/sync/waveform/levelmeter (88.4%)
- unified -MMCCCC error codes across all C ABI headers (registry in
include/common/error.h; pass-through rule)
- olive::Variant moved node -> common (cross-module value type)
- oakcommon_videoparams_set_is_3d added to the C ABI
- M11 (oakplugin Rust rewrite) plan + notes.md freeze line for the
inter-module C ABI wiring
- config moves into oakcommon as ConfigStore + oakcommon_config_* C
API (INI storage, typed entries, error-handler injection); node and
render call sites keep OAK_CONFIG() macro shape via a local shim
that forwards to the C API; transition config stubs removed
- oakaudio: de-Qt all six classes, C ABI in include/audio with
refcounted handles (processor/manager/waveform/levelmeter/sync,
48 functions); PreviewAudioDevice moved in from render; recording
goes through oakcodec encoder; waveform extract uses probe +
ffmpeg_bridge decode (decode_audio needs M8 task system)
- fix re_sum_samples min/max init bug (values clamped to 0 for
same-sign ranges)
- every C API function has positive + error-path tests; suites:
oakcommon 193, oakaudio 36, oaknode 96, oakrender 42, oakcodec 18