{
  "checker": {
    "details": {
      "checks": [
        {
          "check": "install",
          "details": {
            "argv": [
              "<host-path>",
              "--version"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "scope": "partial: install",
            "stderr": "",
            "stdout": "sashiko 0.6.1",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        },
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "<host-path>",
              "review"
            ],
            "blocker": "product did not produce a clear credential error: {\"returncode\": 3, \"stdout\": \"\\nError: patch 1: Permission denied (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\\n\\nCaused by:\\n    0: Permission denied (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n         \\\"error\\\": {\\n           \\\"code\\\": 403,\\n           \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n           \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n         }\\n       }\\n       \\n    1: Permission denied (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n         \\\"error\\\": {\\n           \\\"code\\\": 403,\\n           \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n           \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n         }\\n       }\\n       \\n\", \"stderr\": \"Reviewing: HEAD\\nUsing prompts: <host-path>\\nRunning review for 1 patch\\n      [Patch 1] mm: change add | Queued\\n      [Patch 1] mm: change add | Pre-screening guides...\\n2026-10-18T03:07:47.649333Z ERROR sashiko::ai::gemini: Gemini Permission Denied (403) (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\\n2026-10-18T03:07:47.649578Z ERROR sashiko::local_review: AI review for patch 1 failed with exception: Permission denied (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\\n2026-10-18T03:07:47.726371Z ERROR sashiko::ai::gemini: Gemini Permission Denied (403) (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\\n2026-10-18T03:07:47.726505Z ERROR sashiko::local_review: AI review for patch 1 failed with exception: Permission denied (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\\n2026-10-18T03:07:47.805048Z ERROR sashiko::ai::gemini: Gemini Permission Denied (403) (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\\n2026-10-18T03:07:47.805187Z ERROR sashiko::local_review: AI review for patch 1 failed with exception: Permission denied (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\\n      [Patch 1] mm: change add | Incomplete\\nReview incomplete\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 3,
            "stderr": "Reviewing: HEAD\nUsing prompts: <host-path>\nRunning review for 1 patch\n      [Patch 1] mm: change add | Queued\n      [Patch 1] mm: change add | Pre-screening guides...\n2026-10-18T03:07:47.649333Z ERROR sashiko::ai::gemini: Gemini Permission Denied (403) (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\n  \"error\": {\n    \"code\": 403,\n    \"message\": \"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\",\n    \"status\": \"PERMISSION_DENIED\"\n  }\n}\n[excerpt truncated]",
            "stdout": "\nError: patch 1: Permission denied (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\n  \"error\": {\n    \"code\": 403,\n    \"message\": \"Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.\",\n    \"status\": \"PERMISSION_DENIED\"\n  }\n}\n\n\nCaused by:\n    0: Permission denied (reason: Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.): {\n[excerpt truncated]",
            "working": false
          },
          "optional": false,
          "status": "FAIL"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "status": "FAIL"
  },
  "deviations": [
    "`cargo install sashiko` (README Quick Start 1) not run: it would install the crates.io release, not the pinned commit. Ran `cargo build` in <host-path> instead.",
    "Guest had no Rust: installed build-essential, pkg-config, libssl-dev, git, curl via apt; installed rustup with 1.90.0 toolchain (curl|sh rustup installer, as required for the toolchain).",
    "`cargo build --release --all-features` (Makefile `build`) and `cargo build -j 1` both failed with rustc SIGKILL. Kernel log confirmed global OOM kill; guest has ~470MB RAM. Fix: added a 6G /swapfile (swapon) in the disposable guest, then `cargo build -j 1` (dev profile) succeeded in ~9m38s. Release build was not retried after adding swap.",
    "Workspace is not a git repository, so `sashiko review` on the workspace is impossible; used a scratch repo /tmp/kscratch (outside the product tree). No product source files were changed.",
    "`sashiko review --no-ai` is partial evidence only (no AI review); the full review was blocked by missing LLM credentials."
  ],
  "main_blocker": "No LLM API key in the VM. Gemini (default provider) returned 403 PERMISSION_DENIED for unauthenticated calls.",
  "operation": "Built sashiko from the pinned checkout (target/debug/sashiko) and ran `sashiko review` (README 'Quick Start > 3. Review Your Patches') on a scratch git repo with one commit at /tmp/kscratch. The full review reached the LLM provider (gemini, default) and was rejected with exit 3.",
  "operation_scope": "Verified: build, `sashiko --version`, `sashiko init`, `sashiko review --no-ai` (patch extraction/application only, no AI). Not verified: AI review. Unmet prerequisite: LLM_API_KEY (or a configured provider credential) is not set in the VM; the Gemini API returned 403 PERMISSION_DENIED 'Method doesn't allow unregistered callers'. Browser not needed.",
  "outcome": "blocked",
  "steps": [
    "README 'Quick Start > 1. Install': README says `cargo install sashiko` (crates.io). Not used; instead installed Rust toolchain 1.90.0 via rustup (rust-toolchain.toml pins 1.90.0) and ran `cargo build` in the pinned checkout so the evaluated source is what ran. Also `cargo build --release --all-features` (Makefile build target) was attempted and failed (see deviations).",
    "README 'Quick Start > 2. Configure': `sashiko init` -> wrote ~/.config/sashiko.toml (provider=gemini). `export LLM_API_KEY` not done: no credentials available.",
    "README 'Quick Start > 3. Review Your Patches': `sashiko review --no-ai` in /tmp/kscratch -> 'Review complete', exit 0 (patch extraction only).",
    "README 'Quick Start > 3. Review Your Patches': `sashiko review` in /tmp/kscratch with LLM_API_KEY unset -> exit 3, Gemini PERMISSION_DENIED 403."
  ],
  "stuck_step": "README Quick Start 3: `sashiko review` (AI review) needs an LLM provider credential.",
  "suggested_fix": "Export a valid provider key (e.g. `export LLM_API_KEY=...` for gemini, or configure another provider per docs/llm-providers.md) in the VM, then rerun `<host-path> review` in a git checkout. For a faster build on low-memory guests, use >=4GB RAM or add swap, and `cargo build -j 1`."
}
