v2.38.0
v2.38.0
Busy gate for long DaVinci Resolve operations — the first piece of the concurrency design for the documented stdio + networked two-instance setup.
Added
- Long synchronous Resolve calls (timeline export/import, scene-cut detection, subtitle generation, Dolby Vision analysis, folder/clip audio transcription) now register themselves in a cross-process sidecar, so both server instances see each other's work. A tool call that arrives while one is running waits up to 5 seconds and then returns a structured
RESOLVE_BUSYerror — newbusyerror category, retryable, withstate.busy_withandstate.age_seconds— instead of hanging silently inside the scripting bridge. Stale registrations (crashed process, or older than 2 hours) are ignored automatically, and an operation never gates its own thread.
Design decisions (recorded for future phases)
- Supported concurrency target: a single editor running multiple clients (stdio + networked instance + control panel), not multi-user.
- Confirm tokens remain per-instance; a cross-instance token failure will get a clearer message in a follow-up.
- Actor identity in destructive-op records and the AI-ops ledger is deferred to the governance-tiers phase.
Validation
- Offline unit suite: 1,032 tests, 0 failures, 0 errors. 9 new tests cover registration, owner-thread exemption, cross-thread gating, timeout/recovery, dead-pid and stale/corrupt sidecar handling, and the
_check()envelope. - Live-validated read-only against DaVinci Resolve Studio 21: free path passes through, simulated long op returns the structured busy envelope, gate releases cleanly afterward. No project state was modified.