{
  "tokens_out": 6328,
  "outcome": "pass",
  "suggested_fix": null,
  "cycle_checks": null,
  "fault": {
    "owner": null,
    "status": "resolved",
    "reason": null,
    "evidence": []
  },
  "runtime_revision": null,
  "agent_execution": "native_agent",
  "time_to_working_s": null,
  "usage_complete": true,
  "runtime": null,
  "architecture": null,
  "local_or_hosted": null,
  "agent_interfaces_note": null,
  "platform_details": null,
  "platforms_claimed": null,
  "maintenance": null,
  "evidence_strength": null,
  "purpose": "initial",
  "topic": null,
  "needs_which": null,
  "tested_with": null,
  "native_bundle": null,
  "agent_runtime": "claude-code",
  "maintenance_note": null,
  "runtime_version": null,
  "does_what_it_says": null,
  "commit": "03f2745ae07fb6aae67cf4ef79a84d1ec618b19e",
  "failure_origin": null,
  "stuck_step": null,
  "repo_url": null,
  "needs": null,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": true,
        "argv": [
          "/tmp/uiprotect-venv/bin/uiprotect",
          "-a",
          "127.0.0.1",
          "decode-ws-msg",
          "AQEBAAAAAHR4nB2MWwqDMBBFtyLz3YAmkzDpDorfLmCSGUFotfigFHHvknyee7jnBM77tMzwbOD4Cu8KjwZm/Q0VXlJEsIqx88mQxWDQ52jIiRgZO6eOOSKncvssou9e/zW26Vq2qRYw+7F1TJmSILGQtiFY8nDdlRMkmAIBAQAAAAEkeJyFkc1uwjAQhF8FRT2hHOz4Jz8P0HMv7aXisLbXwcJJkB1AqOq7NwSoCm3xxbJG34x3xx9ZG4bdNmbN4j2TVDErNCe0FlAShiUh06mzVb7IwPsXDJ2L0Q39mfduj3uHh2bZGCmU4lRTbiRAXSgLHKSh2eT8gfFaKSUIEbzgQAwTVBSypHCHqaLSrLK0KIiVijPLakaMtfdYXU0jC8agKhEkq6dHDWfVCev3oQkIplnemPSkjXiSdhHPRH4IbsTcoMcRm6er+UadQ+amLgn5b+fyO/UxEvUazc5jAvPYgj6+Pr/9MeQMqOBMm0rR0GGAf6FZ6dA4uAjz/dpZux5Tu2Afh9TCZhiCH/QmgZ3+J1mecXHr4Zjaeu26h82sPr8AeQX7wQ=="
        ],
        "kind": "cli",
        "returncode": 0,
        "stdout": "{\"action\":{\"action\":\"update\",\"newUpdateId\":\"62e4915b-8246-45c9-83dd-df13e3aa94ab\",\"modelKey\":\"user\",\"id\":\"4c5f03a8c8bd48ad8e066285\"},\"data\":{\"groups\":[\"61b3f5c40195a703e70003ec\"],\"allPermissions\":[\"liveview:*:d65bb41c14d6aa92bfa4a6d1\",\"liveview:*:49bbb5005424a0d35152671a\",\"liveview:*:b28c38f1220f6b43f3930dff\",\"liveview:*:b9861b533a87ea639fa4d438\",\"nvr:read:*\",\"liveview:create\",\"user:read,write,delete:$\",\"nvr:write,delete:*\",\"group:create,read,write,delete:*\",\"user:create,read,write,delete:*\",\"schedule:create,read,write,delete:*\",\"legacyUFV:read,write,delete:*\",\"bridge:create,read,write,delete:*\",\"camera:create,read,write,delete,readmedia,deletemedia:*\",\"light:create,read,write,delete:*\",\"sensor:create,read,write,delete:*\",\"doorlock:create,read,write,delete:*\",\"viewer:create,read,write,delete:*\",\"display:create,read,write,delete:*\",\"chime:create,read,write,delete:*\"]}}",
        "stderr": "",
        "needs_credentials": false,
        "needs_browser": false,
        "scope": "product operation"
      }
    }
  ],
  "open_issues": null,
  "agent_runtime_version": "2.1.300 (Claude Code)",
  "verifies_run_id": null,
  "total_s": 127.99488568305969,
  "license": null,
  "tool_calls": 16,
  "model_version": "claude-haiku-5-5",
  "example_checks": [],
  "mcp": null,
  "other_model": null,
  "first_use_s": null,
  "native_tool_calls": 16,
  "last_commit_at": null,
  "source": "https://github.com/uilibs/uiprotect",
  "models_agree": null,
  "maintenance_verdict": null,
  "cost_usd": 0.012802860000000003,
  "safety": null,
  "answered_issues": null,
  "what_failed": null,
  "steps": [
    "cd <host-path> && git log -1 --oneline 2>/dev/null; ls -la; cat README* | head -200",
    "cat <host-path> | head -80; ls <host-path>",
    "cd <host-path> && sed -n 200,400p README.md; ls .github/workflows; python3 --version; which uv pip pipx poetry 2>&1",
    "cd /tmp && python3 -m venv /tmp/uiprotect-venv 2>&1 | tail -3; /tmp/uiprotect-venv/bin/pip install -q --upgrade pip 2>&1 | tail -2; /tmp/uiprotect-venv/bin/pip install -q \"<host-path>\" 2>&1 | tail -15; echo EXIT=$?; ls /tmp/uiprotect-venv/bin | grep -i uiprotect",
    "cd <host-path> && cat .github/workflows/ci.yml | head -120; ls scripts docs",
    "export DEBIAN_FRONTEND=noninteractive; (sudo -n apt-get update -qq && sudo -n apt-get install -y -qq python3-venv python3-pip) >/tmp/apt.log 2>&1; echo APT=$?; tail -3 /tmp/apt.log; rm -rf /tmp/uiprotect-venv; python3 -m venv /tmp/uiprotect-venv && /tmp/uiprotect-venv/bin/pip install -q \"<host-path>\" > /tmp/pip.log 2>&1; echo PIP=$?; tail -15 /tmp/pip.log; ls /tmp/uiprotect-venv/bin | grep -i protect",
    "cd /tmp && /tmp/uiprotect-venv/bin/uiprotect --help 2>&1 | head -60; echo ---; grep -n \"^#\\|uiprotect \" <host-path> | head -60",
    "cd <host-path> && /tmp/uiprotect-venv/bin/uiprotect --help 2>&1 | grep -A40 \"Commands\" | head -50; echo ---; cat .github/workflows/spec-validation.yml; echo ---; head -40 scripts/validate_spec.py; echo ---; ls openapi",
    "cd /tmp && /tmp/uiprotect-venv/bin/uiprotect decode-ws-msg --help 2>&1 | sed 's/[\u2502\u256d\u256e\u2570\u256f\u2500]//g' | tr -s ' ' | head -30; cd <host-path> && grep -rl \"decode\" tests | head; grep -n -B2 -A8 \"decode-ws-msg\" docs/cli.md | head -40",
    "cd <host-path> && grep -n \"decode\" src/uiprotect/cli/*.py | head -20; ls tests/sample_data 2>/dev/null | head; grep -rln \"base64\" tests/*.py tests/data 2>/dev/null | head",
    "cd <host-path> && sed -n 325,350p src/uiprotect/cli/__init__.py; grep -n \"b64\\|base64\" tests/test_utils.py | head -5; grep -n \"def test_decode\\|ws_msg\\|decode_ws\" tests/*.py | head",
    "cd <host-path> && ls tests/sample_data/events_ws_public | head; ls tests/sample_data | grep -i ws; grep -rn \"ws_public\\|events_ws\" tests/conftest.py | head -5",
    "cd <host-path> && head -c 600 tests/sample_data/sample_ws_messages.json; echo; /tmp/uiprotect-venv/bin/python3 -I -c \"import json;d=json.load(open('tests/sample_data/sample_ws_messages.json'));print(type(d), list(d)[:10] if isinstance(d,dict) else len(d))\"",
    "cd <host-path> && /tmp/uiprotect-venv/bin/python3 -I -c \"import json;d=json.load(open('tests/sample_data/sample_ws_messages.json'));print(next(iter(d.values()))['raw'])\" > /tmp/ws_raw.txt && cd /tmp && /tmp/uiprotect-venv/bin/uiprotect -a 127.0.0.1 decode-ws-msg \"$(cat /tmp/ws_raw.txt)\"; echo EXIT=$?",
    "cd <host-path> && mkdir -p .coldpass && ls -la .coldpass && python3 -I - <<'EOF'\nimport json\nraw = open('/tmp/ws_raw.txt').read().strip()\nprobe = {\n  \"kind\": \"cli\",\n  \"argv\": [\"/tmp/uiprotect-venv/bin/uiprotect\", \"-a\", \"127.0.0.1\", \"decode-ws-msg\", raw],\n  \"cwd\": \"<host-path>\",\n  \"expected_text\": \"\\\"modelKey\\\":\\\"user\\\"\"\n}\nreport = {\n  \"outcome\": \"working\",\n  \"operation\": \"uiprotect decode-ws-msg on a recorded base64 Protect websocket frame from tests/sample_data/sample_ws_messages.json; prints decoded action and data JSON\",\n  \"operation_scope\": \"Offline decode only. Live console operations (cameras list-ids, nvr, etc.) need a UniFi Protect console, API key or local user, which this VM does not have, so they were not exercised.\",\n  \"steps\": [\n    \"Read README.md (Installation > From GitHub/PyPI, Quickstart > CLI).\",\n    \"apt-get install -y python3-venv python3-pip (ensurepip missing for python3 -m venv).\",\n    \"python3 -m venv /tmp/uiprotect-venv\",\n    \"/tmp/uiprotect-venv/bin/pip install \\\"<host-path>\\\" (the README's pip install \\\"uiprotect[cli]\\\" from the pinned checkout).\",\n    \"uiprotect --help (verified CLI entry point).\",\n    \"uiprotect -a 127.0.0.1 decode-ws-msg <base64> (docs/cli.md command table) on a sample frame; exit 0 and decoded JSON printed.\"\n  ],\n  \"deviations\": [\n    \"python3 -m venv failed with no ensurepip; ran apt-get install python3-venv python3-pip, then recreated the venv.\",\n    \"decode-ws-msg is documented in docs/cli.md, not README.md; used it because the README has no offline operation. Its top-level --address is required by typer but unused by this command, so a dummy 127.0.0.1 is passed.\",\n    \"Probe argv contains the sample base64 frame inline instead of a file path, because file-based inputs are rejected by the checker.\"\n  ],\n  \"stuck_step\": None,\n  \"main_blocker\": None,\n  \"suggested_fix\": None\n}\njson.dump(probe, open('.coldpass/probe.json','w'), indent=2)\njson.dump(report, open('.coldpass/report.json','w'), indent=2)\nprint(\"written\")\nEOF\n<env-var>=<host-path> python3 -I <host-path> --validate; echo EXIT=$?",
    "cd <host-path> && python3 -I -c \"\nimport json,subprocess\np=json.load(open('.coldpass/probe.json'))\nr=subprocess.run(p['argv'],cwd=p['cwd'],capture_output=True,text=True)\nprint(r.returncode, p['expected_text'] in r.stdout)\"; ls -d *.egg-info build dist 2>/dev/null; ls -la .coldpass"
  ],
  "platform_conflicts": null,
  "claims_note": null,
  "maintained_note": null,
  "repo": "uilibs/uiprotect",
  "service_tier": null,
  "maintained": null,
  "source_pin": null,
  "operation_scope": "product operation",
  "reasoning": "low",
  "claims": [],
  "platform": "linux",
  "cost_to_try": null,
  "backend": null,
  "tool_transport": "mcp-assigned-vm",
  "hardware": null,
  "agent_interface": null,
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "date": "2026-10-18T17:35:47.762052+00:00",
  "kind": "repo",
  "resources": {
    "cpus": 2,
    "memory_mib": 4096,
    "disk_mib": 32768
  },
  "error_excerpt": null,
  "pass": true,
  "evidence_version": null,
  "source_revision": null,
  "run_id": "uilibs--uiprotect-claude-haiku-5-5-1792344819767154842",
  "last_release_at": null,
  "furthest_model": null,
  "model": "claude-haiku-5-5",
  "what_it_did": "uiprotect decode-ws-msg on a recorded base64 Protect websocket frame from tests/sample_data/sample_ws_messages.json; prints decoded action and data JSON",
  "sandbox_source": null,
  "other_run_id": null,
  "hosting": null,
  "tested_commit": null,
  "guest_setup": null,
  "mcp_context": null,
  "agent_interfaces": [],
  "setup_identity": null,
  "works": null,
  "install_s": null,
  "fix_id": null,
  "tokens_in": 368840,
  "tested_at": null,
  "test_version": "readme-c5e0ccb431a80a9d60d2e220a9fed646c77ddd4e70bc799cda23957b77e37337",
  "recovery": {
    "source": "legacy-oct16-18",
    "original_run_id": "uilibs--uiprotect-claude-haiku-5-5-1792344819767154842",
    "historical": true,
    "ledger_sha256": "c5e6a833c182c1e2aecf69d0bd0020aec63c65d98f3e933e4b32232340312736"
  },
  "transcript_url": "/transcripts/uilibs--uiprotect-claude-haiku-5-5-1792344819767154842.txt",
  "report_url": "/reports/uilibs--uiprotect-claude-haiku-5-5-1792344819767154842.json"
}
