coldpass

sashiko-dev/sashiko

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Didn’t work

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/sashiko-dev--sashiko.svg).

Didn’t work

Only older checks are saved; no current product test.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxno

Linux / Haiku 5.5: no · Oct 17, 2026 · 27815bffd745 · claude-code / 2.1.300 (Claude Code)
Recorded operation: limited checks

Issue
yes, not fixed yet
Our test was blocked; no repo verdict.

Safety: no observations were recorded for the selected revision. Functional results do not establish a safety result.

Repair history and test corrections
Current diagnosis: unknown · prerequisite

No LLM API key in the VM. Gemini (default provider) returned 403 PERMISSION_DENIED for unauthenticated calls.

Recorded action: Wait for the documented external prerequisite; keep partial grades.

Repair record fix-c122e89f51a6d1541c2e · current status JSON. Original run outcomes remain unchanged.

Failed run: sashiko-dev/sashiko · Oct 17, 2026 · Recorded operation failed.

Repair development: sashiko-dev/sashiko · Oct 18, 2026 · Repair work (development) · not an initial-trial result.

Run details

Haiku 5.5

Native agent · Recorded operation failed

Operation / attempted scope limited checks

Agent-reported scope: 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.

Run details
run
sashiko-dev--sashiko-claude-haiku-5-5-1792291237541393630
date
Oct 17, 2026
time to working
not recorded
product hosting / execution
Not recorded
recorded operation scope
limited checks
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.014458
Recorded source
https://github.com/sashiko-dev/sashiko
Tool transport
mcp-assigned-vm
Test version
readme-6bd225b7dceaabc00d2c31e87e787795491e8d7d19bfab58de846adc71c82afb
revision
27815bffd745c1e30e91bdd9d4f197ec7620d204
Current diagnosis: unknown · prerequisite

No LLM API key in the VM. Gemini (default provider) returned 403 PERMISSION_DENIED for unauthenticated calls.

Recorded action: Wait for the documented external prerequisite; keep partial grades.

Repair record fix-c122e89f51a6d1541c2e · current status JSON. Original run outcomes remain unchanged.

Failed run: sashiko-dev/sashiko · Oct 17, 2026 · Recorded operation failed.

Repair development: sashiko-dev/sashiko · Oct 18, 2026 · Repair work (development) · not an initial-trial result.

Fix: fix-c122e89f51a6d1541c2e.

Recorded blocker / warning

Step: README Quick Start 3: `sashiko review` (AI review) needs an LLM provider credential.

No LLM API key in the VM. Gemini (default provider) returned 403 PERMISSION_DENIED for unauthenticated calls.

Install / setup / connection checks
[
  {
    "status": "PASS",
    "details": {
      "working": false,
      "argv": [
        "<host-path>",
        "--version"
      ],
      "kind": "cli",
      "returncode": 0,
      "stdout": "sashiko 0.6.1",
      "stderr": "",
      "needs_credentials": false,
      "needs_browser": false,
      "scope": "partial: install"
    },
    "check": "install",
    "optional": false
  },
  {
    "status": "FAIL",
    "details": {
      "working": false,
      "argv": [
        "<host-path>",
        "review"
      ],
      "kind": "cli",
      "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[excerpt truncated]",
      "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]",
      "needs_credentials": false,
      "needs_browser": false,
      "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}"
    },
    "check": "credentials_error",
    "optional": false
  }
]

Suggested next step (agent-reported): 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`.

What the agent did

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.

cd <host-path> && ls -la && cat README* 2>/dev/null | head -300
ls -la <host-path> 2>/dev/null; echo "CDP_URL=$CDP_URL <env-var>=$<env-var>"; which python3 uv pip pipx cargo go node 2>&1; python3 --version
cd <host-path> && cat rust-toolchain.toml; which cargo rustc rustup; grep -n "^[a-z-]*:" Makefile | head -40; grep -n "validate\|kind\|argv" <host-path> | head -80
cd <host-path> && sed -n 1,60p Makefile; ls ~/.cargo/bin 2>/dev/null; sudo -n true && echo SUDO_OK
sudo apt-get update -qq && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq build-essential pkg-config libssl-dev git curl ca-certificates >/tmp/apt.log 2>&1; echo apt=$?; curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.90.0 >/tmp/rustup.log 2>&1; echo rustup=$?; tail -3 /tmp/rustup.log
cd <host-path> && source ~/.cargo/env && cargo --version && (timeout 3000 cargo build --release --all-features > /tmp/build.log 2>&1; echo build_exit=$? >> /tmp/build.log) ; tail -5 /tmp/build.log
free -m; nproc; dmesg 2>/dev/null | tail -3; cd <host-path> && source ~/.cargo/env && (timeout 3000 cargo build --release --all-features -j 1 > /tmp/build.log 2>&1; echo build_exit=$? >> /tmp/build.log); tail -4 /tmp/build.log | cut -c1-400
cd <host-path> && source ~/.cargo/env && (timeout 3000 cargo build -j 1 > /tmp/build.log 2>&1; echo build_exit=$? >> /tmp/build.log); tail -4 /tmp/build.log | cut -c1-300; ls -la target/debug/sashiko 2>/dev/null
cd <host-path> && grep -v "^\s*$" /tmp/build.log | grep -i "error\|killed\|signal\|warning: unused" | head -20 | cut -c1-300; grep -c . /tmp/build.log
cd <host-path> && grep -o "signal: [0-9]*[^)]*)" /tmp/build.log | head; sed -n 1,20p /tmp/build.log | cut -c1-200; ulimit -a | head -20; cat /sys/fs/cgroup/memory.max 2>/dev/null; cat /sys/fs/cgroup/memory.events 2>/dev/null
cd <host-path> && source ~/.cargo/env && (cargo build -j 1 > /tmp/build2.log 2>&1; echo build_exit=$? >> /tmp/build2.log) & for i in $(seq 1 40); do sleep 15; echo "$(date +%T) $(free -m | awk 'NR==2{print $3"MB used"}') $(ps -eo rss,comm --sort=-rss | sed -n 2p)"; if grep -q build_exit /tmp/build2.log 2>/dev/null; then break; fi; done 2>&1 | tail -30
cd <host-path> && source ~/.cargo/env && setsid nohup bash -c 'cargo build -j 1 > /tmp/build2.log 2>&1; echo build_exit=$? >> /tmp/build2.log' >/dev/null 2>&1 & sleep 5; for i in $(seq 1 16); do sleep 20; echo "$(date +%T) used=$(free -m | awk 'NR==2{print $3}')MB $(ps -eo rss,args --sort=-rss | sed -n 2p | cut -c1-80)"; grep -q build_exit /tmp/build2.log && break; done; tail -2 /tmp/build2.log | cut -c1-200
cd /tmp && source ~/.cargo/env && echo 'fn main(){println!("hi");}' > /tmp/h.rs && rustc -o /tmp/h /tmp/h.rs && /tmp/h; cat /proc/self/cgroup; ls /sys/fs/cgroup | head -30; cat /proc/meminfo | head -3; sudo dmesg 2>/dev/null | grep -i -E "kill|oom" | tail -5
sudo fallocate -l 6G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile >/dev/null && sudo swapon /swapfile && free -m && cd <host-path> && source ~/.cargo/env && setsid nohup bash -c 'cargo build -j 1 > /tmp/build3.log 2>&1; echo build_exit=$? >> /tmp/build3.log' >/dev/null 2>&1 & sleep 3; echo started
for i in $(seq 1 14); do sleep 20; grep -q build_exit /tmp/build3.log && break; done; echo "$(date +%T) swap=$(free -m | awk 'NR==3{print $3}')MB"; tail -3 /tmp/build3.log | cut -c1-250
for i in $(seq 1 14); do sleep 20; grep -q build_exit /tmp/build3.log && break; done; echo "$(date +%T) swap=$(free -m | awk 'NR==3{print $3}')MB"; tail -3 /tmp/build3.log | cut -c1-250
for i in $(seq 1 14); do sleep 20; grep -q build_exit /tmp/build3.log && break; done; echo "$(date +%T)"; tail -3 /tmp/build3.log | cut -c1-250; ls -la <host-path> 2>/dev/null
cd <host-path> && B=./target/debug/sashiko; $B --version; $B --help 2>&1 | head -40; echo ---; $B review --help 2>&1 | head -30; echo ---; ls -la ~/.config/sashiko.toml 2>&1; git -C . status 2>&1 | head -2
cd /tmp && B=<host-path>; $B init 2>&1 | tail -5; echo "init=$?"; ls -la ~/.config/sashiko.toml; grep -n -i "api_key\|LLM_API_KEY\|provider\|telemetry" ~/.config/sashiko.toml | head -20
rm -rf /tmp/kscratch && mkdir /tmp/kscratch && cd /tmp/kscratch && git init -q && git config user.email <email> && git config user.name tester && printf 'int add(int a, int b)\n{\n\treturn a + b;\n}\n' > a.c && git add a.c && git commit -qm base && printf 'int add(int a, int b)\n{\n\tint *p = 0;\n\treturn a + b + *p;\n}\n' > a.c && git commit -qam "mm: change add" && B=<host-path> && timeout 600 $B review --no-ai 2>&1 | tail -20; echo "exit=${PIPESTATUS[0]}"
cd /tmp/kscratch && env -u LLM_API_KEY timeout 600 <host-path> review 2>&1 | tail -15; echo "exit=${PIPESTATUS[0]}"
cd <host-path> && mkdir -p .coldpass && rm -f .coldpass/probe.json .coldpass/report.json && cat > .coldpass/probe.json <<'EOF'
{"checks":[
 {"kind":"cli","check":"install","argv":["<host-path>","expected_returncode":0,"expected_text":"sashiko 0.6.1"},
 {"kind":"cli","check":"credentials_error","argv":["<host-path>","env":{},"expected_returncode":3,"expected_text":"Method doesn't allow unregistered callers"}
]}
EOF
cat > .coldpass/report.json <<'EOF'
{"outcome":"needs_credentials",
 "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.",
 "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."
 ],
 "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."
 ],
 "stuck_step":"README Quick Start 3: `sashiko review` (AI review) needs an LLM provider credential.",
 "main_blocker":"No LLM API key in the VM. Gemini (default provider) returned 403 PERMISSION_DENIED for unauthenticated calls.",
 "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`."
}
EOF
python3 -m json.tool .coldpass/probe.json >/dev/null && python3 -m json.tool .coldpass/report.json >/dev/null && echo json_ok; <env-var>=<host-path> python3 -I <host-path> --validate
Repair work and diagnoses (1)

Haiku 5.5

Native agent · Repair work (development) · not an initial-trial result

Operation / attempted scope limited checks

Agent-reported scope: Local patch review: `sashiko review` on a 2-commit scratch git repo (README Quick Start 3). Reached the LLM provider call and was rejected with 403 PERMISSION_DENIED; no review produced.

Run details
run
sashiko-dev--sashiko-claude-haiku-5-5-1792304837303222314
date
Oct 18, 2026
time to working
not recorded
product hosting / execution
Not recorded
recorded operation scope
limited checks
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.007841
Recorded source
https://github.com/sashiko-dev/sashiko
Tool transport
mcp-assigned-vm
Test version
readme-5628262d46c9935e0113224606406c520b1f3ba07a33bc13073be4f623f0b993
revision
27815bffd745c1e30e91bdd9d4f197ec7620d204
Current diagnosis: unknown · prerequisite

No LLM API key in the VM. Gemini (default provider) returned 403 PERMISSION_DENIED for unauthenticated calls.

Recorded action: Wait for the documented external prerequisite; keep partial grades.

Repair record fix-c122e89f51a6d1541c2e · current status JSON. Original run outcomes remain unchanged.

Failed run: sashiko-dev/sashiko · Oct 17, 2026 · Recorded operation failed.

Repair development: sashiko-dev/sashiko · Oct 18, 2026 · Repair work (development) · not an initial-trial result.

Double-checks failed run: sashiko-dev/sashiko · Oct 17, 2026.

Fix: fix-c122e89f51a6d1541c2e.

Recorded blocker / warning

Step: README Quick Start 3: `sashiko review` (AI review) needs an LLM provider credential.

No LLM API key in the VM. Gemini (default provider) returned 403 PERMISSION_DENIED for unauthenticated calls.

Install / setup / connection checks
[
  {
    "status": "PASS",
    "details": {
      "working": false,
      "argv": [
        "/usr/local/bin/sashiko",
        "--help"
      ],
      "kind": "cli",
      "returncode": 0,
      "stdout": "Agentic code review system for Linux kernel\n\nUsage: sashiko [OPTIONS] [COMMAND]\n\nCommands:\n  init    Create a user settings file\n  review  Review a local commit or commit range without starting the daemon\n  help    Print this message or the help of the given subcommand(s)\n\nOptions:\n      --download <DOWNLOAD>\n          Number of last messages to ingest\n[excerpt truncated]",
      "stderr": "",
      "needs_credentials": false,
      "needs_browser": false,
      "scope": "partial: install"
    },
    "check": "install",
    "optional": false
  },
  {
    "status": "FAIL",
    "details": {
      "working": false,
      "argv": [
        "/usr/local/bin/sashiko",
        "review"
      ],
      "kind": "cli",
      "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[excerpt truncated]",
      "stderr": "Reviewing: HEAD\nUsing prompts: /tmp/kscratch<host-path>\nRunning review for 1 patch\n      [Patch 1] change a | Queued\n      [Patch 1] change a | Pre-screening guides...\n2026-10-18T06:39:20.066796Z 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]",
      "needs_credentials": false,
      "needs_browser": false,
      "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: /tmp/kscratch<host-path>\\nRunning review for 1 patch\\n      [Patch 1] change a | Queued\\n      [Patch 1] change a | Pre-screening guides...\\n2026-10-18T06:39:20.066796Z 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-18T06:39:20.066854Z 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-18T06:39:20.143315Z 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-18T06:39:20.143377Z 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-18T06:39:20.220597Z 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-18T06:39:20.220653Z 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] change a | Incomplete\\nReview incomplete\\n\", \"needs_credentials\": false, \"needs_browser\": false}"
    },
    "check": "credentials_error",
    "optional": false
  }
]

Suggested next step (agent-reported): Provide an LLM provider credential (export LLM_API_KEY=... or configure the provider in ~/.config/sashiko.toml per docs/llm-providers.md) and rerun `sashiko review` in a git checkout. Alternatively use a non-LLM documented path such as --no-ai ingestion, which was not part of the README quickstart.

What the agent did

Local patch review: `sashiko review` on a 2-commit scratch git repo (README Quick Start 3). Reached the LLM provider call and was rejected with 403 PERMISSION_DENIED; no review produced.

Installed prerequisites via apt: git, build-essential, pkg-config, libssl-dev, curl, ca-certificates
Installed Rust 1.90.0 via rustup (minimal profile, stable default toolchain resolved to 1.90.0 for README 'Rust 1.90+')
cargo build --all-features --release (Makefile build target) in /workspace; built target/release/sashiko (v0.6.1) from pinned commit 27815bff
HOME=/tmp/kscratch/home sashiko init -> Wrote /tmp/kscratch<host-path> (README Quick Start 2)
sashiko review (README Quick Start 3) in scratch git repo -> review incomplete, PERMISSION_DENIED from Gemini default provider; exit code 3