{
  "run_id": "samuelgursky--davinci-resolve-mcp-claude-haiku-5-5-1792852451643319252",
  "date": "2026-10-24T15:01:00.405236+00:00",
  "repo": "samuelgursky/davinci-resolve-mcp",
  "kind": "mcp",
  "source": "https://github.com/samuelgursky/davinci-resolve-mcp",
  "commit": "931bc2cda8fd9049982a457de9ff70836c406cd7",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-4ca2a26a405bc64d87f5a6e1e9a57fa6557d9c79c5de6c18192fa83333db9158",
  "pass": null,
  "outcome": "needs_credentials",
  "time_to_working_s": null,
  "total_s": 1608.7618808746338,
  "steps": [
    "cd <guest-path> && git init -q 2>/dev/null; git remote add origin https://github.com/samuelgursky/davinci-resolve-mcp 2>/dev/null; git fetch --depth 1 origin 931bc2cda8fd9049982a457de9ff70836c406cd7 2>&1 | tail -2; git reset --mixed FETCH_HEAD 2>&1 | tail -1; ls -la; id -u; python3 --version; cat README.md | head -200",
    "cd <guest-path> && sed -n 200,420p README.md",
    "cd <guest-path> && cat requirements.txt; cat package.json | head -60; ls /opt /usr/local/bin 2>/dev/null; which node npm uv; node --version 2>/dev/null; ls /inputs 2>/dev/null; ls .coldpass",
    "cd <guest-path> && python3 -m venv --help >/dev/null 2>&1 && echo venv_ok || echo venv_missing; grep -n \"add_argument\\|argparse\" install.py | head -40; grep -in \"telemetry\\|consent\" install.py | head -10",
    "cd <guest-path> && sed -n 2110,2200p install.py",
    "cd <guest-path> && timeout 900 python3 install.py --clients manual --update-policy never 2>&1 | tail -60; echo EXIT=${PIPESTATUS[0]}",
    "cd <guest-path> && rm -rf venv && (sudo -n apt-get install -y python3.12-venv >/tmp/aptlog 2>&1 || (sudo -n apt-get update >/dev/null 2>&1 && sudo -n apt-get install -y python3.12-venv >/tmp/aptlog 2>&1)); echo apt=$?; tail -3 /tmp/aptlog; timeout 900 python3 install.py --clients manual --update-policy never > /tmp/install.log 2>&1; echo EXIT=$?; tail -40 /tmp/install.log",
    "cd <guest-path> && grep -n -i \"error\\|fail\\|installed\\|verif\\|Step\\|STEP\" /tmp/install.log | head -40; ls venv/bin | head; venv/bin/python -c \"import mcp; print('mcp ok')\" 2>&1 | tail -1",
    "cd <guest-path> && sed -n 1,40p /tmp/install.log; echo ----; sed -n 60,80p /tmp/install.log | cut -c1-200",
    "cd <guest-path> && grep -A3 '\"engines\"' package.json resolve-advanced/package.json; grep -n \"node\" README.md | grep -i \"requir\\|18\\|20\\|22\" | head -5; (sudo -n apt-get install -y nodejs npm >/tmp/nodeapt 2>&1; echo apt=$?); node --version; npm --version",
    "export NODE_USE_ENV_PROXY=1; cd /tmp && curl -fsSL https://deb.nodesource.com/setup_22.x -o /tmp/nodesource_setup.sh && sudo -n bash /tmp/nodesource_setup.sh >/tmp/nodesrc.log 2>&1; echo src=$?; sudo -n apt-get install -y nodejs >/tmp/nodeapt2 2>&1; echo apt=$?; node --version; npm --version",
    "export NODE_USE_ENV_PROXY=1; cd <guest-path> && timeout 900 npm install --omit=dev --omit=optional > /tmp/npm_adv.log 2>&1; echo EXIT=$?; tail -5 /tmp/npm_adv.log; cd <guest-path> && git status --short | head",
    "cd <guest-path> && ls examples examples/* | head -60; ls tests | head; grep -n \"npm test\\|\\\"test\" package.json; sed -n 60,80p package.json",
    "cd <guest-path> && cat examples/README.md | head -80; echo ----; cat examples/timeline/README.md | head -60; echo ----; ls resolve-advanced; sed -n 1,80p resolve-advanced/README.md",
    "cd <guest-path> && sed -n 80,200p README.md; grep -n '\"test' package.json; ls test | head -30",
    "mkdir -p /tmp/harness && cat > /tmp/harness/list.py <<'EOF'\nimport asyncio, json, sys\nfrom mcp import ClientSession, StdioServerParameters\nfrom mcp.client.stdio import stdio_client\nasync def main():\n    params = StdioServerParameters(command=\"node\", args=[\"<guest-path>\"], cwd=\"<guest-path>\")\n    async with stdio_client(params) as (r, w):\n        async with ClientSession(r, w) as s:\n            await s.initialize()\n            tools = await s.list_tools()\n            for t in tools.tools:\n                if t.name in (\"capabilities\",\"drx\",\"editorial\",\"drt\"):\n                    print(t.name, json.dumps(t.inputSchema)[:1500])\n                else:\n                    print(t.name)\nasyncio.run(main())\nEOF\ncd <guest-path> && timeout 120 <guest-path> -I /tmp/harness/list.py 2>&1 | head -60",
    "cd <guest-path> && grep -rn \"parse_interchange\" --include=*.mjs . | head -8; grep -rln \"parse_interchange\" . | head",
    "cd <guest-path> && sed -n 96,125p tools/editorial.mjs | cut -c1-400",
    "cat > /tmp/harness/call.py <<'EOF'\nimport asyncio, json, sys\nfrom mcp import ClientSession, StdioServerParameters\nfrom mcp.client.stdio import stdio_client\nasync def main():\n    tool = sys.argv[1]; args = json.loads(sys.argv[2])\n    params = StdioServerParameters(command=\"node\", args=[\"<guest-path>\"], cwd=\"<guest-path>\")\n    async with stdio_client(params) as (r, w):\n        async with ClientSession(r, w) as s:\n            await s.initialize()\n            res = await s.call_tool(tool, args)\n            for c in res.content:\n                print(getattr(c, \"text\", c))\nasyncio.run(main())\nEOF\ncat > /tmp/harness/args.json <<'EOF'\n{\"action\":\"parse_interchange\",\"args\":{\"format\":\"edl\",\"content\":\"TITLE: DEMO\\nFCM: NON-DROP FRAME\\n\\n001  AX       V     C        00:00:00:00 00:00:02:00 01:00:00:00 01:00:02:00\\n* FROM CLIP NAME:  SHOT_A.mov\\n\\n002  AX       V     C        00:00:02:00 00:00:05:00 01:00:02:00 01:00:05:00\\n* FROM CLIP NAME:  SHOT_B.mov\\n\",\"fps\":24}}\nEOF\ncd <guest-path> && timeout 120 venv/bin/python -I /tmp/harness/call.py editorial \"$(cat /tmp/harness/args.json)\" 2>&1 | head -c 3000",
    "cd <guest-path> && grep -n \"EDL\\|reads and edits Resolve\\|runs cloud\" README.md resolve-advanced/README.md | cut -c1-260; echo ----; grep -rln -i \"cron\\|schedul\\|webhook\\|--once\\|--now\" src scripts bin resolve-advanced/server 2>/dev/null | head; grep -n -i \"cron\\|--once\\|webhook\" README.md | cut -c1-200 | head",
    "cd <guest-path> && grep -n -i \"cron\\|schedul\\|--once\\|--now\\|loop\" src/utils/grade_loop.py src/batch_cli.py | head -20; grep -n \"__main__\\|add_argument\" src/batch_cli.py | head -20; grep -rn \"batch_cli\\|grade_loop\" README.md docs/*.md docs/guides/*.md 2>/dev/null | cut -c1-220 | head",
    "cd <guest-path> && grep -n -i \"no DaVinci Resolve running\\|with no Resolve\\|Node dependencies\\|18 tools\\|tools:\\|npx davinci-resolve-mcp setup\" README.md | cut -c1-300",
    "cd <guest-path> && grep -n '\"test' package.json; export NODE_USE_ENV_PROXY=1; timeout 600 npm test > /tmp/advtest.log 2>&1; echo TEST_EXIT=$?; grep -E \"^# (tests|pass|fail)\" /tmp/advtest.log; cd <guest-path> && (timeout 20 venv/bin/python src/server.py </dev/null >/tmp/live.log 2>&1; echo LIVE_EXIT=$?); tail -5 /tmp/live.log | cut -c1-300",
    "cd <guest-path> && grep -E \"^not ok|^    not ok|^  not ok\" /tmp/advtest.log | head -5; grep -B2 -A12 \"not ok\" /tmp/advtest.log | grep -E \"error:|Error|ffmpeg|sharp|sqlite|Cannot find\" | sort | uniq -c | sort -rn | head -10; cat /tmp/live.log | head -5 | cut -c1-300",
    "export NODE_USE_ENV_PROXY=1; cd <guest-path> && timeout 900 npm install --no-save better-sqlite3@^11.10.0 > /tmp/sqlite.log 2>&1; echo INST=$?; tail -3 /tmp/sqlite.log; timeout 900 npm test > /tmp/advtest2.log 2>&1; echo TEST_EXIT=$?; grep -E \"^# (tests|pass|fail)\" /tmp/advtest2.log",
    "cd <guest-path> && grep -n \"npm test\\|node --test\" resolve-advanced/README.md | head -3; mkdir -p .coldpass && python3 - <<'EOF'\nimport json\nws=\"<guest-path>\"\nedl=\"TITLE: DEMO\\nFCM: NON-DROP FRAME\\n\\n001  AX       V     C        00:00:00:00 00:00:02:00 01:00:00:00 01:00:02:00\\n* FROM CLIP NAME:  SHOT_A.mov\\n\\n002  AX       V     C        00:00:02:00 00:00:05:00 01:00:02:00 01:00:05:00\\n* FROM CLIP NAME:  SHOT_B.mov\\n\"\nargs={\"action\":\"parse_interchange\",\"args\":{\"format\":\"edl\",\"content\":edl,\"fps\":24}}\nserver=[\"node\",\"bin/davinci-resolve-advanced-mcp.mjs\"]\nprobe={\"kind\":\"mcp\",\"argv\":server,\"cwd\":ws,\"tool\":\"editorial\",\"arguments\":args,\"expected_text\":\"SHOT_B.mov\"}\njson.dump(probe,open(f\"{ws}/.coldpass/probe.json\",\"w\"),indent=2)\nclaims=[\n {\"kind\":\"claim\",\"claim\":\"The advanced server edits Resolve files with no Resolve running: parses an EDL offline\",\"source\":\"applies DB/XML-level changes **with no Resolve running**, so it\",\"input\":\"inline CMX EDL with SHOT_A.mov and SHOT_B.mov\",\"expected\":\"events list both clips, including SHOT_B.mov\",\"probe_kind\":\"mcp\",\"argv\":server,\"tool\":\"editorial\",\"arguments\":args,\"expected_text\":\"SHOT_B.mov\",\"cwd\":ws},\n {\"claim\":\"Live Resolve control requires Resolve Studio external scripting\",\"kind\":\"claim\",\"source\":\"Before connecting, open DaVinci Resolve Studio and set **Preferences > General > External scripting using** to **Local**.\",\"testable\":False,\"reason\":\"DaVinci Resolve is not installed in this disposable Linux guest; install.py reported 'API Path: Not found' and 'Library: Not found', so the live Python server cannot be exercised here\"}\n]\njson.dump(claims,open(f\"{ws}/.coldpass/claims.json\",\"w\"),indent=2)\nexamples=[{\"kind\":\"example\",\"claim\":\"Offline test suite for the advanced server passes without Resolve\",\"source\":\"resolve-advanced/package.json scripts.test\",\"input\":\"npm test in resolve-advanced after npm install --omit=dev --omit=optional plus --no-save better-sqlite3\",\"expected\":\"all offline tests pass, 0 failing\",\"argv\":[\"npm\",\"test\"],\"cwd\":ws+\"/resolve-advanced\",\"expected_text\":\"# fail 0\"}]\njson.dump(examples,open(f\"{ws}/.coldpass/examples.json\",\"w\"),indent=2)\ncycles={\"detected\":False,\"reason\":\"Entry points inspected (README.md, bin/, src/server.py, src/batch_cli.py, src/utils/grade_loop.py, resolve-advanced/bin, resolve-advanced/server). No cron, scheduler, daemon loop, webhook or --once/--now product cycle; grade_loop is a retry-ladder assessment helper and batch_cli is a job runner, not a scheduled cycle. The advanced server is stdio request/response only.\",\"checks\":[]}\njson.dump(cycles,open(f\"{ws}/.coldpass/cycles.json\",\"w\"),indent=2)\nprint(\"ok\")\nEOF\n<env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -40",
    "cd <guest-path> && python3 - <<'EOF'\nimport json\nws=\"<guest-path>\"\nreport={\n \"outcome\":\"blocked\",\n \"fault_owner\":\"prerequisite\",\n \"operation\":\"Run the README's source install (python install.py) and exercise the MCP servers; verified the offline advanced MCP server (editorial parse_interchange on an inline EDL). The live DaVinci Resolve control server (src/server.py) could not be exercised.\",\n \"operation_scope\":\"Linux x86_64 guest, Ubuntu, Python 3.12.3, Node 22.23.4 (README requires Node >=20.9 for the advanced server). No DaVinci Resolve Studio installed, so live Resolve control is out of scope. Offline advanced server works without Resolve.\",\n \"steps\":[\n  \"git init; git remote add origin https://github.com/samuelgursky/davinci-resolve-mcp; git fetch --depth 1 origin 931bc2cda8fd9049982a457de9ff70836c406cd7; git reset --mixed FETCH_HEAD\",\n  \"sudo apt-get install -y python3.12-venv\",\n  \"python3 install.py --clients manual --update-policy never\",\n  \"NodeSource setup_22.x then sudo apt-get install -y nodejs (guest Node was 18.19, below the >=20.9 engine)\",\n  \"cd resolve-advanced && npm install --omit=dev --omit=optional\",\n  \"npm install --no-save better-sqlite3@^11.10.0 (optional native dep, needed by offline tests)\",\n  \"node bin/davinci-resolve-advanced-mcp.mjs (MCP stdio) tool editorial action parse_interchange on inline EDL -> returned SHOT_A.mov and SHOT_B.mov events\",\n  \"npm test in resolve-advanced -> 1202 tests, 1136 pass, 0 fail, 66 skipped\"\n ],\n \"deviations\":[\n  \"python install.py exited 1 at venv creation: python3-venv missing (ensurepip unavailable). Fixed with sudo apt-get install python3.12-venv, then re-ran install.py; venv and mcp SDK installed.\",\n  \"python install.py ends with 'Setup incomplete - the scripting API did not load' because DaVinci Resolve is not installed (API Path and Library not found). Not fixable in this guest.\",\n  \"Guest Node 18.19 was below the >=20.9 requirement; installed Node 22 via NodeSource setup_22.x (curl|sh, from the NodeSource-documented script).\",\n  \"Installed with --omit=dev --omit=optional as the README's npm command specifies; first npm test run had 60 failures from missing optional better-sqlite3, so it was added with --no-save and the suite then passed fully.\",\n  \"install.py was run with --clients manual and --update-policy never (no client configs written, update checks disabled).\",\n  \"Live src/server.py was only started to confirm it boots (exited cleanly on stdin EOF); no Resolve tool was called.\"\n ],\n \"stuck_step\":\"python install.py: scripting API did not load (DaVinci Resolve not present)\",\n \"main_blocker\":\"DaVinci Resolve Studio is not installed in this disposable guest, so the live Resolve control server cannot connect to Resolve.\",\n \"plain_failure\":\"The main product, which controls a running DaVinci Resolve Studio, could not be tested because Resolve is not installed on this test machine. The offline companion server that edits Resolve project files works and passed its tests.\",\n \"suggested_fix\":\"Run the README's install on a machine with DaVinci Resolve Studio and external scripting set to Local, then call a live Resolve tool. Also make install.py's venv error mention the apt package on Ubuntu clearly (it already does).\"\n}\njson.dump(report,open(f\"{ws}/.coldpass/report.json\",\"w\"),indent=2)\nprint(\"written\")\nEOF\n<env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | python3 -c \"import sys,json; d=sys.stdin.read(); print(d[:600])\"",
    "cd <guest-path> && python3 - <<'EOF'\nimport json\np=\"<guest-path>\"\nr=json.load(open(p))\nr[\"deviations\"]=[d for d in r[\"deviations\"] if \"src/server.py\" not in d]\nr[\"deviations\"].append(\"The live src/server.py was not started or called; the Resolve scripting API is absent, so it is unverified.\")\nr[\"deviations\"]=[d.replace(\"curl|sh, from the NodeSource-documented script\",\"via curl | sudo bash of the NodeSource setup script\") for d in r[\"deviations\"]]\nr[\"suggested_fix\"]=\"Run the README's install on a machine with DaVinci Resolve Studio and external scripting set to Local, then call a live Resolve tool. Consider making install.py's venv error name the apt package on Debian/Ubuntu.\"\njson.dump(r,open(p,\"w\"),indent=2)\nprint(\"ok\")\nEOF\n<env-var>=<guest-path> python3 -I <guest-path> --validate --replay > /tmp/checker_final.json 2>&1; echo \"exit=$?\"; python3 -c \"\nimport json\nd=json.load(open('/tmp/checker_final.json')) if False else None\n\" ; grep -o '\"valid\": [a-z]*' /tmp/checker_final.json; grep -o '\"problems\": \\[[^]]*\\]' /tmp/checker_final.json; grep -o '\"status\": \"[A-Z]*\"' /tmp/checker_final.json | sort | uniq -c"
  ],
  "stuck_step": "python install.py: scripting API did not load (DaVinci Resolve not present)",
  "error_excerpt": "DaVinci Resolve Studio is not installed in this disposable guest, so the live Resolve control server cannot connect to Resolve.",
  "what_it_did": "Run the README's source install (python install.py) and exercise the MCP servers; verified the offline advanced MCP server (editorial parse_interchange on an inline EDL). The live DaVinci Resolve control server (src/server.py) could not be exercised.",
  "suggested_fix": "Run the README's install on a machine with DaVinci Resolve Studio and external scripting set to Local, then call a live Resolve tool. Consider making install.py's venv error name the apt package on Debian/Ubuntu.",
  "tokens_in": 989232,
  "tokens_out": 17346,
  "cost_usd": 0.03494960000000001,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": false,
        "argv": [
          "node",
          "bin/davinci-resolve-advanced-mcp.mjs"
        ],
        "kind": "mcp",
        "serverInfo": {
          "name": "davinci-resolve-advanced-mcp",
          "version": "0.0.0-dev"
        },
        "tools": [
          "drp",
          "drt",
          "drx",
          "offline_ref",
          "fusion",
          "audio_plan",
          "fairlight",
          "audio",
          "conform",
          "project_db",
          "project_read",
          "color_trace",
          "capabilities",
          "pipeline",
          "deliverable",
          "media",
          "editorial",
          "provenance"
        ],
        "tool_schema_bytes": 32424,
        "tool_result": {
          "content": [
            {
              "type": "text",
              "text": "{\n  \"format\": \"edl\",\n  \"count\": 2,\n  \"events\": [\n    {\n      \"index\": 1,\n      \"track\": \"V\",\n      \"source\": \"SHOT_A.mov\",\n      \"srcIn\": 0,\n      \"srcOut\": 48,\n      \"recIn\": 86400,\n      \"recOut\": 86448,\n      \"speed\": 100,\n      \"reverse\": false,\n      \"transition\": null,\n      \"fps\": 24,\n      \"clipName\": \"SHOT_A.mov\"\n    },\n    {\n      \"index\": 2,\n      \"track\": \"V\",\n      \"source\": \"SHOT_B.mov\",\n      \"srcIn\": 48,\n      \"srcOut\": 120,\n      \"recIn\": 86448,\n      \"recOut\": 86520,\n      \"speed\": 100,\n      \"reverse\": false,\n      \"transition\": null,\n      \"fps\": 24,\n      \"clipName\": \"SHOT_B.mov\"\n    }\n  ]\n}"
            }
          ]
        },
        "tool_result_checked": true,
        "scope": "product operation"
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 1 connection review, 5 known vulnerability, 1 outside write. 9 static matches retained as context.",
    "expected": "Reviewed as expected for a test run: a Python interpreter or package manager probed its own interpreter file under a system program folder; apt refreshed its package lists; resolver address lookups that send no data.",
    "findings": [
      {
        "kind": "connection-review",
        "count": 1,
        "note": "Repository processes attempted these non-loopback connections; proxies can hide the final hostname.",
        "location_count": 28,
        "process_count": 12
      },
      {
        "kind": "known-vulnerability",
        "count": 5,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 2
      },
      {
        "kind": "outside-write",
        "count": 1,
        "note": "Repository processes attempted these writes outside documented output/cache paths.",
        "location_count": 552,
        "process_count": 3
      }
    ],
    "context": [
      {
        "kind": "encoded-blob",
        "count": 6,
        "note": "Source contains encoded blob; review its purpose.",
        "location_count": 1,
        "path": "resolve-advanced/test/drt-events.test.mjs"
      },
      {
        "kind": "hardcoded-secret",
        "count": 3,
        "note": "Gitleaks found a possible hardcoded secret; value withheld.",
        "location_count": 1,
        "path": "tests/test_media_analysis.py"
      }
    ],
    "limitations": [
      "A short run cannot establish that code is safe.",
      "Connections show IP addresses; proxies can hide the final hostname.",
      "Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing."
    ],
    "static": {
      "dependency_note": "OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check."
    },
    "evidence_url": "/safety/?run=samuelgursky--davinci-resolve-mcp-claude-haiku-5-5-1792852451643319252",
    "evidence_file": "/data/safety/samuelgursky--davinci-resolve-mcp-claude-haiku-5-5-1792852451643319252.json.gz"
  },
  "agent_execution": "native_agent",
  "agent_runtime": "claude-code",
  "agent_runtime_version": "2.1.300 (Claude Code)",
  "tool_transport": "mcp-assigned-vm",
  "platform": "linux",
  "reasoning": "low",
  "service_tier": null,
  "resources": {
    "cpus": 2,
    "memory_mib": 4096,
    "disk_mib": 32768
  },
  "native_tool_calls": 28,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "931bc2cda8fd9049982a457de9ff70836c406cd7",
    "url": "https://github.com/samuelgursky/davinci-resolve-mcp"
  },
  "purpose": "test_rerun",
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "fault": {
    "owner": "prerequisite",
    "status": "diagnosed",
    "reason": "DaVinci Resolve Studio is not installed in this disposable guest, so the live Resolve control server cannot connect to Resolve."
  },
  "fix_id": null,
  "verifies_run_id": "samuelgursky--davinci-resolve-mcp-claude-haiku-5-5-1792792767666618009",
  "hosting": null,
  "operation_scope": "product operation",
  "tool_calls": 28,
  "guest_setup": null,
  "runtime": null,
  "runtime_version": null,
  "runtime_revision": null,
  "source_revision": null,
  "evidence_version": null,
  "failure_origin": null,
  "evidence_strength": "partly_checked",
  "works": "untested",
  "install_s": null,
  "first_use_s": null,
  "mcp": "local",
  "needs": [],
  "needs_which": null,
  "agent_interface": [
    "mcp"
  ],
  "license": "MIT",
  "repo_url": "https://github.com/samuelgursky/davinci-resolve-mcp",
  "cost_to_try": null,
  "hardware": null,
  "what_failed": "DaVinci Resolve Studio is not installed in this disposable guest, so the live Resolve control server cannot connect to Resolve.",
  "local_or_hosted": "local",
  "cycle_checks": [
    {
      "kind": "cycle",
      "claim": "Scheduled or looping main behavior",
      "source": "repository entry points",
      "input": "source inspection",
      "expected": "identify the product trigger",
      "verdict": "yes",
      "outcome": "Entry points inspected (README.md, bin/, src/server.py, src/batch_cli.py, src/utils/grade_loop.py, resolve-advanced/bin, resolve-advanced/server). No cron, scheduler, daemon loop, webhook or --once/--now product cycle; grade_loop is a retry-ladder assessment helper and batch_cli is a job runner, not a scheduled cycle. The advanced server is stdio request/response only.",
      "evidence": "Entry points inspected (README.md, bin/, src/server.py, src/batch_cli.py, src/utils/grade_loop.py, resolve-advanced/bin, resolve-advanced/server). No cron, scheduler, daemon loop, webhook or --once/--now product cycle; grade_loop is a retry-ladder assessment helper and batch_cli is a job runner, not a scheduled cycle. The advanced server is stdio request/response only.",
      "command": ""
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "The advanced server edits Resolve files with no Resolve running: parses an EDL offline",
      "source": "applies DB/XML-level changes **with no Resolve running**, so it",
      "input": "{\"tool\": \"editorial\", \"arguments\": {\"action\": \"parse_interchange\", \"args\": {\"format\": \"edl\", \"content\": \"TITLE: DEMO\\nFCM: NON-DROP FRAME\\n\\n001  AX       V     C        00:00:00:00 00:00:02:00 01:00:00:00 01:00:02:00\\n* FROM CLIP NAME:  SHOT_A.mov\\n\\n002  AX       V     C        00:00:02:00 00:00:05:00 01:00:02:00 01:00:05:00\\n* FROM CLIP NAME:  SHOT_B.mov\\n\", \"fps\": 24}}}",
      "expected": "events list both clips, including SHOT_B.mov",
      "command": "node bin/davinci-resolve-advanced-mcp.mjs tools/call {\"tool\": \"editorial\", \"arguments\": {\"action\": \"parse_interchange\", \"args\": {\"format\": \"edl\", \"content\": \"TITLE: DEMO\\nFCM: NON-DROP FRAME\\n\\n001  AX       V     C        00:00:00:00 00:00:02:00 01:00:00:00 01:00:02:00\\n* FROM CLIP NAME:  SHOT_A.mov\\n\\n002  AX       V     C        00:00:02:00 00:00:05:00 01:00:02:00 01:00:05:00\\n* FROM CLIP NAME:  SHOT_B.mov\\n\", \"fps\": 24}}}",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: SHOT_B.mov",
      "evidence": "SHOT_B.mov\\\",\\n      \\\"srcIn\\\": 48,\\n      \\\"srcOut\\\": 120,\\n      \\\"recIn\\\": 86448,\\n      \\\"recOut\\\": 86520,\\n      \\\"speed\\\": 100,\\n      \\\"reverse\\\": false,\\n      \\\"transition\\\": null,\\n      \\\"fps\\\": 24,\\n      \\\"clipName\\\": \\\"SHOT_B.mov\\\"\\n    }\\n  ]\\n}\"}]}",
      "source_checked": true,
      "source_file": "README.md"
    },
    {
      "kind": "claim",
      "claim": "Live Resolve control requires Resolve Studio external scripting",
      "source": "Before connecting, open DaVinci Resolve Studio and set **Preferences > General > External scripting using** to **Local**.",
      "input": "",
      "expected": "",
      "command": "",
      "verdict": "blocked",
      "outcome": "DaVinci Resolve is not installed in this disposable Linux guest; install.py reported 'API Path: Not found' and 'Library: Not found', so the live Python server cannot be exercised here",
      "evidence": "DaVinci Resolve is not installed in this disposable Linux guest; install.py reported 'API Path: Not found' and 'Library: Not found', so the live Python server cannot be exercised here",
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "Offline test suite for the advanced server passes without Resolve",
      "source": "resolve-advanced/package.json scripts.test",
      "input": "npm test in resolve-advanced after npm install --omit=dev --omit=optional plus --no-save better-sqlite3",
      "command": "npm test",
      "evidence": "00 - internals.varintToNumber: handles BigInt and number\n  ---\n  duration_ms: 0.045896\n  type: 'test'\n  ...\n# Subtest: round-trip: hue + sat + lum bounded survives generate\u2192parse\u2192extract\nok 1201 - round-trip: hue + sat + lum bounded survives generate\u2192parse\u2192extract\n  ---\n  duration_ms: 9.044142\n  type: 'test'\n  ...\n# Subtest: round-trip: full spec with softness on all axes\nok 1202 - round-trip: full spec with softness on all axes\n  ---\n  duration_ms: 0.921695\n  type: 'test'\n  ...\n1..1202\n# tests 1202\n# suites 0\n# pass 1136\n# fail 0\n# cancelled 0\n# skipped 66\n# todo 0\n# duration_ms 128372.416357",
      "deferred": false,
      "expected": "all offline tests pass, 0 failing",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    }
  ],
  "does_what_it_says": "partly",
  "maintenance": {
    "archived": false,
    "commits_90d": 804,
    "last_commit_at": "2026-10-23T11:24:55Z",
    "last_release_at": "2026-10-23T11:24:58Z",
    "median_reply_hours": 10.3,
    "merged_prs_90d": 129,
    "note": "actively maintained: last commit 0 days ago; 804 commits and 129 merged PRs in 90 days; 3 open issues, 2 open PRs; 24 of 24 recent threads got a maintainer reply, median first reply 10.3h; latest release 2026-10-23",
    "open_issues": 3,
    "open_prs": 2,
    "reply_share": 1.0,
    "reply_threads": 24,
    "verdict": "maintained"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 0 days ago; 804 commits and 129 merged PRs in 90 days; 3 open issues, 2 open PRs; 24 of 24 recent threads got a maintainer reply, median first reply 10.3h; latest release 2026-10-23",
  "maintained": "active",
  "maintained_note": "last commit 1 days ago; 3 open issues, 6 answered or closed",
  "last_commit_at": "2026-10-23T11:24:58Z",
  "last_release_at": "2026-10-23T11:24:58Z",
  "open_issues": 3,
  "answered_issues": 6,
  "platforms_claimed": [
    "linux",
    "mac",
    "windows"
  ],
  "topic": "mcp-server",
  "agent_interfaces": [
    {
      "interface": "mcp",
      "evidence": "independent checker",
      "observed": true,
      "operation_checked": false
    }
  ],
  "agent_interfaces_note": "README metadata is a discovery hint, not pinned documentation proof. Observed interfaces were exercised in this run. An empty list means unknown.",
  "mcp_context": {
    "tool_count": 18,
    "schema_bytes": 32424,
    "tokens_approx": 8106,
    "estimate_method": "ceil(compact UTF-8 tools/list JSON bytes / 4)",
    "scope": "returned tools/list page only; excludes client framing and tool results"
  },
  "tested_at": "2026-10-24T15:01:00.405236+00:00",
  "tested_commit": "931bc2cda8fd9049982a457de9ff70836c406cd7",
  "tested_with": {
    "agent": "claude-code",
    "agent_version": "2.1.300 (Claude Code)",
    "model": "claude-haiku-5-5",
    "model_route": "claude-haiku-5-5",
    "reasoning": "low",
    "os": "linux",
    "backend": "hyperv",
    "transport": "mcp-assigned-vm"
  },
  "setup_identity": {
    "repo": "samuelgursky/davinci-resolve-mcp",
    "source": "https://github.com/samuelgursky/davinci-resolve-mcp",
    "commit": "931bc2cda8fd9049982a457de9ff70836c406cd7",
    "source_revision": null,
    "os": "linux",
    "architecture": null,
    "backend": "hyperv",
    "model": "claude-haiku-5-5",
    "model_version": "claude-haiku-5-5",
    "agent_execution": "native_agent",
    "agent_runtime": "claude-code",
    "agent_runtime_version": "2.1.300 (Claude Code)",
    "tool_transport": "mcp-assigned-vm",
    "runtime": null,
    "runtime_version": null,
    "runtime_revision": null,
    "sandbox_source": null,
    "guest_setup": null,
    "source_pin": {
      "commit": "931bc2cda8fd9049982a457de9ff70836c406cd7",
      "url": "https://github.com/samuelgursky/davinci-resolve-mcp"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": null,
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Run the README's source install (python install.py) and exercise the MCP servers; verified the offline advanced MCP server (editorial parse_interchange on an inline EDL). The live DaVinci Resolve control server (src/server.py) could not be exercised.",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "mcp",
    "test_version": "readme-4ca2a26a405bc64d87f5a6e1e9a57fa6557d9c79c5de6c18192fa83333db9158",
    "evidence_version": null
  },
  "transcript_url": null,
  "report_url": "/reports/samuelgursky--davinci-resolve-mcp-claude-haiku-5-5-1792852451643319252.json"
}
