{
  "run_id": "mongodb--kingfisher-claude-haiku-5-5-1793159140108341706",
  "date": "2026-10-28T03:56:24.114028+00:00",
  "repo": "mongodb/kingfisher",
  "kind": "repo",
  "source": "https://github.com/mongodb/kingfisher",
  "commit": "5794966a04cda497ca96f802fabce9dfc9b17302",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-c03644542c69939a9374958136a8b3431f7456269d3fb4b3c433785f59cfd637",
  "pass": true,
  "outcome": "pass",
  "time_to_working_s": 605.512478263001,
  "total_s": 644.005542755127,
  "steps": [
    "cd <guest-path> && pwd && ls -la && id -u && python3 --version && (git -C . rev-parse HEAD 2>&1 | head -1) && echo \"CDP=$CDP_URL\" && wc -c README.md 2>/dev/null",
    "cd <guest-path> && cat README.md | head -c 7900",
    "cd <guest-path> && grep -n '^#' README.md | head -80 && grep -n -i 'curl\\|cargo install\\|brew\\|pip install\\|uv \\|telemetry\\|--version' README.md | head -40",
    "cd <guest-path> && sed -n 316,362p README.md",
    "cd <guest-path> && grep -n -i 'curl\\|install.sh\\|uv \\|pip\\|telemetry\\|consent' docs/INSTALLATION.md | head -40; echo ---; which uv brew cargo pipx 2>&1; echo ---; grep -n 'requires-python' pyproject.toml pypi/*/pyproject.toml 2>/dev/null; ls pypi",
    "cd /tmp && uv --version && uv tool install kingfisher-bin 2>&1 | tail -15; echo \"rc=$?\"; ls -la ~/.local/bin 2>/dev/null | head; which kingfisher",
    "K=<guest-path>; $K --version; mkdir -p <guest-path> && printf 'aws_access_key_id = <secret>\\naws_secret = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\\n' > <guest-path> && cd <guest-path> && $K scan <guest-path> --git-history none --no-validate --format json 2><guest-path> | head -c 1500; echo; echo \"rc=${PIPESTATUS[0]}\"; head -c 600 <guest-path>",
    "K=<guest-path>; printf 'github_token = <secret>\\n' > <guest-path> && cd <guest-path> && $K scan <guest-path> --git-history none --no-validate --format json 2>/dev/null > <guest-path>; echo rc=$?; /usr/bin/python3 -I -c 'import json;d=json.load(open(\"<guest-path>\"));print(len(d[\"findings\"]));[print(f.get(\"rule\",{}).get(\"name\") if isinstance(f.get(\"rule\"),dict) else f.get(\"rule_name\"), f.get(\"finding\",{}).get(\"path\") if isinstance(f.get(\"finding\"),dict) else \"\") for f in d[\"findings\"]]' ; head -c 400 <guest-path>",
    "cd <guest-path> && grep -rn -i 'exit code\\|exit status\\|returncode\\|200' docs/USAGE.md docs/INSTALLATION.md README.md 2>/dev/null | head -20; echo ---; head -c 200 <guest-path> | od -c | head -3 >/dev/null; wc -l <guest-path>",
    "cd <guest-path> && sed -n 392,416p README.md; echo ---; <guest-path> scan --help 2>/dev/null | grep -i -n 'output\\|--format\\|--git-history\\|--no-validate' | head",
    "export PATH=<guest-path>; mkdir -p <guest-path> && cd <guest-path> && kingfisher scan <guest-path> --git-history none --no-validate --format json --output <guest-path> 2>/dev/null; echo rc=$?; ls -la <guest-path>; python3 -I -c 'import json,sys\nt=open(\"<guest-path>\",encoding=\"utf-8\").read()\nprint(len(t)); print(\"github-pat\" in t); print(t[:120])'",
    "cd <guest-path> && grep -n -i 'cron\\|schedul\\|daemon\\|webhook\\|--once\\|--now\\|watch mode\\|--watch\\|interval' README.md | head -20; echo ---; grep -rn -i '\\-\\-watch\\|--interval\\|--daemon\\|--loop' docs/USAGE.md | head -5; <guest-path> scan --help | grep -i 'watch\\|interval\\|daemon\\|loop\\|cron' | head",
    "export PATH=<guest-path>; cd <guest-path> && kingfisher scan <guest-path> --git-history none --no-validate --format html --output <guest-path> >/dev/null 2>&1; echo rc=$?; python3 -I -c 't=open(\"<guest-path>\",encoding=\"utf-8\").read(); print(len(t)); print(\"Kingfisher\" in t, \"github-pat\" in t or \"GitHub Personal Access Token\" in t); import re; print(re.findall(r\"<title>[^<]*</title>\",t)[:1])'; cd <guest-path> && grep -n -c -- '--format html' README.md; grep -n -- '--output findings.json' README.md",
    "cd <guest-path> && rm -f probe-findings.json example-audit.html && rmdir <guest-path> 2>/dev/null; mkdir -p <guest-path> <guest-path> <guest-path> && mkdir -p <guest-path> && ls -laR <guest-path> && ls -la <guest-path>",
    "cat > <guest-path> <<'EOF'\n{\"kind\":\"cli\",\"argv\":[\"kingfisher\",\"scan\",\"<guest-path>\",\"--git-history\",\"none\",\"--no-validate\",\"--format\",\"json\",\"--output\",\"<guest-path>\"],\"cwd\":\"<guest-path>\",\"env\":{\"PATH\":\"<guest-path>\"},\"expected_returncode\":200,\"expected_file\":\"<guest-path>\",\"expected_text\":\"github-pat\"}\nEOF\npython3 -I -c 'import json;print(json.load(open(\"<guest-path>\"))[\"argv\"][0])'",
    "cat > <guest-path> <<'EOF'\n[{\"kind\":\"claim\",\"claim\":\"Scanning a directory with --format json reports the leaked GitHub token and exits 200 when findings are present\",\"source\":\"kingfisher scan /path/to/repository --format json\",\"input\":\"<guest-path> containing a synthetic GitHub PAT\",\"expected\":\"JSON output containing the github-pat finding, exit code 200\",\"probe_kind\":\"cli\",\"argv\":[\"kingfisher\",\"scan\",\"<guest-path>\",\"--git-history\",\"none\",\"--no-validate\",\"--format\",\"json\"],\"expected_returncode\":200,\"expected_text\":\"github-pat\",\"env\":{\"PATH\":\"<guest-path>\"},\"cwd\":\"<guest-path>\"},\n{\"kind\":\"claim\",\"claim\":\"The --output option writes the JSON report to a file\",\"source\":\"--output findings.json\",\"input\":\"<guest-path> containing a synthetic GitHub PAT\",\"expected\":\"findings.json file containing the github-pat finding\",\"probe_kind\":\"cli\",\"argv\":[\"kingfisher\",\"scan\",\"<guest-path>\",\"--git-history\",\"none\",\"--no-validate\",\"--format\",\"json\",\"--output\",\"<guest-path>\"],\"expected_returncode\":200,\"expected_file\":\"<guest-path>\",\"expected_text\":\"github-pat\",\"env\":{\"PATH\":\"<guest-path>\"},\"cwd\":\"<guest-path>\"}]\nEOF\npython3 -I -c 'import json;print(len(json.load(open(\"<guest-path>\"))))'",
    "cd <guest-path> && cat > examples.json <<'EOF'\n[{\"kind\":\"example\",\"claim\":\"Generate a standalone HTML audit report\",\"source\":\"README.md Save and combine reports (--format html --output audit.html)\",\"input\":\"<guest-path> containing a synthetic GitHub PAT\",\"expected\":\"standalone HTML audit report with the Kingfisher Audit Report title, exit code 200\",\"argv\":[\"kingfisher\",\"scan\",\"<guest-path>\",\"--git-history\",\"none\",\"--no-validate\",\"--format\",\"html\",\"--output\",\"<guest-path>\"],\"cwd\":\"<guest-path>\",\"env\":{\"PATH\":\"<guest-path>\"},\"expected_returncode\":200,\"expected_file\":\"<guest-path>\",\"expected_text\":\"Kingfisher Audit Report\"}]\nEOF\ncat > cycles.json <<'EOF'\n{\"detected\":false,\"reason\":\"Inspected README.md and docs/USAGE.md for cron, schedule, daemon, loop, --once, --now, --watch, --interval and webhook behavior. Kingfisher is a one-shot scan CLI (kingfisher scan exits after one run). The only webhook mention is docs/ALERTS.md chat/webhook alert destinations, which are external notifications and out of scope here.\",\"checks\":[]}\nEOF\npython3 -I -c 'import json;[json.load(open(\"<guest-path>\"+f)) for f in [\"examples.json\",\"cycles.json\"]];print(\"ok\")'",
    "ls -la <guest-path> /inputs/coldpass-preflight.py 2>&1 | head; cd /tmp && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -c 4000; echo \"rc=${PIPESTATUS[0]}\"",
    "cd /tmp && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo rc=$?; wc -c <guest-path>; python3 -I -c 'import re\nt=open(\"<guest-path>\",encoding=\"utf-8\",errors=\"replace\").read()\nprint(t[:1500])\nfor m in re.finditer(r\"\\\"(valid|verdict|error|reason|problem|outcome)\\\": ?\\\"[^\\\"]{0,300}\", t):\n    print(m.group(0)[:300])\n' | head -80",
    "mkdir -p <guest-path> && printf 'name = \"sample\"\\nversion = \"1.0\"\\n' > <guest-path> && cd <guest-path> && PATH=<guest-path> kingfisher scan <guest-path> --git-history none --no-validate --format html --output <guest-path> >/dev/null 2>&1; echo rc=$?; ls <guest-path>; rm -f <guest-path>",
    "cat > <guest-path> <<'EOF'\n[{\"kind\":\"example\",\"claim\":\"Generate a standalone HTML audit report\",\"source\":\"README.md Save and combine reports (--format html --output audit.html)\",\"input\":\"<guest-path> (clean directory, no findings)\",\"expected\":\"standalone HTML audit report with the Kingfisher Audit Report title, exit code 0\",\"argv\":[\"kingfisher\",\"scan\",\"<guest-path>\",\"--git-history\",\"none\",\"--no-validate\",\"--format\",\"html\",\"--output\",\"<guest-path>\"],\"cwd\":\"<guest-path>\",\"env\":{\"PATH\":\"<guest-path>\"},\"expected_file\":\"<guest-path>\",\"expected_text\":\"Kingfisher Audit Report\"}]\nEOF\ncd /tmp && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo rc=$?; python3 -I -c 'import re\nt=open(\"<guest-path>\",encoding=\"utf-8\",errors=\"replace\").read()\nprint(t[:600])\nprint(re.findall(r\"\\\"verdict\\\": ?\\\"[a-z]+\\\"\", t))\nprint(re.findall(r\"\\\"status\\\": ?\\\"[A-Z]+\\\"\", t))'",
    "cat > <guest-path> <<'EOF'\n{\"outcome\":\"working\",\"fault_owner\":null,\"operation\":\"Install Kingfisher from the README and run a local secret scan with JSON and file output (kingfisher scan ... --format json [--output file]), plus the README HTML audit report\",\"operation_scope\":\"Local files only (no git history, no live credential validation). Guest is Ubuntu on WSL2, Python 3.12.3, uv 0.13.5. No browser was needed, so the CDP endpoint was not used.\",\"steps\":[\"uv tool install kingfisher-bin (README Quick Start, PyPI wrapper; installed kingfisher-bin 2.15.0 to <guest-path>)\",\"kingfisher --version\",\"kingfisher scan <guest-path> --git-history none --no-validate --format json (returned findings, exit 200)\",\"kingfisher scan <guest-path> --git-history none --no-validate --format json --output <guest-path> (README 'Save and combine reports', exit 200, file contains github-pat)\",\"kingfisher scan <guest-path> --git-history none --no-validate --format html --output <guest-path> (README HTML audit report, exit 0)\",\"<env-var>=<guest-path> python3 -I <guest-path> --validate --replay (valid=true)\"],\"deviations\":[\"README Quick Start install is 'brew install kingfisher' or 'uv tool install kingfisher-bin'. Homebrew is not in the guest, so I used the uv PyPI wrapper. It installs prebuilt kingfisher 2.15.0, not a build of the pinned source commit 5794966a04cda497ca96f802fabce9dfc9b17302. The workspace snapshot has no .git metadata and I did not build the Rust source with cargo.\",\"The guest shell does not have the uv tool bin dir on PATH, so probes and claims set PATH in env to <guest-path>\",\"All scans used --git-history none and --no-validate so the run stayed local, with no network credential checks. Live validation and the Git-history scan were not exercised.\",\"The example uses a clean directory (<guest-path>). My first example scanned the fixture with the GitHub token, which exits 200, and the checker rejected it because README.md does not document that nonzero exit code. The README's own 'Save and combine reports' section was used for the claim and probe.\",\"Fixture secrets are synthetic: a made-up ghp_ token in <guest-path>, and an AWS docs example key that produced no finding.\",\"Rule-cache warning on stderr (cache directory writable by group or others). Scan results were unaffected.\",\"Did not run the repository's cargo/Makefile test suite. Only README-documented operations were checked.\",\"/inputs/coldpass-preflight.py does not exist in this guest, so I ran the documented <guest-path> command instead.\"],\"stuck_step\":null,\"main_blocker\":null,\"plain_failure\":null,\"suggested_fix\":\"None required for the tested operations. Optional: add a source-build path to the README for pinned-commit verification, and make sure the README documents exit code 200 for findings in the scan quickstart.\"}\nEOF\npython3 -I -c 'import json;d=json.load(open(\"<guest-path>\"));print(d[\"outcome\"], d[\"fault_owner\"], len(d[\"steps\"]))'; ls -la <guest-path> <guest-path> 2>&1 | tail -8"
  ],
  "stuck_step": null,
  "error_excerpt": null,
  "what_it_did": "Install Kingfisher from the README and run a local secret scan with JSON and file output (kingfisher scan ... --format json [--output file]), plus the README HTML audit report",
  "suggested_fix": null,
  "tokens_in": 569843,
  "tokens_out": 16528,
  "cost_usd": 0.021459989999999998,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": true,
        "argv": [
          "kingfisher",
          "scan",
          "<guest-path>",
          "--git-history",
          "none",
          "--no-validate",
          "--format",
          "json",
          "--output",
          "<guest-path>"
        ],
        "kind": "cli",
        "returncode": 200,
        "stdout": "{\"findings\":1,\"successful_validations\":0,\"failed_validations\":0,\"skipped_validations\":0,\"rules_applied\":488,\"blobs_scanned\":2,\"bytes_scanned\":153,\"scan_duration\":0.054178047,\"scan_date\":\"2026-10-28T03:55:03.755308972+00:00\",\"kingfisher\":{\"version_used\":\"2.15.0\",\"latest_version\":\"2.15.0\",\"update_check_status\":\"ok\",\"update_check_message\":\"Kingfisher 2.15.0 is up to date\"},\"findings_by_rule\":[[\"Uncovered a GitHub Personal Access Token, potentially leading to unauthorized repository access and sensitive content exposure.\",1]]}",
        "stderr": "Kingfisher 2.15.0 is up to date\n INFO kingfisher: Launching with 2 concurrent scan jobs. Use --jobs to override.\n INFO kingfisher::rule_loader: Loaded 488 rules\n INFO kingfisher::scanner::rule_loading: Using Vectorscan rule cache cache_dir=<guest-path>\n WARN kingfisher_rules::rules_database: Ignoring unsafe or unavailable rule cache directory cache_dir=<guest-path> err=cache directory route is writable by group or others",
        "expected_file": "<guest-path>",
        "file_checked": true,
        "file_excerpt": "\u2026github-pat\",\"id\":\"betterleaks.github-pat\",\"description\":\"Uncovered a GitHub Personal Access Token, potentially leading to unauthorized repository access and sensitive content exposure.\"},\"finding\":{\"snippet\":\"<secret>\",\"fingerprint\":\"4055663260747634681\",\"confidence\":\"high\",\"entropy\":\"5.22\",\"validation\":{\"outcome\":\"not_attempted\",\"status\":\"Not Attempted\",\"response\":\"\"},\"language\":\"Unknown\",\"line\":1,\"column_start\":15,\"column_end\":54,\"path\":\"<guest-path>\",\"validate_command\":\"kingfisher validate --rule 'betterleaks.github-pat' '<secret>'\",\"blast_radius_command\":\"kingfisher blast-radius --rule 'betterleaks.github-pat' '<secret>'\"}}],\"audit\":{\"schema\":\"kingfisher.repository-audit.v1\",\"run_id\":\"d56677ea-aba4-4dde-b260-f47f7a3b593a\",\"started_at\":\"2026-10-28T03:55:03.755308972+00:00\",\"completed_at\":\"2026-10-28T03:55:03.808Z\",\"duration_seconds\":0.053119071,\"summary\":{\"discovered\":1,\"fetch_succeeded\":0,\"fetch_failed\":0,\"scan_succeeded\":1,\"scan_partial\":0,\"scan_failed\":0,\"pending\":0},\"repositories\":[{\"key\":\"local:<guest-path>\",\"repository\":\"<guest-path>\",\"source\":\"local\",\"discovered_at\":\"2026-10-28T03:55:03.762Z\",\"fetch\":{\"status\":\"not_applicable\"},\"scan\":{\"status\":\"completed\",\"started_at\":\"2026-10-28T03:55:03.762Z\",\"completed_at\":\"2026-10-28T03:55:03.808Z\",\"duration_seconds\":0.045856815},\"stats\":{\"findings\":2,\"blobs_scanned\":2,\"bytes_scanned\":153}}]},\"metadata\":{\"generated_at\":\"2026-10-28T03:55:03.809616503+00:00\",\"scan_timestamp\":\"2026-10-28T03:55:03.755308972+00:00\",\"target\":\"<guest-path>\",\"command_line_args\":[\"<guest-path>\",\"scan\",\"<guest-path>\",\"--git-history\",\"none\",\"--no-validate\",\"--format\",\"json\",\"--output\",\"<guest-path>\"],\"kingfisher_version\":\"2.15.0\",\"latest_version_available\":\"2.15.0\",\"update_check_status\":\"ok\",\"summary\":{\"findings\":1,\"active_findings\":0,\"inactive_findings\":0,\"locally_derived_findings\":0,\"invalid_material_findings\":0,\"unknown_validation_findings\":1,\"access_map_identities\":0,\"rules_applied\":488,\"confidence_level\":\"medium\",\"custom_rules_used\":false,\"successful_validations\":0,\"failed_validations\":0,\"skipped_validations\":0,\"blobs_scanned\":2,\"bytes_scanned\":153,\"scan_duration_seconds\":0.053337563}}}\n",
        "needs_credentials": false,
        "needs_browser": false,
        "scope": "product operation"
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 1 connection review, 3 download and execute, 167 hardcoded secret, 29 known vulnerability. 91 static matches retained as context.",
    "expected": "Reviewed as expected for a test run: attempted writes that failed, so nothing was written.",
    "findings": [
      {
        "kind": "connection-review",
        "count": 1,
        "note": "Repository processes attempted these non-loopback connections; proxies can hide the final hostname.",
        "location_count": 4,
        "process_count": 21
      },
      {
        "kind": "download-and-execute",
        "count": 3,
        "note": "Source contains download and execute; review its purpose.",
        "location_count": 2
      },
      {
        "kind": "hardcoded-secret",
        "count": 164,
        "note": "Gitleaks found a possible hardcoded secret; value withheld.",
        "location_count": 47
      },
      {
        "kind": "known-vulnerability",
        "count": 29,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 19
      }
    ],
    "context": [
      {
        "kind": "hardcoded-secret",
        "count": 88,
        "note": "Gitleaks found a possible hardcoded secret; value withheld.",
        "location_count": 30
      }
    ],
    "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.",
      "Only 200 of 364 findings are stored; the summary counts all of them."
    ],
    "static": {
      "dependency_note": "OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check."
    },
    "evidence_url": "/safety/?run=mongodb--kingfisher-claude-haiku-5-5-1793159140108341706",
    "evidence_file": "/data/safety/mongodb--kingfisher-claude-haiku-5-5-1793159140108341706.json.gz"
  },
  "agent_execution": "native_agent",
  "agent_runtime": "claude-code",
  "agent_runtime_version": "2.1.310 (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": 22,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "5794966a04cda497ca96f802fabce9dfc9b17302",
    "url": "https://github.com/mongodb/kingfisher"
  },
  "purpose": "initial",
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "fault": {
    "owner": null,
    "status": "resolved",
    "reason": null
  },
  "fix_id": null,
  "verifies_run_id": null,
  "hosting": null,
  "operation_scope": "product operation",
  "tool_calls": 22,
  "guest_setup": null,
  "runtime": null,
  "runtime_version": null,
  "runtime_revision": null,
  "source_revision": null,
  "evidence_version": null,
  "failure_origin": null,
  "evidence_strength": "readme_checked",
  "works": "yes",
  "install_s": null,
  "first_use_s": null,
  "mcp": "none",
  "needs": [],
  "needs_which": null,
  "agent_interface": [
    "cli"
  ],
  "license": "Apache-2.0",
  "repo_url": "https://github.com/mongodb/kingfisher",
  "cost_to_try": "free",
  "hardware": null,
  "what_failed": null,
  "local_or_hosted": "both",
  "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": "Inspected README.md and docs/USAGE.md for cron, schedule, daemon, loop, --once, --now, --watch, --interval and webhook behavior. Kingfisher is a one-shot scan CLI (kingfisher scan exits after one run). The only webhook mention is docs/ALERTS.md chat/webhook alert destinations, which are external notifications and out of scope here.",
      "evidence": "Inspected README.md and docs/USAGE.md for cron, schedule, daemon, loop, --once, --now, --watch, --interval and webhook behavior. Kingfisher is a one-shot scan CLI (kingfisher scan exits after one run). The only webhook mention is docs/ALERTS.md chat/webhook alert destinations, which are external notifications and out of scope here.",
      "command": ""
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "Scanning a directory with --format json reports the leaked GitHub token and exits 200 when findings are present",
      "source": "kingfisher scan /path/to/repository --format json",
      "input": "<guest-path> containing a synthetic GitHub PAT",
      "expected": "JSON output containing the github-pat finding, exit code 200",
      "command": "kingfisher scan <guest-path> --git-history none --no-validate --format json",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: github-pat",
      "evidence": "\u2026github-pat\",\"id\":\"betterleaks.github-pat\",\"description\":\"Uncovered a GitHub Personal Access Token, potentially leading to unauthorized repository access and sensitive content exposure.\"},\"finding\":{\"snippet\":\"<secret>\",\"fingerprint\":\"4055663260747634681\",\"confidence\":\"high\",\"entropy\":\"5.22\",\"validation\":{\"outcome\":\"not_attempted\",\"status\":\"Not Attempted\",\"response\":\"\"},\"language\":\"Unknown\",\"line\":1,\"column_start\":15,\"column_end\":54,\"path\":\"<guest-path>\",\"validate_command\":\"kingfisher validate --rule 'betterleaks.github-pat' '<secret>",
      "returncode": 200,
      "source_checked": true,
      "source_file": "README.md"
    },
    {
      "kind": "claim",
      "claim": "The --output option writes the JSON report to a file",
      "source": "--output findings.json",
      "input": "<guest-path> containing a synthetic GitHub PAT",
      "expected": "findings.json file containing the github-pat finding",
      "command": "kingfisher scan <guest-path> --git-history none --no-validate --format json --output <guest-path>",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: github-pat",
      "evidence": "\u2026github-pat\",\"id\":\"betterleaks.github-pat\",\"description\":\"Uncovered a GitHub Personal Access Token, potentially leading to unauthorized repository access and sensitive content exposure.\"},\"finding\":{\"snippet\":\"<secret>\",\"fingerprint\":\"4055663260747634681\",\"confidence\":\"high\",\"entropy\":\"5.22\",\"validation\":{\"outcome\":\"not_attempted\",\"status\":\"Not Attempted\",\"response\":\"\"},\"language\":\"Unknown\",\"line\":1,\"column_start\":15,\"column_end\":54,\"path\":\"<guest-path>\",\"validate_command\":\"kingfisher validate --rule 'betterleaks.github-pat' '<secret>",
      "returncode": 200,
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "Generate a standalone HTML audit report",
      "source": "README.md Save and combine reports (--format html --output audit.html)",
      "input": "<guest-path> (clean directory, no findings)",
      "command": "kingfisher scan <guest-path> --git-history none --no-validate --format html --output <guest-path>",
      "evidence": "window.history.state, \"\", url);\n      }\n      refresh();\n      search?.focus();\n    });\n    refresh();\n  });\n\n  window.addEventListener(\"beforeprint\", () => {\n    document.querySelectorAll(\"details.commands\").forEach((details) => {\n      details.dataset.wasOpen = details.open ? \"true\" : \"false\";\n      details.open = true;\n    });\n  });\n  window.addEventListener(\"afterprint\", () => {\n    document.querySelectorAll(\"details.commands\").forEach((details) => {\n      details.open = details.dataset.wasOpen === \"true\";\n      delete details.dataset.wasOpen;\n    });\n  });\n})();\n</script>\n</body>\n</html>\n",
      "deferred": false,
      "expected": "standalone HTML audit report with the Kingfisher Audit Report title, exit code 0",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    }
  ],
  "does_what_it_says": "yes",
  "maintenance": {
    "last_commit_at": "2026-10-28T03:06:02Z",
    "commits_90d": 199,
    "merged_prs_90d": 41,
    "open_issues": 6,
    "open_prs": 7,
    "reply_share": 0.96,
    "reply_threads": 23,
    "median_reply_hours": 22.9,
    "last_release_at": "2026-10-28T01:55:23Z",
    "archived": false,
    "verdict": "maintained",
    "note": "actively maintained: last commit 0 days ago; 199 commits and 41 merged PRs in 90 days; 6 open issues, 7 open PRs; 22 of 23 recent threads got a maintainer reply, median first reply 22.9h; latest release 2026-10-28"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 0 days ago; 199 commits and 41 merged PRs in 90 days; 6 open issues, 7 open PRs; 22 of 23 recent threads got a maintainer reply, median first reply 22.9h; latest release 2026-10-28",
  "maintained": "active",
  "maintained_note": "last commit 0 days ago; 6 open issues, 16 answered or closed",
  "last_commit_at": "2026-10-28T03:06:03Z",
  "last_release_at": "2026-10-28T01:55:23Z",
  "open_issues": 6,
  "answered_issues": 16,
  "platforms_claimed": [
    "linux",
    "mac",
    "windows"
  ],
  "topic": "coding",
  "agent_interfaces": [
    {
      "interface": "cli",
      "evidence": "independent checker",
      "observed": true,
      "operation_checked": true
    }
  ],
  "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-28T03:56:24.114028+00:00",
  "tested_commit": "5794966a04cda497ca96f802fabce9dfc9b17302",
  "tested_with": {
    "agent": "claude-code",
    "agent_version": "2.1.310 (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": "mongodb/kingfisher",
    "source": "https://github.com/mongodb/kingfisher",
    "commit": "5794966a04cda497ca96f802fabce9dfc9b17302",
    "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.310 (Claude Code)",
    "tool_transport": "mcp-assigned-vm",
    "runtime": null,
    "runtime_version": null,
    "runtime_revision": null,
    "sandbox_source": null,
    "guest_setup": null,
    "source_pin": {
      "commit": "5794966a04cda497ca96f802fabce9dfc9b17302",
      "url": "https://github.com/mongodb/kingfisher"
    },
    "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 Kingfisher from the README and run a local secret scan with JSON and file output (kingfisher scan ... --format json [--output file]), plus the README HTML audit report",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "repo",
    "test_version": "readme-c03644542c69939a9374958136a8b3431f7456269d3fb4b3c433785f59cfd637",
    "evidence_version": null
  },
  "other_model": null,
  "other_run_id": null,
  "models_agree": null,
  "furthest_model": null,
  "transcript_url": "/transcripts/mongodb--kingfisher-claude-haiku-5-5-1793159140108341706.txt",
  "report_url": "/reports/mongodb--kingfisher-claude-haiku-5-5-1793159140108341706.json"
}
