{
  "checker": {
    "details": {
      "checks": [
        {
          "check": "install",
          "details": {
            "argv": [
              "/tmp/bmvenv/bin/pip",
              "show",
              "bowmark-web",
              "bowmark-web-stubs"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "scope": "partial: install",
            "stderr": "",
            "stdout": "Name: bowmark-web\nVersion: 1.25.8\nSummary: The Python client for the Bowmark capability library \u2014 the whole bowmark.* surface, with no Bowmark source on your disk. ZERO runtime dependencies, deliberately and permanently.\nHome-page: \nAuthor: \nAuthor-email: Bowmark AI <<email>>\nLicense: MIT\nLocation: /tmp/bmvenv/lib/python3.12/site-packages\nRequires: \nRequired-by: \n---\nName: bowmark-web-stubs\n[excerpt truncated]",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        },
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "/tmp/bmvenv/bin/python",
              "-c",
              "import asyncio\nfrom bowmark_web import bowmark, BowmarkError\nasync def main():\n    try:\n        await bowmark.music.search('aphex twin')\n    except BowmarkError as e:\n        print('code=', e.code)\nasyncio.run(main())"
            ],
            "blocker": "product did not produce a clear credential error: {\"returncode\": 0, \"stdout\": \"code= no_api_key\\n\", \"stderr\": \"\", \"needs_credentials\": false, \"needs_browser\": false}",
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "stderr": "",
            "stdout": "code= no_api_key",
            "working": false
          },
          "optional": false,
          "status": "FAIL"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "status": "FAIL"
  },
  "deviations": [
    "README 'Requirements' says `pip install ...`, but pip is absent in the guest; installed python3-pip and python3-venv via apt and used a venv at /tmp/bmvenv instead of system pip.",
    "Did not run `python3 -m unittest discover -s tests -t .` (Development section): full unit suite is excluded by the task."
  ],
  "main_blocker": "No BOWMARK_API_KEY available in the guest. Prerequisite (credentials), not a repo defect.",
  "operation": "Install bowmark-web and bowmark-web-stubs per python/README.md ('Requirements' pip install); verify the documented no-key path raises BowmarkError code=no_api_key before any request is sent.",
  "operation_scope": "Live Bowmark capability calls (python/README.md 'Two shapes' example: bowmark.music.search / session()) are NOT exercised: they require BOWMARK_API_KEY (bmk_...), which is not available in the guest. Obtaining a key is out of scope for this task. Browser is not required for the Python client path.",
  "outcome": "blocked",
  "steps": [
    "python3 --version -> 3.12.3 (meets >=3.11)",
    "apt-get install python3-pip python3-venv (pip was missing in guest)",
    "python3 -m venv /tmp/bmvenv",
    "/tmp/bmvenv/bin/pip install bowmark-web bowmark-web-stubs -> bowmark-web 1.25.8, bowmark-web-stubs 1.25.8",
    "env -u BOWMARK_API_KEY python -c 'bowmark.music.search(...)' -> code=no_api_key (documented behaviour)"
  ],
  "stuck_step": "Exercising a live Bowmark capability call (python/README.md 'Two shapes' example)",
  "suggested_fix": "Provide a Bowmark API key (bmk_...) to the guest as BOWMARK_API_KEY, then run: /tmp/bmvenv/bin/python -c \"import asyncio; from bowmark_web import bowmark; print(asyncio.run(bowmark.music.search('aphex twin')))\" (or the session() example in python/README.md)."
}
