MCP server integration for DaVinci Resolve Studio
This report summarizes scanner evidence for samuelgursky/davinci-resolve-mcp, a Python project with 3,467 GitHub stars. SynthScan examined 232,555 lines of code across 726 source files, recording 6529 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 41.5 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 4498 finding(s).
Are imports declared and package/API names verified? 879 finding(s).
Are wrappers, guards, and repeated structures necessary? 5293 finding(s).
Which changes need focused human review? 6529 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 6529 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.py | 64 | def _ensure_glyph_capable_stdio(): | CODE |
| LOW | install.py | 121 | def is_supported_python_version(version): | CODE |
| LOW | install.py | 126 | def is_abi_risk_python_version(version): | CODE |
| LOW | install.py | 345 | def windows_claude_desktop_config(): | CODE |
| LOW | install.py | 1449 | def verify_resolve_connection(python_path, api_path, lib_path): | CODE |
| LOW | install.py | 1820 | def rollback_to_previous_build(project_dir, *, initiator="cli"): | CODE |
| LOW | install.py | 1925 | def _print_update_apply_result(result, *, restart_on_change=True): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 186 | def test_op_is_recorded_in_ledger(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 193 | def test_perform_audio_classification(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 198 | def test_analyze_for_intellisearch_passes_flags(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 203 | def test_analyze_for_slate_valid_color(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 208 | def test_analyze_for_slate_invalid_color_rejected(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 213 | def test_analyze_for_slate_default_color(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 218 | def test_transcribe_audio_speaker_detection_passthrough(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 222 | def test_transcribe_audio_no_arg_when_unset(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 226 | def test_remove_motion_blur_requires_confirm_then_runs(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 262 | def test_remove_motion_blur_records_clip_id_in_ledger(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 271 | def test_perform_audio_classification(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 276 | def test_analyze_for_slate_invalid_color_rejected(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 281 | def test_remove_motion_blur_confirm_flow(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 289 | def test_speaker_detection_passthrough(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 293 | def test_legacy_clip_version_guarded(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 416 | def test_ai_result_treats_string_as_failure(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 423 | def test_ai_result_payload_surfaces_the_reason(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 429 | def test_intellisearch_string_return_is_not_reported_as_success(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 436 | def test_generate_speech_string_return_does_not_raise(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 488 | def test_clip_string_return_does_not_raise_attributeerror(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 494 | def test_folder_string_return_is_not_reported_as_success(self): | CODE |
| LOW⚡ | tests/test_resolve21_actions.py | 503 | def test_a_working_extra_is_unaffected(self): | CODE |
| LOW | tests/test_resolve21_actions.py | 238 | def test_unknown_action_lists_new_actions(self): | CODE |
| LOW | tests/test_resolve21_actions.py | 308 | def test_disable_background_tasks(self): | CODE |
| LOW | tests/test_resolve21_actions.py | 315 | def test_disable_background_tasks_legacy_guarded(self): | CODE |
| LOW | tests/test_resolve21_actions.py | 342 | def test_confirm_flow_and_settings_passthrough(self): | CODE |
| LOW | tests/test_resolve21_actions.py | 355 | def test_legacy_project_guarded(self): | CODE |
| LOW | tests/test_resolve21_actions.py | 363 | def test_capability_block_reports_new_flags(self): | CODE |
| LOW | tests/test_resolve21_actions.py | 374 | def test_capability_block_false_for_legacy(self): | CODE |
| LOW | tests/test_bulk_match_to_hero.py | 124 | def test_copy_grade_dry_run_returns_proposals(self): | CODE |
| LOW | tests/test_bulk_match_to_hero.py | 137 | def test_missing_target_appears_in_blocked(self): | CODE |
| LOW | tests/test_bulk_match_to_hero.py | 151 | def test_dry_run_all_blocked_is_failure(self): | CODE |
| LOW | tests/test_bulk_match_to_hero.py | 162 | def test_cdl_delta_method_returns_unsupported_error(self): | CODE |
| LOW | tests/test_bulk_match_to_hero.py | 185 | def test_execute_without_token_returns_confirm_required(self): | CODE |
| LOW | tests/test_bulk_match_to_hero.py | 195 | def test_execute_with_token_mutates(self): | CODE |
| LOW | tests/test_destructive_decorator_coverage.py | 32 | def test_every_registered_tool_is_decorated(self) -> None: | CODE |
| LOW | tests/test_destructive_decorator_coverage.py | 53 | def test_decorator_pairs_with_mcp_tool(self) -> None: | CODE |
| LOW | tests/test_destructive_decorator_coverage.py | 70 | def test_destructive_op_only_on_registered_tools(self) -> None: | CODE |
| LOW | tests/test_validation_guards.py | 50 | def test_missing_path_rejected(self): | CODE |
| LOW | tests/test_validation_guards.py | 54 | def test_nonexistent_dir_rejected(self): | CODE |
| LOW | tests/test_custom_timeline.py | 51 | def test_basic_timeline_creation(): | CODE |
| LOW | tests/test_custom_timeline.py | 66 | def test_custom_timeline_creation(): | CODE |
| LOW | tests/test_import_from_drp.py | 94 | def test_import_prproj_is_refused_and_points_to_bridge(self): | CODE |
| LOW | tests/test_import_from_drp.py | 141 | def test_relink_calls_relinkclips_per_existing_root(self): | CODE |
| LOW | tests/test_import_from_drp.py | 153 | def test_relink_noops_without_existing_roots(self): | CODE |
| LOW | tests/test_import_from_drp.py | 160 | def test_aaf_skips_sanitize_and_notes_relink_na(self): | CODE |
| LOW | tests/test_import_from_drp.py | 182 | def test_enumerate_template_drp(self): | CODE |
| LOW | tests/test_import_from_drp.py | 189 | def test_extract_produces_importable_drt(self): | CODE |
| LOW | tests/test_import_from_drp.py | 216 | def test_extract_drops_other_timelines_mpfolder_blocks(self): | CODE |
| LOW | tests/test_import_from_drp.py | 264 | def test_name_not_found_reports_available(self): | CODE |
| LOW | tests/test_import_from_drp.py | 279 | def test_full_extract_and_import_glue(self): | CODE |
| LOW | tests/test_import_from_drp.py | 319 | def test_refuses_on_the_never_saved_untitled_project(self): | CODE |
| LOW | tests/test_import_from_drp.py | 335 | def test_refusal_is_hard__no_override_flag_reopens_it(self): | CODE |
| 4065 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_static_undefined_names.py | 41 | self.assertEqual(undefined, [], "undefined names found:\n" + "\n".join(undefined)) | CODE |
| HIGH⚡ | tests/test_issue_report.py | 227 | const github = {rest: {issues: {addLabels: async (args) => { calls.push(args.labels); }}}}; | CODE |
| HIGH | tests/test_tool_schema_null_defaults.py | 4 | becomes a schema like ``{"type": "string", "default": null}``: it advertises a | STRING |
| HIGH⚡ | tests/test_media_analysis.py | 434 | self.assertIn(".filter(context => context.active || context.resolve_current)", HTML) | CODE |
| HIGH⚡ | tests/test_media_analysis.py | 435 | self.assertNotIn(".filter(context => context.can_load_resolve !== false || context.active || context.resolve_cur | CODE |
| HIGH | .agents/hooks/source_media_guard.py | 172 | """Split on shell separators so `ffprobe x && rm y` is checked as two. | STRING |
| HIGH⚡ | src/analysis_dashboard.py | 5097 | boot: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5098 | projects: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5099 | allProjects: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5100 | activeContext: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5101 | resolveMedia: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5103 | mediaETag: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5104 | mediaPollTimer: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5106 | mediaLastRefresh: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5107 | indexStatus: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5110 | setupDefaults: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5111 | setupSchema: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5112 | projectDialogCleanup: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5123 | clipList: null, // last /api/clips response | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5124 | currentClipId: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5125 | currentClipData: null, // last /api/clips/<id> response | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5126 | currentShotIndex: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5127 | currentShotData: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5128 | currentTranscriptData: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5129 | currentTranscriptSegmentIndex: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5132 | editingSegmentDraftIndex: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5135 | panelStateTimer: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5136 | lastPanelStateAt: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5138 | searchTimer: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5139 | searchResults: null, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5143 | selectionAnchor: null, // clip_id used as range-selection anchor | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5144 | contextMenu: null, // currently-open context menu element | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5302 | if (!pages) return null; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5303 | if (requested && pages[requested]) return requested; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5305 | if (current && pages[current]) return current; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5306 | return DEFAULT_SUBPAGES[panelName] || Object.keys(pages)[0] || null; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5311 | const subpage = subpageFor(next, options.subpage || options.subpageTarget); | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5415 | if (subpage && SUBPAGE_LABELS[next]?.[subpage]) { | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5422 | history.replaceState(null, '', hash); | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5428 | if (r.view === 'shot' && r.currentClipId && r.currentShotIndex != null) { | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5428 | if (r.view === 'shot' && r.currentClipId && r.currentShotIndex != null) { | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5522 | const clips = Number(status.counts?.clips || 0); | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5525 | detail: `${clipLabel(clips)} indexed · ${formatBytes(status.size_bytes || 0)}`, | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5535 | const hiddenRecords = Math.max(0, Number(counts.total || 0) - Number(counts.source_clips || clips.length)); | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5544 | const projectName = state.activeContext?.project_name || media?.project?.name || state.boot?.project_name || 'Reso | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5552 | resolveStatus = media?.status || media?.error || 'Resolve connected'; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5554 | resolveStatus = media?.status || bootResolve.error || 'Connection pending'; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5564 | : (inventoryPending ? 'Reading Media Pool inventory…' : (media?.error || media?.status || 'Resolve inventory pen | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5636 | const hiddenRecords = Math.max(0, Number(counts.total || 0) - Number(counts.source_clips || clips.length)); | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5642 | const resolveOnline = !!media?.resolve_available || handshake; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5644 | const offline = (media || resolveInfo.error) && !resolveOnline; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5751 | const install = tool.install || null; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5751 | const install = tool.install || null; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5752 | const cmd = install && install.command ? install.command : ''; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5753 | const note = install && (install.requirement_note || install.notes) ? (install.requirement_note || install.notes | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5756 | const installBlock = (!ready && install) ? ` | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5908 | state.mcpStatus = payload || null; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5908 | state.mcpStatus = payload || null; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5910 | state.mcpStatus = { success: false, error: error?.message || String(error) }; | CODE |
| HIGH⚡ | src/analysis_dashboard.py | 5991 | const roots = state.projects?.related_project_roots || state.boot?.related_project_roots || []; | CODE |
| 445 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | install.py | 85 | # ─── Colors (disabled on Windows cmd without ANSI support) ──────────────────── | COMMENT |
| MEDIUM | install.py | 38 | # ─── Version ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 49 | # ─── Console encoding ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 106 | # ─── Platform Detection ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 224 | # ─── Resolve Path Detection ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 332 | # ─── MCP Client Definitions ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 543 | # ─── Server Entry Builder ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 765 | # ─── Config File Operations ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 1334 | # ─── Virtual Environment ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 1399 | # ─── Connection Verification ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | install.py | 2064 | # ─── Main Install Flow ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | install.py | 1542 | # ─── Interactive UI ─────────────────────────────────────────────────────────── | STRING |
| MEDIUM⚡ | install.py | 2370 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM⚡ | install.py | 2372 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2134 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2136 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2191 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2193 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2251 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2253 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2281 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2283 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2454 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | install.py | 2456 | # ══════════════════════════════════════════════════════════════════════ | STRING |
| MEDIUM | tests/test_resolve21_actions.py | 19 | # ── Stubs ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_resolve21_actions.py | 165 | # ── Tests ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_granular_2104_parity.py | 23 | # ── Stubs ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_granular_2104_parity.py | 143 | # ── resolve_control preset tools ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_granular_2104_parity.py | 213 | # ── project attributes ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_granular_2104_parity.py | 237 | # ── media_pool_item get_clip_timeline ──────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_granular_2104_parity.py | 281 | # ── timeline get_selected_timeline_items ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/live_workaround_verification.py | 99 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_fuse_dctl_authoring.py | 46 | # ─── Fuse template generators ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_fuse_dctl_authoring.py | 140 | # ─── DCTL template generators ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_fuse_dctl_authoring.py | 206 | # ─── Lua compilation of every Fuse template ────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_fuse_dctl_authoring.py | 301 | # ─── MCP tool surface — fuse_plugin ────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_fuse_dctl_authoring.py | 387 | # ─── MCP tool surface — dctl ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_fuse_dctl_authoring.py | 481 | # ─── Filesystem round-trip on a temp directory ─────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_write_enforcement_ratchet.py | 295 | # ── Granular server ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_spec_lint_wiring.py | 10 | # ── Fakes ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_spec_lint_wiring.py | 183 | # ── Tests ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_variant_audio_accounting.py | 29 | # ── stubs ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_variant_audio_accounting.py | 204 | # ── fixture ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_v233_helpers.py | 70 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_v233_helpers.py | 72 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_v233_helpers.py | 133 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_v233_helpers.py | 135 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_v233_helpers.py | 193 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_v233_helpers.py | 195 | # ──────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_resolve_bridge.py | 1227 | # ── Windows (issue #106) ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_resolve2104_actions.py | 17 | # ── Stubs ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_resolve2104_actions.py | 104 | # ── media_pool_item get_timeline ───────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_resolve2104_actions.py | 171 | # ── selection probe ordering ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_resolve2104_actions.py | 196 | # ── render set_settings warnings ───────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_grade_loop.py | 129 | # ── the ladder ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_grade_loop.py | 324 | # ── end to end, real pixels ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_grade_loop.py | 38 | # ── .cube arithmetic ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_resolve2104_preset_actions.py | 116 | # ── layout_presets list ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_resolve2104_preset_actions.py | 135 | # ── render_presets list_burnin / delete_burnin ─────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_resolve2104_preset_actions.py | 166 | # ── resolve_control user preferences presets ───────────────────────────────── | COMMENT |
| 270 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | install.py | 1104 | except json.JSONDecodeError: | CODE |
| HIGH | install.py | 1652 | except OSError: | CODE |
| HIGH | install.py | 73 | except (LookupError, UnicodeEncodeError): | CODE |
| HIGH | install.py | 1510 | except ValueError: | CODE |
| HIGH | install.py | 1625 | except (OSError, ValueError): | CODE |
| HIGH | install.py | 1640 | except OSError: | CODE |
| HIGH | install.py | 80 | except Exception: | CODE |
| HIGH | tests/test_timeline_versioning.py | 117 | except ValueError: | CODE |
| HIGH | tests/live_fuse_smoke.py | 46 | except Exception: | CODE |
| HIGH | tests/live_fuse_smoke.py | 71 | except Exception: | CODE |
| HIGH | tests/live_fuse_smoke.py | 133 | except Exception: | CODE |
| HIGH | tests/live_fuse_smoke.py | 220 | except OSError: | CODE |
| HIGH | tests/live_fuse_smoke.py | 229 | except Exception: | CODE |
| HIGH | tests/live_fuse_smoke.py | 204 | except Exception: | CODE |
| HIGH | tests/test_fuse_dctl_authoring.py | 224 | except OSError: | CODE |
| HIGH | tests/live_multicam_setup_validation.py | 111 | except Exception: | CODE |
| HIGH | tests/live_script_smoke.py | 97 | except Exception: | CODE |
| HIGH | tests/live_metadata_publish_validation.py | 78 | except Exception: | CODE |
| HIGH | tests/test_port_owner_pid.py | 130 | except Exception: | CODE |
| HIGH | tests/test_port_owner_pid.py | 136 | except OSError: | CODE |
| HIGH | tests/live_fusion_keyframe_validation.py | 66 | except Exception: | CODE |
| HIGH | tests/test_resolve20_api.py | 125 | except Exception: | CODE |
| HIGH | tests/live_path_probe.py | 63 | except Exception: | CODE |
| HIGH | tests/live_path_probe.py | 112 | except Exception: | CODE |
| HIGH | tests/live_path_probe.py | 40 | except Exception: | CODE |
| HIGH | tests/live_path_probe.py | 106 | except OSError: | CODE |
| HIGH | tests/live_path_probe.py | 53 | except Exception: | CODE |
| HIGH | tests/live_metadata_field_inventory_validation.py | 149 | except Exception: | CODE |
| HIGH | tests/test_resolve_bridge.py | 2865 | except Exception: | CODE |
| HIGH | tests/test_timeline_brain_db.py | 96 | except RuntimeError: | CODE |
| HIGH | tests/live_duplicate_clips_validation.py | 58 | except Exception: | CODE |
| HIGH | tests/live_sync_event_validation.py | 80 | except Exception: | CODE |
| HIGH | tests/offline_guard.py | 680 | except OSError: | CODE |
| HIGH | tests/offline_guard.py | 741 | except OSError: | CODE |
| HIGH | tests/offline_guard.py | 758 | except OSError: | CODE |
| HIGH | tests/test_control_panel_ipv6_loopback.py | 69 | except OSError: | CODE |
| HIGH | tests/test_auto_run.py | 21 | except Exception: | CODE |
| HIGH | tests/live_resolve21_validation.py | 280 | except Exception: | CODE |
| HIGH | tests/live_resolve21_validation.py | 619 | except Exception: | CODE |
| HIGH | tests/live_drp_roundtrip_verification.py | 248 | except Exception: # noqa: BLE001 | CODE |
| HIGH | tests/test_script_plugin.py | 219 | except OSError: | CODE |
| HIGH | tests/live_fusion_delete_keyframe_validation.py | 92 | except Exception: | CODE |
| HIGH | tests/live_fuse_diagnose.py | 61 | except Exception: | CODE |
| HIGH | tests/live_fuse_diagnose.py | 116 | except Exception: | CODE |
| HIGH | tests/live_fuse_diagnose.py | 218 | except Exception: | CODE |
| HIGH | tests/live_fuse_diagnose.py | 225 | except Exception: | CODE |
| HIGH | tests/live_fuse_diagnose.py | 209 | except OSError: | CODE |
| HIGH | tests/test_resolve_busy.py | 27 | except OSError: | CODE |
| HIGH | tests/test_page_lock.py | 46 | except ValueError: | CODE |
| HIGH | .agents/hooks/frame_verification_guard.py | 96 | except OSError: | CODE |
| HIGH | resolve-advanced/server/aaf_probe.py | 362 | except Exception: | CODE |
| HIGH | resolve-advanced/server/aaf_probe.py | 522 | except Exception: | CODE |
| HIGH | resolve-advanced/server/aaf_probe.py | 1281 | except (KeyError, AttributeError, TypeError, ValueError): | CODE |
| HIGH | scripts/headless_differential.py | 474 | except Exception: | CODE |
| HIGH | scripts/resolve_bridge_probe.py | 61 | except (OSError, IOError): | CODE |
| HIGH | scripts/roundtrip_matrix.py | 95 | except Exception: | CODE |
| HIGH | scripts/resolve_headless.py | 89 | except Exception: | CODE |
| HIGH | scripts/resolve_headless.py | 227 | except ProcessLookupError: | CODE |
| HIGH | scripts/roundtrip_rich.py | 264 | except Exception: | CODE |
| HIGH | scripts/roundtrip_rich.py | 80 | except Exception: | CODE |
| 108 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CHANGELOG.md | 11938 | except Exception as exc: | CODE |
| MEDIUM | install.py | 191 | def require_supported_python(python_path, label="Python"): | CODE |
| MEDIUM | install.py | 1268 | def _node_version(cmd): | CODE |
| MEDIUM | install.py | 1586 | def _run_git(project_dir, args, timeout=45): | CODE |
| LOW⚡ | install.py | 77 | except Exception: | CODE |
| LOW⚡ | install.py | 80 | except Exception: | CODE |
| LOW | install.py | 194 | except Exception as exc: | CODE |
| LOW | install.py | 329 | except Exception: | CODE |
| LOW | install.py | 558 | except Exception as exc: | CODE |
| LOW | install.py | 949 | except Exception as exc: | CODE |
| LOW | install.py | 967 | except Exception as exc: # pragma: no cover - guard against a bad splice | CODE |
| LOW | install.py | 1212 | except Exception: | CODE |
| LOW | install.py | 1257 | except Exception: | CODE |
| LOW | install.py | 1274 | except Exception: | CODE |
| LOW | install.py | 1472 | except Exception: | CODE |
| LOW | install.py | 1495 | except Exception as e: | CODE |
| LOW | install.py | 1779 | except Exception as exc: | CODE |
| LOW | install.py | 1883 | except Exception as exc: | CODE |
| LOW | install.py | 1888 | except Exception as exc: | CODE |
| LOW⚡ | install.py | 1530 | except Exception: | STRING |
| LOW⚡ | install.py | 1538 | except Exception as e: | STRING |
| LOW⚡ | install.py | 2382 | except Exception: | STRING |
| LOW | install.py | 2224 | except Exception: | STRING |
| LOW | tests/test_mcp_import_stubs.py | 97 | except Exception: | CODE |
| LOW | tests/live_ripple_insert_validation.py | 305 | except Exception as exc: | CODE |
| LOW | tests/live_ripple_insert_validation.py | 310 | except Exception as exc: | CODE |
| LOW | tests/live_workaround_verification.py | 257 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/live_workaround_verification.py | 326 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/live_workaround_verification.py | 331 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/live_fuse_smoke.py | 46 | except Exception: | CODE |
| LOW | tests/live_fuse_smoke.py | 71 | except Exception: | CODE |
| LOW | tests/live_fuse_smoke.py | 83 | except Exception as exc: | CODE |
| LOW | tests/live_fuse_smoke.py | 118 | except Exception: | CODE |
| LOW | tests/live_fuse_smoke.py | 133 | except Exception: | CODE |
| LOW | tests/live_fuse_smoke.py | 204 | except Exception: | CODE |
| LOW | tests/live_fuse_smoke.py | 206 | except Exception as e: | CODE |
| LOW | tests/live_fuse_smoke.py | 229 | except Exception: | CODE |
| MEDIUM | tests/live_fuse_smoke.py | 41 | def _quit_resolve(): | CODE |
| LOW | tests/live_multicam_setup_validation.py | 111 | except Exception: | CODE |
| LOW | tests/live_multicam_setup_validation.py | 186 | except Exception as exc: | CODE |
| LOW | tests/live_script_smoke.py | 97 | except Exception: | CODE |
| LOW | tests/live_metadata_publish_validation.py | 78 | except Exception: | CODE |
| LOW | tests/live_metadata_publish_validation.py | 180 | except Exception as exc: | CODE |
| LOW | tests/test_port_owner_pid.py | 130 | except Exception: | CODE |
| LOW | tests/live_edit_engine_validation.py | 330 | except Exception as exc: | CODE |
| LOW | tests/live_fusion_keyframe_validation.py | 66 | except Exception: | CODE |
| LOW | tests/live_fusion_keyframe_validation.py | 74 | except Exception: | CODE |
| LOW | tests/test_resolve20_api.py | 67 | except Exception as exc: | CODE |
| LOW | tests/test_resolve20_api.py | 102 | except Exception: | CODE |
| LOW | tests/test_resolve20_api.py | 125 | except Exception: | CODE |
| LOW | tests/live_path_probe.py | 40 | except Exception: | CODE |
| LOW | tests/live_path_probe.py | 53 | except Exception: | CODE |
| LOW | tests/live_path_probe.py | 63 | except Exception: | CODE |
| LOW | tests/live_path_probe.py | 91 | except Exception as e: | CODE |
| LOW | tests/live_path_probe.py | 112 | except Exception: | CODE |
| LOW | tests/live_metadata_field_inventory_validation.py | 149 | except Exception: | CODE |
| LOW | tests/live_metadata_field_inventory_validation.py | 201 | except Exception as exc: | CODE |
| LOW | tests/live_metadata_field_inventory_validation.py | 206 | except Exception as exc: | CODE |
| LOW | tests/live_metadata_field_inventory_validation.py | 361 | except Exception as exc: | CODE |
| LOW⚡ | tests/test_resolve_bridge.py | 2865 | except Exception: | CODE |
| 555 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_destructive_decorator_coverage.py | 12 | CODE | |
| LOW | tests/live_fusion_mask_title_validation.py | 26 | CODE | |
| LOW | tests/test_timeline_versioning.py | 7 | CODE | |
| LOW | tests/test_mcp_import_stubs.py | 95 | CODE | |
| LOW | tests/test_mcp_import_stubs.py | 96 | CODE | |
| LOW | tests/test_mcp_import_stubs.py | 96 | CODE | |
| LOW | tests/test_mcp_import_stubs.py | 96 | CODE | |
| LOW | tests/test_contracts.py | 2 | CODE | |
| LOW | tests/test_update_history.py | 6 | CODE | |
| LOW | tests/test_strata_story.py | 3 | CODE | |
| LOW | tests/live_ripple_insert_validation.py | 21 | CODE | |
| LOW | tests/live_multicam_setup_validation.py | 11 | CODE | |
| LOW | tests/live_multicam_setup_validation.py | 13 | CODE | |
| LOW | tests/test_release_surface_drift.py | 11 | CODE | |
| LOW | tests/test_image_qc.py | 9 | CODE | |
| LOW | tests/test_static_undefined_names.py | 13 | CODE | |
| LOW | tests/test_action_symbol_registry.py | 16 | CODE | |
| LOW | tests/test_operation_log.py | 3 | CODE | |
| LOW | tests/test_update_hardening.py | 9 | CODE | |
| LOW | tests/test_update_hardening.py | 11 | CODE | |
| LOW | tests/conftest.py | 30 | CODE | |
| LOW | tests/live_script_smoke.py | 12 | CODE | |
| LOW | tests/live_script_smoke.py | 14 | CODE | |
| LOW | tests/live_frame_capture_page_restore_validation.py | 41 | CODE | |
| LOW | tests/test_write_enforcement_ratchet.py | 52 | CODE | |
| LOW | tests/test_get_version_build_block.py | 11 | CODE | |
| LOW | tests/live_fusion_composition_validation.py | 4 | CODE | |
| LOW | tests/live_metadata_publish_validation.py | 11 | CODE | |
| LOW | tests/live_metadata_publish_validation.py | 14 | CODE | |
| LOW | tests/test_port_owner_pid.py | 14 | CODE | |
| LOW | tests/_envelope_helpers.py | 11 | CODE | |
| LOW | tests/live_edit_engine_validation.py | 19 | CODE | |
| LOW | tests/live_edit_engine_validation.py | 69 | CODE | |
| LOW | tests/test_take_ranking.py | 12 | CODE | |
| LOW | tests/test_variant_audio_accounting.py | 19 | CODE | |
| LOW | tests/test_portable_asset_parity.py | 13 | CODE | |
| LOW | tests/test_headless_runtime.py | 10 | CODE | |
| LOW | tests/test_contact_sheet.py | 16 | CODE | |
| LOW | tests/test_panel_docs_drift.py | 11 | CODE | |
| LOW | tests/test_mix_plan.py | 12 | CODE | |
| LOW | tests/test_windows_python_crash.py | 24 | CODE | |
| LOW | tests/live_marker_validation.py | 21 | CODE | |
| LOW | tests/test_thumbnail_read_settles.py | 11 | CODE | |
| LOW | tests/live_metadata_field_inventory_validation.py | 16 | CODE | |
| LOW | tests/live_metadata_field_inventory_validation.py | 21 | CODE | |
| LOW | tests/test_organize_clips_create_missing.py | 10 | CODE | |
| LOW | tests/live_timeline_conform_validation.py | 4 | CODE | |
| LOW | tests/test_offline_fallback.py | 11 | CODE | |
| LOW | tests/test_resolve_bridge.py | 9 | CODE | |
| LOW | tests/test_embeddings.py | 9 | CODE | |
| LOW | tests/test_bridge_differential.py | 18 | CODE | |
| LOW | tests/test_split_edits.py | 10 | CODE | |
| LOW | tests/live_render_deliver_validation.py | 4 | CODE | |
| LOW | tests/test_timeline_brain_db.py | 6 | CODE | |
| LOW | tests/live_fusion_value_write_validation.py | 104 | CODE | |
| LOW | tests/test_granular_tool_annotations.py | 20 | CODE | |
| LOW | tests/test_media_pool_changes.py | 3 | CODE | |
| LOW | tests/test_resolve_headless_script.py | 12 | CODE | |
| LOW | tests/test_subprocess_stdin_discipline.py | 22 | CODE | |
| LOW | tests/test_gallery_still_export_cleanup.py | 20 | CODE | |
| 308 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.py | 636 | CODE | |
| LOW | install.py | 780 | CODE | |
| LOW | install.py | 1002 | CODE | |
| LOW | install.py | 1278 | CODE | |
| LOW | install.py | 1449 | CODE | |
| LOW | install.py | 1561 | CODE | |
| LOW | install.py | 1644 | CODE | |
| LOW | install.py | 1942 | CODE | |
| LOW | install.py | 2012 | CODE | |
| LOW | install.py | 2066 | CODE | |
| LOW | tests/test_mcp_import_stubs.py | 38 | CODE | |
| LOW | tests/live_ripple_insert_validation.py | 136 | CODE | |
| LOW | tests/live_workaround_verification.py | 78 | CODE | |
| LOW | tests/live_workaround_verification.py | 88 | CODE | |
| LOW | tests/live_workaround_verification.py | 272 | CODE | |
| LOW | tests/live_fuse_smoke.py | 59 | CODE | |
| LOW | tests/live_frame_capture_page_restore_validation.py | 106 | CODE | |
| LOW | tests/test_write_enforcement_ratchet.py | 222 | CODE | |
| LOW | tests/test_write_enforcement_ratchet.py | 314 | CODE | |
| LOW | tests/test_port_owner_pid.py | 110 | CODE | |
| LOW | tests/test_port_owner_pid.py | 125 | CODE | |
| LOW | tests/live_edit_engine_validation.py | 60 | CODE | |
| LOW | tests/test_skill_version_gates.py | 81 | CODE | |
| LOW | tests/live_path_probe.py | 33 | CODE | |
| LOW | tests/test_doc_tool_counts.py | 49 | CODE | |
| LOW | tests/live_metadata_field_inventory_validation.py | 154 | CODE | |
| LOW | tests/test_offline_fallback.py | 259 | CODE | |
| LOW | tests/test_resolve_bridge.py | 1774 | CODE | |
| LOW | tests/test_resolve_bridge.py | 2655 | CODE | |
| LOW | tests/live_fusion_value_write_validation.py | 208 | CODE | |
| LOW | tests/test_subprocess_stdin_discipline.py | 33 | CODE | |
| LOW | tests/test_discarded_resolve_returns.py | 144 | CODE | |
| LOW | tests/live_resolve211_transitions.py | 15 | CODE | |
| LOW | tests/test_doctor_paths.py | 257 | CODE | |
| LOW | tests/live_lut_apply.py | 71 | CODE | |
| LOW | tests/test_import.py | 42 | CODE | |
| LOW | tests/test_optional_dependency_guards.py | 51 | CODE | |
| LOW | tests/test_optional_dependency_guards.py | 112 | CODE | |
| LOW | tests/test_optional_dependency_guards.py | 155 | CODE | |
| LOW | tests/test_optional_dependency_guards.py | 170 | CODE | |
| LOW | tests/live_resolve211_alignment.py | 12 | CODE | |
| LOW | tests/test_resolve_connection.py | 48 | CODE | |
| LOW | tests/test_destructive_registry_drift.py | 23 | CODE | |
| LOW | tests/test_destructive_hook.py | 22 | CODE | |
| LOW | tests/test_destructive_hook.py | 38 | CODE | |
| LOW | tests/test_destructive_hook.py | 53 | CODE | |
| LOW | tests/test_destructive_hook.py | 69 | CODE | |
| LOW | tests/test_destructive_hook.py | 72 | CODE | |
| LOW | tests/test_no_caller_code_execution.py | 79 | CODE | |
| LOW | tests/test_version_gate_drift.py | 68 | CODE | |
| LOW | tests/benchmark_server.py | 195 | CODE | |
| LOW | tests/test_source_media_guard.py | 198 | CODE | |
| LOW | tests/test_source_media_guard.py | 250 | CODE | |
| LOW | tests/live_resolve21_validation.py | 504 | CODE | |
| LOW | tests/live_drp_roundtrip_verification.py | 102 | CODE | |
| LOW | tests/test_live_api.py | 16 | CODE | |
| LOW | tests/live_fuse_diagnose.py | 54 | CODE | |
| LOW | tests/test_utf8_encoding_discipline.py | 54 | CODE | |
| LOW | tests/test_action_list_drift.py | 30 | CODE | |
| LOW | tests/test_action_list_drift.py | 51 | CODE | |
| 167 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/live_fusion_mask_title_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_ripple_insert_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_frame_capture_page_restore_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_fusion_composition_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_marker_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_timeline_conform_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_render_deliver_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_fusion_value_write_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_duplicate_clips_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_audio_fairlight_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_review_annotation_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_playhead_timecode_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_extension_authoring_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_project_lifecycle_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_color_grade_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/live_media_pool_ingest_validation.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | src/utils/timeline_kernel_live_probe.py | 0 | stand in for the mcp sdk only when it is genuinely absent. delegates to the shared installer so this harness cannot drif | STRING |
| HIGH | tests/test_media_pool_clip_ids.py | 0 | records what was actually handed to resolve, so a partial batch shows up. | STRING |
| HIGH | tests/test_media_pool_folder_ids.py | 0 | records what was actually handed to resolve, so a partial batch shows up. | STRING |
| HIGH | tests/test_granular_media_pool_clip_ids.py | 0 | records what was actually handed to resolve, so a partial batch shows up. | STRING |
| HIGH | tests/test_shot_relationships.py | 0 | insert or replace into embeddings (entity_type, entity_uuid, embedding_kind, model_name, dimension, vector, content_hash | STRING |
| HIGH | tests/test_edit_engine.py | 0 | insert or replace into embeddings (entity_type, entity_uuid, embedding_kind, model_name, dimension, vector, content_hash | STRING |
| HIGH | tests/test_entities.py | 0 | insert or replace into embeddings (entity_type, entity_uuid, embedding_kind, model_name, dimension, vector, content_hash | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_mcp_import_stubs.py | 28 | # Where a harness may legitimately mention the stub module names. | COMMENT |
| MEDIUM | tests/live_frame_capture_page_restore_validation.py | 145 | # a harness must not be the thing that loses someone's work. | COMMENT |
| MEDIUM | tests/offline_guard.py | 662 | return # An outer harness already chose a path; don't fight it. | CODE |
| MEDIUM | tests/offline_guard.py | 712 | continue # An outer harness already chose a path; don't fight it. | CODE |
| MEDIUM | tests/test_live_api.py | 19 | # This file is a live harness, not a unit test — it is named for how it is | COMMENT |
| MEDIUM | scripts/bridge_differential.py | 87 | # which is a harness reporting a known trap as if it were a finding. | COMMENT |
| MEDIUM | scripts/headless_differential.py | 136 | # politeness, it is the only way this harness can be safe to point at a | COMMENT |
| MEDIUM | scripts/headless_differential.py | 152 | # already open. That is a destructive harness bug, not a probe result. | COMMENT |
| MEDIUM | scripts/pixel_equality.py | 198 | # bug in this harness, and it would have been written up as "a Fusion | COMMENT |
| MEDIUM | scripts/render_stress.py | 266 | # harness looked like it was working and was testing almost nothing. | COMMENT |
| MEDIUM | scripts/render_stress.py | 348 | # is the crash, not an error in the harness. | COMMENT |
| MEDIUM | scripts/render_stress.py | 374 | # The whole point of the harness: a stack, attached to the iteration | COMMENT |
| MEDIUM | scripts/render_stress.py | 434 | # to clear. This harness did that to a live GUI session. | COMMENT |
| MEDIUM | scripts/render_stress.py | 16 | # once production assets are available, same harness, real source | STRING |
| MEDIUM | scripts/bisect_headless_hang.py | 96 | # the first mutating call the harness makes, and it is documented to return | COMMENT |
| MEDIUM | scripts/bisect_headless_hang.py | 113 | # Teardown, itself instrumented — the harness's teardown is as likely a | COMMENT |
| MEDIUM | src/granular/timeline_item.py | 1326 | """Get comprehensive info about a timeline item. | STRING |
| MEDIUM⚡ | src/granular/project.py | 765 | """Get comprehensive information about the current project.""" | STRING |
| MEDIUM | src/utils/probe_catalogue.py | 132 | #: The probe this whole harness exists for — and it is `blocking`, so it never | COMMENT |
| MEDIUM | src/utils/bridge_differential.py | 64 | #: App-global state that **the harness's own probes move**, which is a different | COMMENT |
| MEDIUM | src/utils/bridge_differential.py | 75 | #: genuinely reported the wrong page is exactly the bug this harness is for. So | COMMENT |
| MEDIUM | src/utils/bridge_differential.py | 86 | #: Never invoked by the harness, whatever the enumeration says. These either | COMMENT |
| MEDIUM | src/utils/bridge_differential.py | 199 | #: How the harness reaches each object worth probing, as a chain of zero-argument | COMMENT |
| MEDIUM | src/utils/bridge_differential.py | 402 | continue # harness bookkeeping, not a probe result | CODE |
| MEDIUM | src/utils/bridge_differential.py | 419 | # The harness moved it mid-run, so the two readings are of different | COMMENT |
| MEDIUM | src/utils/headless_differential.py | 61 | #: because the harness or the clock moved them. Compared by type, not value. | COMMENT |
| MEDIUM | src/utils/headless_differential.py | 76 | # name and clip timestamps are stamped by this harness. Comparing them by | COMMENT |
| MEDIUM | src/utils/resolve_bridge_client.py | 123 | #: bridged from one process — the differential harness does exactly that. | COMMENT |
| MEDIUM | src/utils/mcp_transport.py | 39 | # Resolved lazily so DAVINCI_RESOLVE_MCP_STATE_DIR set by a test harness is honored. | COMMENT |
| MEDIUM | src/utils/mode_matrix.py | 220 | # only class of bug this harness was built to find. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.py | 2212 | # Check if deps are installed | STRING |
| LOW | tests/test-after-restart.sh | 13 | # Check if DaVinci Resolve is running | COMMENT |
| LOW⚡ | tests/test-after-restart.sh | 34 | # Check if restart was successful | COMMENT |
| LOW | tests/create_test_timeline.py | 66 | # Check if ffmpeg is available | COMMENT |
| LOW | tests/test_improvements.py | 119 | # Check if automatic clip selection messages are present | COMMENT |
| LOW | tests/test_improvements.py | 157 | # Check if our helpers are being used | COMMENT |
| LOW | src/granular/timeline_item.py | 684 | # Check if the item has audio capabilities | COMMENT |
| LOW | src/granular/timeline_item.py | 796 | # Check if it's a video item | COMMENT |
| LOW | src/granular/timeline_item.py | 817 | # Check if it has audio properties (could be video with audio or audio-only) | COMMENT |
| LOW | src/granular/timeline_item.py | 933 | # Check if the specified property is valid for this item type | COMMENT |
| LOW | src/granular/timeline_item.py | 1014 | # Check if the property has keyframes | COMMENT |
| LOW | src/granular/timeline_item.py | 1031 | # Check if new frame is within the item's range | COMMENT |
| LOW | src/granular/timeline_item.py | 1126 | # Check if the property has keyframes | COMMENT |
| LOW | src/granular/timeline_item.py | 1131 | # Check if there's a keyframe at the specified frame | COMMENT |
| LOW | src/granular/timeline_item.py | 1211 | # Check if the property has keyframes | COMMENT |
| LOW | src/granular/timeline_item.py | 1216 | # Check if there's a keyframe at the specified frame | COMMENT |
| LOW⚡ | src/granular/folder.py | 41 | # Check if directory exists, create if not | COMMENT |
| LOW | src/granular/resolve_control.py | 182 | # Check if it's a method call | COMMENT |
| LOW | src/granular/media_pool_item.py | 68 | # Check if file exists | COMMENT |
| LOW | src/granular/media_pool_item.py | 149 | # Check if file exists | COMMENT |
| LOW | src/granular/project.py | 85 | # Check if it's a number in string form | COMMENT |
| LOW | src/granular/project.py | 130 | # Check if project exists | COMMENT |
| LOW | src/granular/project.py | 161 | # Check if project already exists | COMMENT |
| LOW | src/granular/project.py | 470 | # Check if directory exists | COMMENT |
| LOW | src/utils/app_control.py | 77 | # Check if a project is open | COMMENT |
| LOW | src/utils/app_control.py | 209 | # Check if timeline is open | COMMENT |
| LOW⚡ | src/utils/project_properties.py | 76 | # Check if we got a valid response | COMMENT |
| LOW | src/utils/project_properties.py | 218 | # Check if it's a drop frame rate | COMMENT |
| LOW | src/utils/project_properties.py | 314 | # Check if SuperScale is enabled | COMMENT |
| LOW | src/utils/execution_lifecycle.py | 530 | # Check if result carries a verification block | COMMENT |
| LOW | src/utils/execution_lifecycle.py | 634 | # Check if duration changed on a non-duration-altering action | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | # Python dependencies installed into the venv by install.py (after mcp[cli]). | COMMENT |
| LOW | install.py | 41 | # Only hard floor: mcp[cli] requires Python 3.10+. There is no upper bound — | COMMENT |
| LOW | tests/test_resolve_bridge.py | 1221 | # name both remedies, or it sends uv/pixi users to a sudo install they | COMMENT |
| LOW | tests/live_fusion_value_write_validation.py | 361 | check("bulk_set_inputs", | COMMENT |
| LOW | tests/offline_guard.py | 121 | #: `RESOLVE_SCRIPT_LIB` or the install path. Both names are answered here, so | COMMENT |
| LOW | .agents/hooks/source_media_guard.py | 61 | COMMENT | |
| LOW | resolve-advanced/server/aaf_probe.py | 281 | return name | COMMENT |
| LOW | resolve-advanced/server/aaf_probe.py | 301 | # fragments. | COMMENT |
| LOW | resolve-advanced/server/aaf_probe.py | 601 | if points is None: | COMMENT |
| LOW | resolve-advanced/server/aaf_probe.py | 621 | # 278 also do under (length), so the two are distinguishable and (length - 1) | COMMENT |
| LOW | resolve-advanced/server/aaf_probe.py | 841 | # AFX_POS_X_U / AFX_POS_Y_U Avid position units | COMMENT |
| LOW | resolve-advanced/server/aaf_probe.py | 861 | # stored Avid number keeps its own name until its semantics are measured. | COMMENT |
| LOW | resolve-advanced/server/aaf_probe.py | 1181 | # SpatialAdapter reformat inside a PaintResize, say), so geometry is a | COMMENT |
| LOW | resolve-advanced/server/aaf_probe.py | 1361 | return "A" if _slot_media_kind(slot).startswith("sound") else "V" | COMMENT |
| LOW | resolve-advanced/server/aaf_probe.py | 1561 | # / timecode. Always present, so a consumer can tell "this AAF | COMMENT |
| LOW | docs/reference/resolve_scripting_api.txt | 381 | # the return value is one of {"mono", "stereo", | COMMENT |
| LOW | scripts/headless_differential.py | 201 | try: | COMMENT |
| LOW | scripts/install_resolve_bridge.py | 41 | #: documented per-user path virtualizes to `<container>/Data/` + the SAME suffix. | COMMENT |
| LOW | scripts/install_resolve_bridge.py | 61 | #: under Workspace ▸ Scripts, as did one in | COMMENT |
| LOW | scripts/install_resolve_bridge.py | 81 | #: own tree and has nothing to do with Resolve. | COMMENT |
| LOW | scripts/install_resolve_bridge.py | 241 | #: was the right remedy for the wrong reason, and it turned a one-line fix into a | COMMENT |
| LOW | scripts/install_resolve_bridge.py | 261 | #: the two entry points are not in doubt. | COMMENT |
| LOW | .github/workflows/npm-publish.yml | 41 | with: | COMMENT |
| LOW | src/utils/bridge_differential.py | 61 | "IsPlayheadOnVideoFrame", | COMMENT |
| LOW | src/utils/bridge_differential.py | 201 | #: transport without the driver knowing which it holds. | COMMENT |
| LOW | src/utils/silence_ripple.py | 61 | COMMENT | |
| LOW | src/utils/silence_ripple.py | 81 | #: is a bit cut off" — an eaten onset, produced by a one-frame onset guard. | COMMENT |
| LOW | src/utils/silence_ripple.py | 101 | #: How aggressively to tighten. The default is deliberately the *loosest* one. | COMMENT |
| LOW | src/utils/media_analysis.py | 741 | # Cost is linear in footage length; content-blind. | COMMENT |
| LOW | src/utils/media_analysis.py | 4261 | "json", | COMMENT |
| LOW | src/utils/transcript_edit.py | 161 | #: | COMMENT |
| LOW | src/utils/resolve_bridge_ops.py | 161 | "set_current_timeline", | COMMENT |
| LOW | src/utils/resolve_bridge_ops.py | 201 | self._lifecycle = lifecycle | COMMENT |
| LOW | src/utils/resolve_bridge_client.py | 121 | #: Per-transport rather than per-class because the method set is the | COMMENT |
| LOW | src/utils/resolve_bridge_client.py | 241 | # methods that work perfectly when called: measured on free 21.0.3.7 over this | COMMENT |
| LOW | src/utils/execution_trace.py | 41 | #: | COMMENT |
| LOW | src/utils/destructive_hook.py | 61 | # the timeline-item subtree). Adding a new destructive action means: (a) add it | COMMENT |
| LOW | src/utils/destructive_hook.py | 261 | "apply_grade_from_drx", | COMMENT |
| LOW | src/utils/destructive_hook.py | 281 | # Notes/Comments are noise; Name changes are real edits and stay archived. | COMMENT |
| LOW | src/utils/destructive_hook.py | 301 | "project_manager", "project_settings", "render", "render_presets", | COMMENT |
| LOW | src/utils/destructive_hook.py | 321 | # the params payload, not just the action name. | COMMENT |
| LOW | src/utils/destructive_hook.py | 341 | # Registered destructive actions whose handler genuinely reads `dry_run` and | COMMENT |
| LOW | src/utils/destructive_hook.py | 801 | #: that previously got a bare `{"success": true}` from a destructive copy. | COMMENT |
| LOW | src/utils/destructive_hook.py | 881 | # This decorator closes that. It deliberately does NOT archive: the compound hook | COMMENT |
| LOW | src/utils/resolve_runtime.py | 161 | #: Readers for the Windows process table, tried in order until one answers. | COMMENT |
| LOW | src/utils/resolve_versions.py | 101 | # Only surfaces with evidence behind them. `source` separates what this repo | COMMENT |
| LOW | src/utils/resolve_versions.py | 201 | "note": "New SetRenderSettings key per the shipped scripting README.", | COMMENT |
| LOW | src/utils/timeline_brain_db.py | 81 | conn.execute(f"PRAGMA busy_timeout={BUSY_TIMEOUT_MS}") | COMMENT |
| LOW | src/utils/execution_lifecycle.py | 181 | # CopyGrades overwrites each target's grade. | COMMENT |
| LOW | src/utils/execution_lifecycle.py | 261 | #: settings are altered, recovery is possible but is not one trivial | COMMENT |
| LOW | src/utils/api_truth.py | 3681 | if kind in groups: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_custom_timeline.py | 55 | # Create a test timeline with default settings | COMMENT |
| MEDIUM | tests/test_custom_timeline.py | 70 | # Create a custom timeline with specific parameters | COMMENT |
| MEDIUM | tests/create_test_timeline.py | 68 | # Create a 5-second test video with the specified color | COMMENT |
| MEDIUM | tests/create_test_timeline.py | 92 | # Create a new project | COMMENT |
| MEDIUM | tests/live_v233_validation.py | 111 | # Create a timeline to append into | COMMENT |
| MEDIUM | tests/live_v233_validation.py | 207 | # Create a color group, then rename it. | COMMENT |
| MEDIUM | tests/test_live_api.py | 19 | # This file is a live harness, not a unit test — it is named for how it is | COMMENT |
| MEDIUM | tests/test_live_api.py | 250 | # Create a test timeline so we can test more | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_custom_timeline.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/test_timeline_versioning.py | 63 | def set_tracks(self, tracks: dict) -> None: | CODE |
| LOW | tests/create_test_timeline.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/test_improvements.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/benchmark_server.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/analysis_dashboard.py | 15589 | def _set_session_cookie(self) -> None: | CODE |
| LOW | src/granular/__init__.py | 18 | __all__ = ["VERSION", "mcp"] | CODE |
| LOW | src/granular/common.py | 931 | __all__ = [name for name in globals() if not name.startswith("__")] | CODE |
| LOW | src/utils/update_check.py | 673 | def _set_cached_status(result: Mapping[str, Any]) -> None: | CODE |
| LOW | src/utils/resolve_probe.py | 38 | __all__ = ["has_method", "api_constant", "MISSING"] | CODE |
| LOW | src/utils/object_inspection.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/utils/render_ids.py | 30 | __all__ = [ | CODE |
| LOW | src/utils/actor_identity.py | 30 | def set_instance(kind: str) -> None: | CODE |
| LOW | src/utils/issue_report.py | 446 | __all__ = [ | CODE |
| LOW | src/utils/media_analysis_jobs.py | 573 | def _set_job_status(conn: sqlite3.Connection, job_id: str, status: str, phase: str, **extra: Any) -> None: | CODE |
| LOW | src/utils/execution_lifecycle.py | 752 | def set_state_provider(self, provider: Callable[[], Optional[Dict[str, Any]]]) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.py | 1657 | CODE | |
| LOW | tests/test_playhead_frame_capture.py | 295 | CODE | |
| LOW | src/granular/timeline.py | 71 | CODE | |
| LOW | src/granular/media_pool.py | 242 | CODE | |
| LOW | src/granular/project.py | 1671 | CODE | |
| LOW | src/utils/timeline_xml.py | 291 | CODE | |
| LOW | src/utils/media_analysis.py | 1311 | CODE | |
| LOW | src/utils/transcript_edit.py | 305 | CODE | |
| LOW | src/utils/resolve_ai_ledger.py | 56 | CODE | |
| LOW | src/utils/mix_plan.py | 205 | CODE | |
| LOW | src/utils/mix_plan.py | 399 | CODE | |
| LOW | src/utils/brain_edits.py | 187 | CODE | |
| LOW | src/utils/edit_engine.py | 1412 | CODE | |
| LOW | src/utils/grade_loop.py | 151 | CODE | |
| LOW | src/utils/issue_report.py | 351 | CODE | |
| LOW | src/utils/analysis_caps.py | 405 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_import.py | 255 | # F2 workflow prompts (agentic-flow improvement F2). | COMMENT |
| MEDIUM | docs/authoring/script-plugin-authoring.md | 26 | ### `scaffold` | COMMENT |
| MEDIUM | src/utils/reference_match.py | 140 | # Reuse the pre-balance guardrails rather than reimplementing them, so this | COMMENT |
| MEDIUM | src/utils/script_templates.py | 43 | # ─── scaffold template ──────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test-after-restart.sh | 29 | # Step 1: Restart the server using the restart script | COMMENT |
| LOW | tests/test-after-restart.sh | 48 | # Step 2: Create test timeline (optional) | COMMENT |
| LOW | tests/test-after-restart.sh | 66 | # Step 3: Run automated tests | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test-after-restart.sh | 29 | # Step 1: Restart the server using the restart script | COMMENT |
| LOW | tests/test-after-restart.sh | 48 | # Step 2: Create test timeline (optional) | COMMENT |
| LOW | tests/test-after-restart.sh | 66 | # Step 3: Run automated tests | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_issue_report.py | 21 | POSIX_ID = {"home": "/Users/jdoe", "names": ["jdoe", "Jane Doe", "Janes-MacBook-Pro"]} | CODE |
| LOW | tests/test_media_analysis.py | 3142 | handle.write(b"placeholder") | CODE |
| LOW | tests/test_media_analysis.py | 3521 | handle.write(b"placeholder") | CODE |
| LOW | tests/test_media_analysis.py | 3607 | handle.write(b"placeholder") | CODE |
| LOW | tests/test_media_analysis.py | 4320 | handle.write(b"placeholder") | CODE |
| LOW | src/control_panel_i18n.py | 632 | const CONTROL_PANEL_LOCALIZED_ATTRIBUTES = ['aria-label', 'title', 'placeholder']; | CODE |