v2.33.6 — parameter contracts + subprocess hygiene
Internal consolidation: a declarative parameter-contract validator and centralized subprocess hygiene.
- Added
src/utils/contracts.pyvalidate(params, rules, invariants)— one validator for required/type/enum/min/max/non-empty/parent-dir-exists plus custom invariants, returning consistent agent-friendly errors with coercion + defaults applied. Replaces scattered hand-written validation. - Changed
export_frame_as_stillandset_mark_in_out(clip + timeline) validate through contracts. Behavior preserved (same rejections);mark_in/mark_outcoerced to int. - Added
src/utils/proc.pysafe_run/safe_popen— subprocess wrappers defaultingstdinto DEVNULL so a child can't consume the MCP stdio protocol stream. Inline Python execution routes throughsafe_run.
Live-validated on DaVinci Resolve Studio 21.0.0.