- Track: new InputDisconnectedEvent trims blocks_/block_array_indexes_
when a block edge is removed outside the Track's own operations
(block deletion, undo commands detaching a whole track). Previously
blocks_ kept dangling pointers and Project teardown crashed in
track_length() (ASan heap-use-after-free in oakengine_timeline_edit /
oakengine_sync). The persistent array map is intentionally not
rewritten so undo of remove_track can re-attach the clips; replace_block
guards the handler with ignore_block_disconnect_
- filefunctions: honor OAK_CONFIG_DIR to redirect the configuration
root; QStandardPaths ignores XDG_* on macOS, so the engine tests read
the real user config (a stale 0.1.x file) and failed frame-rate
assertions. All engine tests now set OAK_CONFIG_DIR to their tmpdir
- init test: chdir to the fixture directory before loading
project_with_footage.ove so the engine's moved-project footage
relocation does not rewrite the stored relative filename
- renderworkerpool: do not let the render worker inherit
QT_QPA_PLATFORM=offscreen from a headless host process; the worker
needs a real platform GL context and exited immediately otherwise,
failing oak_cli_transcode
The full pure-C facade used by the app: node/project/timeline/viewer/
undo/task/events/serializer/playback/preview/renderer/gizmo/color/
audio/footage/proxy/encoding/exporter/config/disk/ipc/plugin/worker
families, plus undo-group semantics, display renderer handles,
NodeFactory accessors, and per-family pure-C engine tests.
- new primitives: clip_toggle_enabled (per-block flip), clip_set_linked,
sequence_add_default_transition (config-driven, sequence timebase),
node_set_label_many, node_set_color_label, plus observation getters
- toggle-links, default transitions, enable toggles, color labels, and
block renaming now go through the facade; the stray empty undo entry
from block renaming is gone along the way
- nest/multicam/waveform-sync stay as documented composites: they mix
redo_now intermediate state, graph surgery, and app-side computation
that a single primitive cannot express faithfully
- the timeline panel's command execution paths are now fully migrated
- project node enumeration, type/name/label metadata, input
introspection (id, mapped value type, connection state)
- typed parameter read/write for the eight common NodeValue kinds
(int/float/bool/rational/color/vec2-4/combo/string), undoable via
NodeParamSetSplitStandardValueCommand - the split-track value path,
chosen after proving the standard-value command stores whole
variants into a single component track
- graph operations (add/remove/connect/disconnect) reusing the
engine's undo commands, all covered by undo/redo assertions