{
  "tokens_out": 3646,
  "outcome": "needs_credentials",
  "suggested_fix": "Provide a Bowmark API key via BOWMARK_API_KEY in the guest, then rerun: /tmp/bw-venv/bin/python -c \"import asyncio; from bowmark_web import bowmark; print(asyncio.run(bowmark.music.search('aphex twin')))\"",
  "cycle_checks": null,
  "fault": {
    "owner": "prerequisite",
    "status": "diagnosed",
    "reason": "No BOWMARK_API_KEY available in the guest.",
    "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": "/srv/factory/agent-sandbox-state/evidence/native/sandbox-811aa5c8401b42e9aab689b481c94280",
  "agent_runtime": "claude-code",
  "maintenance_note": null,
  "runtime_version": null,
  "does_what_it_says": null,
  "commit": "69f798c2c68fc0e876ca5a4ba30d96983c502f0b",
  "failure_origin": null,
  "stuck_step": "Exercising a live Bowmark capability call (python/README.md 'Two shapes' example)",
  "repo_url": null,
  "needs": null,
  "checks": [
    {
      "status": "PASS",
      "details": {
        "working": false,
        "argv": [
          "/tmp/bw-venv/bin/python",
          "-c",
          "import bowmark_web; print('bowmark_web import ok')"
        ],
        "kind": "cli",
        "returncode": 0,
        "stdout": "bowmark_web import ok",
        "stderr": "",
        "needs_credentials": false,
        "needs_browser": false,
        "scope": "partial: install"
      },
      "check": "install",
      "optional": false
    },
    {
      "status": "PASS",
      "details": {
        "working": false,
        "argv": [
          "/tmp/bw-venv/bin/python",
          "-c",
          "import asyncio\nfrom bowmark_web import bowmark\nasync def m():\n    await bowmark.music.search('aphex twin')\nasyncio.run(m())"
        ],
        "kind": "cli",
        "returncode": 1,
        "stdout": "",
        "stderr": "Traceback (most recent call last):\n  File \"<string>\", line 5, in <module>\n  File \"/usr/lib/python3.12/asyncio/runners.py\", line 194, in run\n    return runner.run(main)\n           ^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/asyncio/runners.py\", line 118, in run\n    return self._loop.run_until_complete(task)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.12/asyncio/base_events.py\", line 687, in run_until_complete\n    return future.result()\n           ^^^^^^^^^^^^^^^\n  File \"<string>\", line 4, in m\n[excerpt truncated]",
        "needs_credentials": true,
        "needs_browser": false,
        "blocker": "product did not produce a clear credential error: {\"returncode\": 1, \"stdout\": \"\", \"stderr\": \"Traceback (most recent call last):\\n  File \\\"<string>\\\", line 5, in <module>\\n  File \\\"/usr/lib/python3.12/asyncio/runners.py\\\", line 194, in run\\n    return runner.run(main)\\n           ^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/asyncio/runners.py\\\", line 118, in run\\n    return self._loop.run_until_complete(task)\\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/asyncio/base_events.py\\\", line 687, in run_until_complete\\n    return future.result()\\n           ^^^^^^^^^^^^^^^\\n  File \\\"<string>\\\", line 4, in m\\n  File \\\"/tmp/bw-venv/lib/python3.12/site-packages/bowmark_web/__init__.py\\\", line 211, in dispatch\\n    return await send(path, args)\\n           ^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/tmp/bw-venv/lib/python3.12/site-packages/bowmark_web/__init__.py\\\", line 351, in send\\n    opened = await open_session(resolved)\\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/tmp/bw-venv/lib/python3.12/site-packages/bowmark_web/_transport.py\\\", line 224, in open_session\\n    status, payload = await post_json(client, \\\"/v1/session\\\", {})\\n                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/tmp/bw-venv/lib/python3.12/site-packages/bowmark_web/_transport.py\\\", line 213, in post_json\\n    return await asyncio.to_thread(_post_json_blocking, client, path, body)\\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/asyncio/threads.py\\\", line 25, in to_thread\\n    return await loop.run_in_executor(None, func_call)\\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/usr/lib/python3.12/concurrent/futures/thread.py\\\", line 58, in run\\n    result = self.fn(*self.args, **self.kwargs)\\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\\"/tmp/bw-venv/lib/python3.12/site-packages/bowmark_web/_transport.py\\\", line 176, in _post_json_blocking\\n    raise BowmarkError(NO_API_KEY_MESSAGE, code=\\\"no_api_key\\\")\\nbowmark_web._transport.BowmarkError: Bowmark needs an API key, and this client has none, so nothing was sent.\\n1. Sign up at https://bowmark.ai/sign-up (free).\\n2. Create an API key at https://bowmark.ai/dashboard/keys.\\n3. Pass it as `client(api_key=\\\"<key>\\\")`, or set the `BOWMARK_API_KEY` environment variable.\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
        "scope": "partial: missing credentials"
      },
      "check": "credentials_error",
      "optional": false
    }
  ],
  "open_issues": null,
  "agent_runtime_version": "2.1.300 (Claude Code)",
  "verifies_run_id": null,
  "total_s": 621.7173979282379,
  "license": null,
  "tool_calls": 8,
  "model_version": "claude-haiku-5-5",
  "example_checks": [],
  "mcp": null,
  "other_model": null,
  "first_use_s": null,
  "native_tool_calls": 8,
  "last_commit_at": null,
  "source": "https://github.com/bowmark-ai/web",
  "models_agree": null,
  "maintenance_verdict": null,
  "cost_usd": 0.00667557,
  "safety": null,
  "answered_issues": null,
  "what_failed": null,
  "steps": [
    "Read /workspace root (no README), node/README.md, python/README.md, .github/workflows/publish.yml",
    "apt-get install python3-venv (needed for venv)",
    "python3 -m venv /tmp/bw-venv",
    "/tmp/bw-venv/bin/pip install ./ ../python-stubs (from /workspace/python)",
    "Ran documented bowmark.music.search call without key -> no_api_key"
  ],
  "platform_conflicts": null,
  "claims_note": null,
  "maintained_note": null,
  "repo": "bowmark-ai/web",
  "service_tier": null,
  "maintained": null,
  "source_pin": null,
  "operation_scope": "partial checks",
  "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:10:49.931988+00:00",
  "kind": "repo",
  "resources": {
    "cpus": 2,
    "disk_mib": 32768,
    "memory_mib": 4096
  },
  "error_excerpt": "No BOWMARK_API_KEY available in the guest.",
  "pass": null,
  "evidence_version": null,
  "source_revision": null,
  "run_id": "bowmark-ai--web-claude-haiku-5-5-1792342828214584218",
  "last_release_at": null,
  "furthest_model": null,
  "model": "claude-haiku-5-5",
  "what_it_did": "Installed the Python client (python/README.md 'pip install bowmark-web bowmark-web-stubs') and confirmed the documented no-key path: bowmark.music.search raises BowmarkError code=no_api_key without sending a request.",
  "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": 14.714,
  "fix_id": "fix-406e95e80a9183eb05d0",
  "tokens_in": 123733,
  "tested_at": null,
  "test_version": "readme-e8f276743e13e2c45e947267e722fb5007f8ab05a3813d972332c57d739c7360",
  "recovery": {
    "source": "legacy-oct16-18",
    "original_run_id": "bowmark-ai--web-claude-haiku-5-5-1792342828214584218",
    "historical": true,
    "ledger_sha256": "c5e6a833c182c1e2aecf69d0bd0020aec63c65d98f3e933e4b32232340312736"
  },
  "transcript_url": "/transcripts/bowmark-ai--web-claude-haiku-5-5-1792342828214584218.txt",
  "report_url": "/reports/bowmark-ai--web-claude-haiku-5-5-1792342828214584218.json"
}
