{
  "run_id": "droidrun--mobile-jev-claude-haiku-5-5-1792789649570607108",
  "date": "2026-10-23T21:13:45.344723+00:00",
  "repo": "droidrun/mobile-jev",
  "kind": "repo",
  "source": "https://github.com/droidrun/mobile-jev",
  "commit": "395fc222beac4f059f9a0beb337d114a2b066e99",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9",
  "pass": null,
  "outcome": "unverified",
  "time_to_working_s": null,
  "total_s": 375.77408719062805,
  "steps": [
    "cd <guest-path> && pwd && ls -la && id -u && cat /etc/os-release | head -3 && python3 --version && ls /inputs 2>/dev/null; ls <guest-path> 2>/dev/null",
    "cd <guest-path> && find . -maxdepth 2 -not -path './.git*' | head -100 && cat README.md 2>/dev/null | head -200",
    "cd <guest-path> && which node npm pnpm corepack curl; node --version 2>&1; cat .nvmrc; cat package.json; ls -la .coldpass; cat AGENTS.md | head -40; cat .env.example",
    "cd <guest-path> && git init -q 2>&1; git remote add origin https://github.com/droidrun/mobile-jev 2>&1; timeout 300 git fetch --depth 1 origin 395fc222beac4f059f9a0beb337d114a2b066e99 2>&1 | tail -5; git reset --mixed FETCH_HEAD 2>&1 | tail -2; git log --oneline -1 2>&1",
    "cd /tmp && curl -fsSL -o node24.tar.xz https://nodejs.org/dist/latest-v24.x/SHASUMS256.txt 2>&1 | tail -2; grep -o 'node-v24[^ ]*linux-x64.tar.xz' SHASUMS256.txt 2>/dev/null | head -1",
    "cd /tmp && ls -la SHASUMS256.txt node24.tar.xz 2>&1; head -c 300 SHASUMS256.txt 2>/dev/null; echo; curl -sI https://nodejs.org/dist/ | head -3; env | grep -i proxy | sed 's/=.*@/=***@/' ",
    "cd /tmp && rm -f node24.tar.xz && curl -fsSL https://nodejs.org/dist/latest-v24.x/SHASUMS256.txt -o /tmp/SHASUMS256.txt; echo rc=$?; grep 'linux-x64.tar.xz' /tmp/SHASUMS256.txt",
    "mkdir -p /tmp/node24 && cd /tmp/node24 && curl -fsSL -o node.tar.xz https://nodejs.org/dist/v24.22.1/node-v24.22.1-linux-x64.tar.xz && echo \"6c172a9ab6718f7b801fb5a7bd486af2ee5e32758086a04b84fcce2aa77095e6  node.tar.xz\" | sha256sum -c - && tar -xJf node.tar.xz --strip-components=1 && export PATH=/tmp/node24/bin:$PATH && node --version && npm --version && corepack --version && corepack enable 2>&1 | tail -2; export PATH=/tmp/node24/bin:$PATH; pnpm --version 2>&1",
    "export PATH=/tmp/node24/bin:$PATH; cd <guest-path> && corepack use pnpm@10.30.1 >/dev/null 2>&1; git checkout -- package.json 2>/dev/null; git status --short | head; corepack enable 2>&1|tail -1; pnpm --version; ls -la /tmp/node24/bin | head -3",
    "export PATH=/tmp/node24/bin:$PATH NODE_USE_ENV_PROXY=1; cd <guest-path> && timeout 900 pnpm install --frozen-lockfile 2>&1 | tail -25; echo rc=${PIPESTATUS[0]}",
    "export PATH=/tmp/node24/bin:$PATH; cd <guest-path> && cp -n .env.example .env.local && timeout 900 pnpm check > /tmp/check.log 2>&1; echo rc=$?; tail -40 /tmp/check.log",
    "export PATH=/tmp/node24/bin:$PATH; cd <guest-path> && grep -E '^# (tests|pass|fail)' /tmp/check.log; export PATH=/tmp/node24/bin:$PATH; timeout 60 pnpm agent --help 2>&1 | head -60; echo rc=$?; ls scripts/mobile-agent; cat scripts/run.mjs | head -40",
    "export PATH=/tmp/node24/bin:$PATH; cd <guest-path> && timeout 600 pnpm test 2>&1 | grep -E '^# (tests|pass|fail|suites)'; echo; timeout 60 pnpm agent devices 2>&1 | tail -5; echo rc=$?; cat .env.local | sed 's/=.*/=<set-or-empty>/' ",
    "export PATH=/tmp/node24/bin:$PATH; cd <guest-path> && timeout 600 pnpm test > /tmp/test.log 2>&1; echo rc=$?; grep -E '^\u2139 (tests|pass|fail)' /tmp/test.log; tail -3 /tmp/test.log; (cd <guest-path> && nohup pnpm start > /tmp/studio.log 2>&1 &) ; sleep 8; curl -s -o /tmp/root.html -w 'HTTP %{http_code}\\n' http://127.0.0.1:3040/; grep -o '<title>[^<]*' /tmp/root.html | head -2; grep -o 'Run task' /tmp/root.html | head -1; tail -5 /tmp/studio.log",
    "cd <guest-path> && find . -path ./node_modules -prune -o -path ./.next -prune -o -type f -print | head -50; grep -rn \"pathname\\|router\\|'/runs\\|\\\"/runs\\|/api/\" --include=*.ts --include=*.mjs server app 2>/dev/null | grep -v test | head -40",
    "cd <guest-path> && cat \"app/api/studio/[...path]/route.ts\" | head -120; echo ----; curl -s -w '\\nHTTP %{http_code}\\n' http://127.0.0.1:3040/api/studio/runs; curl -s -w '\\nHTTP %{http_code}\\n' http://127.0.0.1:3040/api/studio/device | head -c 400",
    "cd <guest-path> && grep -rn \"setInterval\\|cron\\|--once\\|--now\\|webhook\\|schedule\" --include=*.mjs --include=*.ts --include=*.tsx scripts apps/jev-studio/server apps/jev-studio/app apps/jev-studio/launch.mjs 2>/dev/null | grep -v test | head; echo ---; grep -n \"CI runs offline\\|pnpm check       #\\|binds to localhost\\|Open \\*\\*\\|Run task\\|offline\\|CI requires no API keys\" README.md; echo ---; pkill -f \"next start\" ; pkill -f \"pnpm start\"; sleep 2; curl -s -o /dev/null -w '%{http_code}\\n' http://127.0.0.1:3040/ || true",
    "cd <guest-path> && grep -rn \"setInterval\\|cron\\|--once\\|--now\\|webhook\\|schedule\" --include=*.mjs --include=*.ts --include=*.tsx scripts apps/jev-studio/server apps/jev-studio/app apps/jev-studio/launch.mjs 2>/dev/null | grep -v test | head; echo ---; grep -n \"CI runs offline\\|pnpm check       #\\|Open \\*\\*\\|Run task\\|CI requires no API keys\" README.md; echo ---; for p in $(pgrep -f 'next-server|next start|next/dist' ); do echo pid $p; done; (ss -ltnp 2>/dev/null || netstat -ltnp 2>/dev/null) | grep 3040",
    "cd <guest-path> && for pid in $(ss -ltnp | grep ':3040 ' | grep -o 'pid=[0-9]*' | cut -d= -f2); do kill $pid; done; sleep 2; ss -ltnp | grep -c ':3040 ' ; pgrep -fa 'next-server' | grep -v pgrep | head -3; echo stopped",
    "cd <guest-path> && cat > probe.json <<'EOF'\n{\"kind\":\"http\",\"argv\":[\"pnpm\",\"start\"],\"cwd\":\"<guest-path>\",\"url\":\"http://127.0.0.1:3040/\",\"env\":{\"PATH\":\"/tmp/node24/bin:/usr/local/bin:/usr/bin:/bin\"},\"expected_text\":\"Run task\"}\nEOF\ncat > claims.json <<'EOF'\n[\n {\"kind\":\"claim\",\"claim\":\"CI runs offline tests on Linux\",\"source\":\"CI runs offline tests and the build on Linux.\",\"input\":\"pnpm test (offline test suite, no API keys)\",\"expected\":\"all tests pass\",\"probe_kind\":\"cli\",\"argv\":[\"pnpm\",\"test\"],\"expected_text\":\"pass 55\",\"cwd\":\"<guest-path>\",\"env\":{\"PATH\":\"/tmp/node24/bin:/usr/local/bin:/usr/bin:/bin\"}},\n {\"kind\":\"claim\",\"claim\":\"pnpm check runs tests, lint, typecheck, formatting and production build\",\"source\":\"tests, lint, typecheck, formatting, production build\",\"input\":\"pnpm check\",\"expected\":\"formatting check and Next.js production build succeed\",\"probe_kind\":\"cli\",\"argv\":[\"pnpm\",\"check\"],\"expected_text\":\"Compiled successfully\",\"cwd\":\"<guest-path>\",\"env\":{\"PATH\":\"/tmp/node24/bin:/usr/local/bin:/usr/bin:/bin\"}}\n]\nEOF\ncat > examples.json <<'EOF'\n[\n {\"kind\":\"example\",\"claim\":\"Development: run the offline test suite\",\"source\":\"README.md Development (pnpm check)\",\"input\":\"pnpm test\",\"expected\":\"55 tests pass, 0 fail\",\"argv\":[\"pnpm\",\"test\"],\"cwd\":\"<guest-path>\",\"env\":{\"PATH\":\"/tmp/node24/bin:/usr/local/bin:/usr/bin:/bin\"},\"expected_text\":\"pass 55\"},\n {\"kind\":\"example\",\"claim\":\"Run it: list devices before setting MOBILERUN_DEVICE_ID\",\"source\":\"README.md Run it (pnpm devices)\",\"reason\":\"Requires MOBILERUN_API_KEY and a ready Mobilerun Android device; neither is available in this guest. Ran instead: pnpm agent devices, which failed with 'A valid API key is required.' (exit 1).\"},\n {\"kind\":\"example\",\"claim\":\"Preview the next agent decision for a goal\",\"source\":\"README.md Use the CLI (pnpm agent run)\",\"reason\":\"Requires MOBILERUN_API_KEY, TYPESAFE_API_KEY and a ready device; no credentials are available in this guest, so no live model or device request was made.\"},\n {\"kind\":\"example\",\"claim\":\"Run the dark-theme demo\",\"source\":\"README.md Included demo (pnpm demo dark-theme --reset)\",\"reason\":\"Requires live Mobilerun and TypeSafe credentials plus an Android device; not run. Deferred on purpose.\"}\n]\nEOF\ncat > cycles.json <<'EOF'\n{\"detected\":false,\"reason\":\"Entry points inspected: scripts/run.mjs, scripts/mobile-agent/cli.mjs, scripts/demo.mjs, apps/jev-studio/app/api/studio/[...path]/route.ts. The only timers are a UI clock (use-studio.ts setInterval) and an SSE heartbeat (route.ts setInterval). No cron, scheduler, --once/--now, or webhook. The agent loop runs only when a user invokes pnpm agent run --execute, and it needs live credentials.\",\"checks\":[]}\nEOF\nfor f in probe claims examples cycles; do python3 -I -m json.tool $f.json >/dev/null && echo \"$f ok\"; done",
    "cd <guest-path> && export PATH=/tmp/node24/bin:$PATH && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay 2>&1 | tail -60; echo rc=${PIPESTATUS[0]}",
    "export PATH=/tmp/node24/bin:$PATH; cd <guest-path> && node_modules/.bin/prettier --write .coldpass/probe.json .coldpass/claims.json .coldpass/examples.json .coldpass/cycles.json && node_modules/.bin/prettier --check .coldpass/*.json; cd .coldpass && cat > claims.json <<'EOF'\n[\n {\"kind\":\"claim\",\"claim\":\"Open the <email>:3040 and it shows a Run task control\",\"source\":\"Open **http://127.0.0.1:3040**. Enter a goal and press **Run task**.\",\"input\":\"GET http://127.0.0.1:3040/ after pnpm start\",\"expected\":\"studio page with Run task control\",\"probe_kind\":\"http\",\"argv\":[\"pnpm\",\"start\"],\"url\":\"http://127.0.0.1:3040/\",\"expected_text\":\"Run task\",\"cwd\":\"<guest-path>\",\"env\":{\"PATH\":\"/tmp/node24/bin:/usr/local/bin:/usr/bin:/bin\"}},\n {\"kind\":\"claim\",\"claim\":\"pnpm check runs tests, lint, typecheck, formatting and production build\",\"source\":\"tests, lint, typecheck, formatting, production build\",\"input\":\"pnpm check\",\"expected\":\"formatting check and Next.js production build succeed\",\"probe_kind\":\"cli\",\"argv\":[\"pnpm\",\"check\"],\"expected_text\":\"Compiled successfully\",\"cwd\":\"<guest-path>\",\"env\":{\"PATH\":\"/tmp/node24/bin:/usr/local/bin:/usr/bin:/bin\"}}\n]\nEOF\ncd .. && node_modules/.bin/prettier --write .coldpass/claims.json >/dev/null && node_modules/.bin/prettier --check .coldpass/*.json && python3 -I -m json.tool .coldpass/claims.json >/dev/null && echo claims-json-ok",
    "cd <guest-path> && ls -la .coldpass; head -c 400 .coldpass/observed.json; echo; grep -n \"observed.json\" <guest-path> | head",
    "cd <guest-path> && rm -f .coldpass/observed.json && export PATH=/tmp/node24/bin:$PATH && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > /tmp/validate1.json 2>&1; echo rc=$?; python3 -I -c \"\nimport json,sys\nd=json.load(open('/tmp/validate1.json')) if open('/tmp/validate1.json').read(1)=='{' else None\nprint('valid', d and d.get('valid')); print('problems', d and d.get('problems'))\n\" 2>&1 | head -30; ss -ltnp | grep 3040 || echo no-port-3040",
    "cd <guest-path> && python3 -I -c \"\nimport json\nd=json.load(open('/tmp/validate1.json'))\nprint(d.get('replay',{}).get('status'))\ndet=d.get('replay',{}).get('details',{})\nfor c in det.get('claims',[]): print('CLAIM', c['claim'][:50], c.get('verdict'), c.get('outcome','')[:90])\nfor c in det.get('example_checks',[]): print('EX', c['claim'][:50], c.get('verdict'))\nfor c in det.get('cycle_checks',[]): print('CY', c.get('verdict'))\nprint('probe', det.get('status'), det.get('working'))\n\"",
    "cd <guest-path> && python3 -I -c \"\nimport json\nd=json.load(open('<guest-path>'))\nprint(json.dumps(d,indent=0)[:200])\n\" ; python3 -I -c \"\nimport json\nd=json.load(open('<guest-path>'))\nfor k,v in d.items():\n  if isinstance(v,list):\n    for c in v: print(k, c.get('claim','')[:45], '|', c.get('verdict'), '|', str(c.get('outcome',''))[:70])\n\" 2>/dev/null | head -20",
    "cd <guest-path> && cat > report.json <<'EOF'\n{\n  \"outcome\": \"needs_credentials\",\n  \"fault_owner\": \"prerequisite\",\n  \"operation\": \"Install and build the Mobile Jev studio from the README, verify the offline test/lint/typecheck/format/build suite, and start the local studio UI (pnpm start, http://127.0.0.1:3040). The headline operation (driving a real Android phone through Mobilerun and TypeSafe) was not exercised.\",\n  \"operation_scope\": \"Offline: Linux Ubuntu 24.04 guest, Node 24.22.1, pnpm 10.30.1, no API keys, no Android device. Verified: pnpm install --frozen-lockfile, pnpm check (55 offline tests pass, lint, typecheck, prettier, production build), pnpm start serving the studio page with 'Run task'. Not verified: any live Mobilerun device operation, any TypeSafe model call, pnpm demo.\",\n  \"steps\": [\n    \"git init; git remote add origin https://github.com/droidrun/mobile-jev; git fetch --depth 1 origin 395fc222beac4f059f9a0beb337d114a2b066e99; git reset --mixed FETCH_HEAD\",\n    \"Installed Node 24.22.1 (linux-x64 tarball from nodejs.org, sha256 verified against SHASUMS256.txt) into /tmp/node24\",\n    \"corepack enable (with /tmp/node24/bin on PATH); pnpm 10.30.1 from packageManager field\",\n    \"pnpm install --frozen-lockfile\",\n    \"cp .env.example .env.local (no keys filled in)\",\n    \"pnpm check (runs pnpm test, lint, typecheck, format, build) -> exit 0\",\n    \"pnpm test -> 55 pass, 0 fail\",\n    \"pnpm start -> studio on http://127.0.0.1:3040 returns the 'Run task' page (HTTP 200)\",\n    \"pnpm agent devices -> fails with 'A valid API key is required.' (no MOBILERUN_API_KEY): documented credential-error check\",\n    \"Stopped the studio server after probing; port 3040 confirmed free\"\n  ],\n  \"deviations\": [\n    \"README does not give a Node installer; installed Node 24 from the official nodejs.org tarball because the guest had no node.\",\n    \"First corepack call outside the project fetched pnpm 12.15.0; re-ran inside the project so pnpm 10.30.1 from packageManager was used. A 'corepack use' attempt that touched package.json was reverted with git checkout; git status clean.\",\n    \"Live README commands (pnpm devices, pnpm doctor, pnpm agent run/observe/screenshot/profile, pnpm demo dark-theme --reset) were not run: they need MOBILERUN_API_KEY, TYPESAFE_API_KEY and a ready Mobilerun device, none supplied. Recorded as blocked examples.\",\n    \"The checker writes .coldpass/observed.json; Prettier (run by pnpm check, format step) then flags it, which made pnpm check fail during replay. Removed the stale checker-generated file before the final validation run. Also ran prettier --write on this run's .coldpass/*.json files so they pass the repo format check.\",\n    \"First claim used 'pnpm test' as the operation; the checker rejected it as a unit suite, so the claim was changed to the studio HTTP endpoint.\"\n  ],\n  \"stuck_step\": \"pnpm devices / live agent and demo commands: need MOBILERUN_API_KEY, TYPESAFE_API_KEY and an Android device\",\n  \"main_blocker\": \"No Mobilerun or TypeSafe API keys and no ready Android device are available in this disposable guest.\",\n  \"plain_failure\": \"The app builds, passes its offline tests, and its web studio starts and loads. It cannot control a phone or run a task, because that needs a Mobilerun account key, a TypeSafe key, and a connected Android device, which this test machine does not have.\",\n  \"suggested_fix\": \"Re-run with MOBILERUN_API_KEY, TYPESAFE_API_KEY and MOBILERUN_DEVICE_ID set in .env.local (or exported): pnpm doctor, then pnpm agent run with --execute and pnpm demo dark-theme --reset. Separately, the repo's format check should exclude generated checker output (or the harness should write observed.json outside the repo) so pnpm check does not fail on it.\"\n}\nEOF\ncd <guest-path> && export PATH=/tmp/node24/bin:$PATH && node_modules/.bin/prettier --write .coldpass/report.json >/dev/null && python3 -I -m json.tool .coldpass/report.json >/dev/null && echo report-ok && rm -f .coldpass/observed.json && <env-var>=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > /tmp/validate2.json 2>&1; echo rc=$?; head -c 300 /tmp/validate2.json; echo; grep -o '\"valid\": [a-z]*' /tmp/validate2.json; grep -o '\"problems\": \\[[^]]*\\]' /tmp/validate2.json | head -c 300; echo; ss -ltnp | grep -c ':3040 '; git status --short | head"
  ],
  "stuck_step": "pnpm devices / live agent and demo commands: need MOBILERUN_API_KEY, TYPESAFE_API_KEY and an Android device",
  "error_excerpt": "No Mobilerun or TypeSafe API keys and no ready Android device are available in this disposable guest.",
  "what_it_did": "Install and build the Mobile Jev studio from the README, verify the offline test/lint/typecheck/format/build suite, and start the local studio UI (pnpm start, http://127.0.0.1:3040). The headline operation (driving a real Android phone through Mobilerun and TypeSafe) was not exercised.",
  "suggested_fix": "Re-run with MOBILERUN_API_KEY, TYPESAFE_API_KEY and MOBILERUN_DEVICE_ID set in .env.local (or exported): pnpm doctor, then pnpm agent run with --execute and pnpm demo dark-theme --reset. Separately, the repo's format check should exclude generated checker output (or the harness should write observed.json outside the repo) so pnpm check does not fail on it.",
  "tokens_in": 626269,
  "tokens_out": 19159,
  "cost_usd": 0.023775949999999997,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": false,
        "argv": [
          "pnpm",
          "start"
        ],
        "kind": "http",
        "status": 200,
        "bytes": 17877,
        "url": "http://127.0.0.1:3040/",
        "response_checked": true,
        "response_excerpt": "Run task<span class=\"shortcut\">\u2318 \u21b5</span></button></div></div><div class=\"suggestions\"><span>A place to start</span><div><button><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-smartphone\" aria-hidden=\"true\"><rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\"></rect><path d=\"M12 18h.01\"></path></svg>Find Android version<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strok",
        "scope": "product operation"
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 29 known vulnerability.",
    "findings": [
      {
        "kind": "known-vulnerability",
        "count": 29,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 5
      }
    ],
    "context": [],
    "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=droidrun--mobile-jev-claude-haiku-5-5-1792789649570607108",
    "evidence_file": "/data/safety/droidrun--mobile-jev-claude-haiku-5-5-1792789649570607108.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": 27,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "395fc222beac4f059f9a0beb337d114a2b066e99",
    "url": "https://github.com/droidrun/mobile-jev"
  },
  "purpose": "initial",
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "fault": {
    "owner": "prerequisite",
    "status": "diagnosed",
    "reason": "No Mobilerun or TypeSafe API keys and no ready Android device are available in this disposable guest."
  },
  "fix_id": null,
  "verifies_run_id": null,
  "hosting": null,
  "operation_scope": "product operation",
  "tool_calls": 27,
  "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": "none",
  "needs": [],
  "needs_which": null,
  "agent_interface": [
    "api"
  ],
  "license": "MIT",
  "repo_url": "https://github.com/droidrun/mobile-jev",
  "cost_to_try": null,
  "hardware": null,
  "what_failed": "No Mobilerun or TypeSafe API keys and no ready Android device are available in this disposable guest.",
  "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: scripts/run.mjs, scripts/mobile-agent/cli.mjs, scripts/demo.mjs, apps/jev-studio/app/api/studio/[...path]/route.ts. The only timers are a UI clock (use-studio.ts setInterval) and an SSE heartbeat (route.ts setInterval). No cron, scheduler, --once/--now, or webhook. The agent loop runs only when a user invokes pnpm agent run --execute, and it needs live credentials.",
      "evidence": "Entry points inspected: scripts/run.mjs, scripts/mobile-agent/cli.mjs, scripts/demo.mjs, apps/jev-studio/app/api/studio/[...path]/route.ts. The only timers are a UI clock (use-studio.ts setInterval) and an SSE heartbeat (route.ts setInterval). No cron, scheduler, --once/--now, or webhook. The agent loop runs only when a user invokes pnpm agent run --execute, and it needs live credentials.",
      "command": ""
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "Open the <email>:3040 and it shows a Run task control",
      "source": "Open **http://127.0.0.1:3040**. Enter a goal and press **Run task**.",
      "input": "GET http://127.0.0.1:3040/ after pnpm start",
      "expected": "studio page with Run task control",
      "command": "pnpm start",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: Run task",
      "evidence": "Run task<span class=\"shortcut\">\u2318 \u21b5</span></button></div></div><div class=\"suggestions\"><span>A place to start</span><div><button><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-smartphone\" aria-hidden=\"true\"><rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\"></rect><path d=\"M12 18h.01\"></path></svg>Find Android version<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strok",
      "source_checked": true,
      "source_file": "README.md"
    },
    {
      "kind": "claim",
      "claim": "pnpm check runs tests, lint, typecheck, formatting and production build",
      "source": "tests, lint, typecheck, formatting, production build",
      "input": "pnpm check",
      "expected": "formatting check and Next.js production build succeed",
      "command": "pnpm check",
      "verdict": "blocked",
      "outcome": "Probe stopped at a missing prerequisite: coldpass/workspace\n> eslint .\n\n\n> mobile-jev@0.1.0 typecheck <guest-path>\n> pnpm --filter @jev-mobile/studio typecheck\n\n\n> @jev-mobile/studio@0.1.0 typecheck <guest-path>\n> next typegen && tsc --noEmit\n\nGenerating route types...\n\u2713 Types generated successfully\n\n> mobile-jev@0.1.0 format <guest-path>\n> prettier . --check\n\nChecking formatting...\n\u2009ELIFECYCLE\u2009 Command failed with exit code 1.\n\u2009ELIFECYCLE\u2009 Command failed with exit code 1.\n[warn] .coldpass/observed.json\n[warn] Code style issues found in the above file. Run Prettier with --write to fix.",
      "evidence": "coldpass/workspace\n> eslint .\n\n\n> mobile-jev@0.1.0 typecheck <guest-path>\n> pnpm --filter @jev-mobile/studio typecheck\n\n\n> @jev-mobile/studio@0.1.0 typecheck <guest-path>\n> next typegen && tsc --noEmit\n\nGenerating route types...\n\u2713 Types generated successfully\n\n> mobile-jev@0.1.0 format <guest-path>\n> prettier . --check\n\nChecking formatting...\n\u2009ELIFECYCLE\u2009 Command failed with exit code 1.\n\u2009ELIFECYCLE\u2009 Command failed with exit code 1.\n[warn] .coldpass/observed.json\n[warn] Code style issues found in the above file. Run Prettier with --write to fix.",
      "returncode": 1,
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "Development: run the offline test suite",
      "source": "README.md Development (pnpm check)",
      "input": "pnpm test",
      "command": "pnpm test",
      "evidence": "n wait (1.14292ms)\n\u2714 transitional snapshots without a foreground app are polled before another model call (60.873548ms)\n\u2714 execution is logged before a failing post-action observation (1.061345ms)\n\u2714 stale decisions re-observe and re-predict; uncertain mutations never retry (1.388905ms)\n\u2714 model transport reuses connections, preserves JSON, measures timing, and never retries failures (59.472379ms)\n\u2714 metrics aggregate by endpoint, include failures, and exclude payloads and credentials (0.943217ms)\n\u2139 tests 55\n\u2139 suites 0\n\u2139 pass 55\n\u2139 fail 0\n\u2139 cancelled 0\n\u2139 skipped 0\n\u2139 todo 0\n\u2139 duration_ms 3474.548684",
      "deferred": false,
      "expected": "55 tests pass, 0 fail",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "Run it: list devices before setting MOBILERUN_DEVICE_ID",
      "source": "README.md Run it (pnpm devices)",
      "input": "",
      "command": "",
      "evidence": "Requires MOBILERUN_API_KEY and a ready Mobilerun Android device; neither is available in this guest. Ran instead: pnpm agent devices, which failed with 'A valid API key is required.' (exit 1).",
      "deferred": false,
      "expected": "documented command completes successfully",
      "verdict": "blocked",
      "outcome": "Requires MOBILERUN_API_KEY and a ready Mobilerun Android device; neither is available in this guest. Ran instead: pnpm agent devices, which failed with 'A valid API key is required.' (exit 1)."
    },
    {
      "kind": "example",
      "claim": "Preview the next agent decision for a goal",
      "source": "README.md Use the CLI (pnpm agent run)",
      "input": "",
      "command": "",
      "evidence": "Requires MOBILERUN_API_KEY, TYPESAFE_API_KEY and a ready device; no credentials are available in this guest, so no live model or device request was made.",
      "deferred": false,
      "expected": "documented command completes successfully",
      "verdict": "blocked",
      "outcome": "Requires MOBILERUN_API_KEY, TYPESAFE_API_KEY and a ready device; no credentials are available in this guest, so no live model or device request was made."
    },
    {
      "kind": "example",
      "claim": "Run the dark-theme demo",
      "source": "README.md Included demo (pnpm demo dark-theme --reset)",
      "input": "",
      "command": "",
      "evidence": "Requires live Mobilerun and TypeSafe credentials plus an Android device; not run. Deferred on purpose.",
      "deferred": false,
      "expected": "documented command completes successfully",
      "verdict": "blocked",
      "outcome": "Requires live Mobilerun and TypeSafe credentials plus an Android device; not run. Deferred on purpose."
    }
  ],
  "does_what_it_says": "partly",
  "maintenance": {
    "last_commit_at": "2026-09-17T12:51:55Z",
    "commits_90d": 1,
    "merged_prs_90d": 3,
    "open_issues": 4,
    "open_prs": 2,
    "reply_share": 0.0,
    "reply_threads": 10,
    "median_reply_hours": null,
    "last_release_at": null,
    "archived": false,
    "verdict": "slow",
    "note": "slow: last commit 36 days ago; 1 commits and 3 merged PRs in 90 days; 4 open issues, 2 open PRs; 0 of 10 recent threads got a maintainer reply; no releases"
  },
  "maintenance_verdict": "slow",
  "maintenance_note": "slow: last commit 36 days ago; 1 commits and 3 merged PRs in 90 days; 4 open issues, 2 open PRs; 0 of 10 recent threads got a maintainer reply; no releases",
  "maintained": "active",
  "maintained_note": "last commit 36 days ago; 4 open issues, 0 answered or closed",
  "last_commit_at": "2026-09-17T12:55:20Z",
  "last_release_at": null,
  "open_issues": 4,
  "answered_issues": 0,
  "platforms_claimed": [
    "linux",
    "mac"
  ],
  "topic": "other",
  "agent_interfaces": [
    {
      "interface": "cli",
      "evidence": "README metadata",
      "observed": false,
      "operation_checked": false
    },
    {
      "interface": "api",
      "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": null,
  "tested_at": "2026-10-23T21:13:45.344723+00:00",
  "tested_commit": "395fc222beac4f059f9a0beb337d114a2b066e99",
  "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": "droidrun/mobile-jev",
    "source": "https://github.com/droidrun/mobile-jev",
    "commit": "395fc222beac4f059f9a0beb337d114a2b066e99",
    "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": "395fc222beac4f059f9a0beb337d114a2b066e99",
      "url": "https://github.com/droidrun/mobile-jev"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": null,
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Install and build the Mobile Jev studio from the README, verify the offline test/lint/typecheck/format/build suite, and start the local studio UI (pnpm start, http://127.0.0.1:3040). The headline operation (driving a real Android phone through Mobilerun and TypeSafe) was not exercised.",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "repo",
    "test_version": "readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9",
    "evidence_version": null
  },
  "other_model": null,
  "other_run_id": null,
  "models_agree": null,
  "furthest_model": null,
  "transcript_url": null,
  "report_url": "/reports/droidrun--mobile-jev-claude-haiku-5-5-1792789649570607108.json"
}
