v2.37.3
v2.37.3
Deep-audit fixes, rounds two and three: agent-facing action discovery, crash-safe user-state persistence, and resource hygiene. No DaVinci Resolve scripting behavior changed.
Fixed
- Action-list drift: three tools' unknown-action error lists had drifted from their real dispatch —
timelineomittedclip_whereandaction_help;timeline_item_colorandgraphomittedaction_help. Agents recovering from a typo now see the full action set, and a static AST test keeps every tool's advertised list in both-way sync with its dispatch (including verifying docstring-advertised actions are real). - Crash-safe persistence: user-state files could be truncated by a crash mid-write; every affected reader resets to
{}on corruption, so the next save would silently wipe remaining user data. Writers now use atomic temp-file +os.replace:media-analysis-preferences.json(all analysis/caps/governance/update defaults, including theset_resolution_tier/set_caps_presetpaths now routed through the shared writer),update-check.json, the dashboard'sanalysis.jsontranscription patch, andtranscript-corrections.json. _safe_project_deletediscardedSaveProject()'s result when closing the current project before deletion; a failed save now surfaces as a warning in the response.- File-descriptor leak: the parent kept its copy of the control panel's log handle open after spawning the detached child.
Audit classes verified clean
Bare excepts, mutable default arguments, asyncio.run inside running loops, subprocess timeouts, docstring phantom actions, and silent-success swallows in metadata/marker/archive write paths.
Validation
- Offline unit suite: 1,023 tests, 0 failures, 0 errors (both unittest and pytest runners). Static checks clean. Atomic-writer round-trips (including corrupt-file recovery) verified directly.
- No Resolve scripting behavior changed; live test not required.