{
  "run_id": "TayHCode--search-first-claude-haiku-5-5-1792608937366265731",
  "date": "2026-10-21T19:06:27.573138+00:00",
  "repo": "TayHCode/search-first",
  "kind": "mcp",
  "source": "https://github.com/TayHCode/search-first",
  "commit": "2b7c5fd54b96bdd2a736eb2ae25db35d2cb71d7d",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-46075cc0a15054283edf08e1dffafeab70fc0eb7363f730a3d9f58040b16649a",
  "pass": true,
  "outcome": "pass",
  "time_to_working_s": 279.4669014639803,
  "total_s": 650.2068192958832,
  "steps": [
    "cd <guest-path> && pwd && ls -la && id -u && cat README.md 2>/dev/null | head -200; python3 --version; ls /inputs 2>/dev/null; ls <guest-path> 2>/dev/null",
    "cd <guest-path> && grep -n '^#' README.md; echo ---; which uv uvx git; uv --version 2>/dev/null; ls scripts; cat scripts/check_python.py 2>/dev/null | head -40; echo ---; ls -la .coldpass .github; cat AGENTS.md; ls <guest-path>",
    "cd <guest-path> && sed -n 187,345p README.md",
    "cd <guest-path> && sed -n 630,700p README.md; echo ---; cat scripts/smoke.py | head -60; echo; grep -n -i 'once\\|cron\\|schedul\\|loop\\|webhook' README.md | head",
    "cd <guest-path> && curl -LsSf https://astral.sh/uv/install.sh | sh 2>&1 | tail -5; export PATH=\"$HOME/.local/bin:$PATH\"; which uv uvx && uv --version; echo \"proxy: ${HTTPS_PROXY:-none}\"; git init -q 2>&1; git remote add origin https://github.com/TayHCode/search-first 2>&1; timeout 120 git fetch --depth 1 origin 2b7c5fd54b96bdd2a736eb2ae25db35d2cb71d7d 2>&1 | tail -3; git reset --mixed FETCH_HEAD 2>&1 | tail -2; git log --oneline -1",
    "cd <guest-path> && git status --short | head -5; timeout 600 <guest-path> --python 3.12 --from . search-first --help 2>&1 | tail -40; echo \"rc=${PIPESTATUS[0]}\"",
    "cd <guest-path> && curl -sS -m 10 -o /dev/null -w '%{http_code}\\n' https://api.github.com/rate_limit; echo ---; export PATH=<guest-path>; timeout 900 uv sync --locked --extra dev 2>&1 | tail -5; echo \"sync rc=$?\"; timeout 900 uv run --locked pytest -q 2>&1 | tail -15",
    "cd <guest-path> && export PATH=<guest-path>; uv run --locked ruff check . 2>&1 | tail -3; echo \"ruff check rc=$?\"; uv run --locked ruff format --check . 2>&1 | tail -3; uv run --locked mypy 2>&1 | tail -3; echo ---; rm -rf <guest-path> && mkdir -p <guest-path> && cp -r <guest-path> <guest-path> && cd <guest-path> && timeout 900 uv run --locked python -m build --outdir <guest-path> 2>&1 | tail -3; ls <guest-path>",
    "cd <guest-path> && export PATH=<guest-path>; timeout 900 uv run --locked python -m build --outdir <guest-path> 2>&1 | grep -v '^\\s*$' | tail -40",
    "sudo -n true && echo sudo-ok; (sudo -n apt-get update -qq && sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y -qq python3.12-venv) 2>&1 | tail -3; echo \"rc=$?\"; cd <guest-path> && export PATH=<guest-path>; timeout 900 uv run --locked python -m build --outdir <guest-path> 2>&1 | tail -4; ls <guest-path>",
    "cd <guest-path> && wc -l check.py && grep -n 'def \\|\"kind\"\\|expected_file\\|credentials_error\\|mcp_http' check.py | head -80",
    "cd <guest-path> && grep -n 'argparse\\|add_argument\\|COLDPASS_WORKSPACE\\|probe.json\\|claims.json\\|examples.json\\|cycles.json\\|report.json' check.py | head -40; sed -n 1,30p check.py | head -40",
    "mkdir -p <guest-path> && cd <guest-path> && cat > .coldpass/probe.json <<'EOF'\n{\"kind\":\"mcp\",\"argv\":[\"<guest-path>\",\"--python\",\"3.12\",\"--from\",\".\",\"search-first\"],\"cwd\":\"<guest-path>\",\"tool\":\"search_existing\",\"arguments\":{\"idea\":\"a Chrome extension or script that closes idle browser tabs automatically\",\"queries\":[\"chrome idle tab close\",\"auto close tabs\",\"inactive tabs extension\",\"tab auto closer\"],\"language\":null,\"min_stars\":0,\"include_archived\":false,\"limit\":8,\"sort_by\":\"relevance\"}}\nEOF\ncat .coldpass/probe.json | python3 -I -m json.tool >/dev/null && echo valid; ls <guest-path>; COLDPASS_WORKSPACE=<guest-path> timeout 900 python3 -I <guest-path> --validate 2>&1 | tail -30",
    "cd <guest-path> && COLDPASS_WORKSPACE=<guest-path> timeout 1200 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo rc=$?; head -c 3000 <guest-path>",
    "cd <guest-path> && COLDPASS_WORKSPACE=<guest-path> timeout 1200 python3 -I <guest-path> --validate --replay 2>&1 | python3 -I -c 'import sys,json; s=sys.stdin.read(); print(s[-1500:])'",
    "cd <guest-path> && python3 -I - <<'EOF'\nimport json\np='<guest-path>'\nd=json.load(open(p))\nd['expected_text']='maverick-360/vaultab'\njson.dump(d,open(p,'w'),indent=1)\nEOF\nCOLDPASS_WORKSPACE=<guest-path> timeout 1200 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo rc=$?; python3 -I -c 'import json,sys; d=json.load(open(\"<guest-path>\")) if False else None' ; head -c 600 <guest-path>; echo; tail -c 400 <guest-path>",
    "cd <guest-path> && grep -n 'Accepts `owner/repo`\\|Returns named `columns`\\|does \\*\\*not\\*\\* call a model\\|An MCP server that discovers\\|Only public repositories are returned\\|Cache hits are free' README.md",
    "cd <guest-path> && python3 -I - <<'EOF'\nimport json\nsrv=[\"<guest-path>\",\"--python\",\"3.12\",\"--from\",\".\",\"search-first\"]\nclaims=[\n {\"kind\":\"claim\",\"claim\":\"inspect_repo returns maintenance and reuse signals for a public repository\",\n  \"source\":\"Accepts `owner/repo` or `https://github.com/owner/repo`.\",\n  \"input\":\"maverick-360/vaultab\",\"expected\":\"README inspection for the named repository\",\n  \"probe_kind\":\"mcp\",\"argv\":srv,\"tool\":\"inspect_repo\",\"arguments\":{\"repo\":\"maverick-360/vaultab\"},\n  \"expected_text\":\"maverick-360/vaultab\",\"cwd\":\"<guest-path>\"},\n {\"kind\":\"claim\",\"claim\":\"compare_candidates compares repositories side by side for an idea\",\n  \"source\":\"Returns named `columns` and side-by-side `rows`, one per unique repo (1\u20136 inputs),\",\n  \"input\":\"idea 'a Python library for rate limiting outgoing HTTP requests' with vutran1710/PyrateLimiter\",\n  \"expected\":\"a comparison row naming the repository\",\n  \"probe_kind\":\"mcp\",\"argv\":srv,\"tool\":\"compare_candidates\",\n  \"arguments\":{\"idea\":\"a Python library for rate limiting outgoing HTTP requests\",\"repos\":[\"vutran1710/PyrateLimiter\",\"bboe/extended_http_server\"],\"sort_by\":\"overall\"},\n  \"expected_text\":\"vutran1710/PyrateLimiter\",\"cwd\":\"<guest-path>\"}\n]\njson.dump(claims,open('.coldpass/claims.json','w',encoding='utf-8'),indent=1,ensure_ascii=False)\nprint(\"ok\")\nEOF\nCOLDPASS_WORKSPACE=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo rc=$?; python3 -I -c '\nimport sys,re\ns=open(\"<guest-path>\").read()\nprint(len(s)); print(s[:1200]); print(\"....\"); print(s[-1200:])'",
    "cd <guest-path> && python3 -I -c '\nimport json,re\ns=open(\"<guest-path>\").read()\nfor m in re.finditer(r\"\\\"verdict\\\": \\\"(\\w+)\\\", \\\"outcome\\\": \\\"([^\\\"]*)\\\"\", s): print(m.group(1), m.group(2)[:150])\nprint(\"PASS count\", s.count(\"\\\"status\\\": \\\"PASS\\\"\"), \"FAIL\", s.count(\"FAIL\"))\n'; grep -rn -i 'cron\\|schedul\\|--once\\|--now\\|webhook\\|loop' src/ README.md | head; ls src/search_first/; ls tests | head; ls docs",
    "cd <guest-path> && python3 -I - <<'EOF'\nimport json\nW='<guest-path>'\nUV='<guest-path>'\nex=[\n {\"kind\":\"example\",\"claim\":\"Documented development test suite passes\",\"source\":\"README.md\",\n  \"input\":\"uv run --locked pytest -q\",\"expected\":\"all tests pass\",\"argv\":[UV,\"run\",\"--locked\",\"pytest\",\"-q\"],\n  \"cwd\":W,\"expected_text\":\"201 passed\"},\n {\"kind\":\"example\",\"claim\":\"Documented lint check passes\",\"source\":\"README.md\",\n  \"input\":\"uv run --locked ruff check .\",\"expected\":\"ruff reports no problems\",\"argv\":[UV,\"run\",\"--locked\",\"ruff\",\"check\",\".\"],\n  \"cwd\":W,\"expected_text\":\"All checks passed!\"},\n {\"kind\":\"example\",\"claim\":\"Documented format check passes\",\"source\":\"README.md\",\n  \"input\":\"uv run --locked ruff format --check .\",\"expected\":\"all files already formatted\",\"argv\":[UV,\"run\",\"--locked\",\"ruff\",\"format\",\"--check\",\".\"],\n  \"cwd\":W,\"expected_text\":\"already formatted\"},\n {\"kind\":\"example\",\"claim\":\"Documented type check passes\",\"source\":\"README.md\",\n  \"input\":\"uv run --locked mypy\",\"expected\":\"no type issues\",\"argv\":[UV,\"run\",\"--locked\",\"mypy\"],\n  \"cwd\":W,\"expected_text\":\"Success: no issues found\"},\n {\"kind\":\"example\",\"claim\":\"Live GitHub smoke run is explicit and not part of CI\",\"source\":\"docs/SMOKE.md\",\n  \"reason\":\"deferred: scripts/smoke.py makes live public GitHub searches (quota-limited, unauthenticated 2 variants/min budget) and the script says it is never part of CI; not run to avoid consuming shared rate limit. Fixture tests above cover the code paths offline.\",\"deferred\":True},\n]\njson.dump(ex,open('.coldpass/examples.json','w',encoding='utf-8'),indent=1)\njson.dump({\"detected\":False,\"reason\":\"Entry points inspected: src/search_first/server.py (argparse CLI for an MCP server over stdio or streamable-http, no scheduler, loop or --once/--now flag), and README grep for cron/schedule/webhook/loop found no product scheduler; the server only answers MCP tool calls. ranking.py 'schedule/cron' hits are keyword matching of discovered repositories, not product behavior.\",\"checks\":[]},open('.coldpass/cycles.json','w',encoding='utf-8'),indent=1)\nprint('ok')\nEOF\nCOLDPASS_WORKSPACE=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo rc=$?; python3 -I -c '\ns=open(\"<guest-path>\").read(); print(len(s)); print(s[:700]); print(\"....\"); print(s[-900:])'",
    "cd <guest-path> && python3 -I - <<'EOF'\nimport re\ns=open('<guest-path>').read()\nfor m in re.finditer(r'\"verdict\": \"(\\w+)\", \"outcome\": \"([^\"]{0,90})', s): print(m.group(1), '|', m.group(2))\nEOF\npython3 -I - <<'EOF'\nimport json\nr={\"outcome\":\"working\",\"fault_owner\":None,\n\"operation\":\"Run the search-first MCP server over stdio and call its search_existing, inspect_repo and compare_candidates tools against live public GitHub data (unauthenticated).\",\n\"operation_scope\":\"Linux x86_64 guest, Python 3.12 via uv (README uvx route), no GitHub token (unauthenticated: 2 search variants per call, shared-IP quota). Search verdicts may be inconclusive due to quota or thresholds. Scheduling: none in product.\",\n\"steps\":[\n \"curl -LsSf https://astral.sh/uv/install.sh | sh\",\n \"git init; git remote add origin https://github.com/TayHCode/search-first; git fetch --depth 1 origin 2b7c5fd54b96bdd2a736eb2ae25db35d2cb71d7d; git reset --mixed FETCH_HEAD\",\n \"uvx --python 3.12 --from . search-first --help\",\n \"uv sync --locked --extra dev\",\n \"uv run --locked pytest -q\",\n \"uv run --locked ruff check .\",\n \"uv run --locked ruff format --check .\",\n \"uv run --locked mypy\",\n \"uvx --python 3.12 --from . search-first (stdio MCP server, driven by the checker's MCP client)\",\n \"uv run --locked python -m build (in a copy of the checkout)\"],\n\"deviations\":[\n \"Initial `python -m build` failed: 'The virtual environment was not created successfully because ensurepip is not available ... apt install python3.12-venv'. Installed it with `sudo -n apt-get update && sudo -n apt-get install -y python3.12-venv`, then build succeeded (search_first_mcp-0.1.0 wheel and sdist). Build was run in a copy (<guest-path>) to keep the checkout clean.\",\n \"uv installed to <guest-path> via the README's official installer; the PATH note was ignored, absolute paths were used in argv.\",\n \"The uvx argv in probe/claims uses the absolute path <guest-path>\",\n \"The first replay failed only because probe.json lacked expected_text; added expected_text 'maverick-360/vaultab' from the real tool output. No product code changed.\",\n \"The README's local HTTP transport (--transport streamable-http) was not separately exercised by the checker; the stdio path was used for the operation. The fixture test suite (test_mcp.py) covers the MCP server.\",\n \"scripts/smoke.py (live GitHub smoke) deferred: it makes live public searches against shared unauthenticated quota and is documented as not part of CI.\",\n \"Ruff/mypy/pytest reported no issues. No GitHub token was obtained or used.\"],\n\"stuck_step\":None,\"main_blocker\":None,\"plain_failure\":None,\n\"suggested_fix\":\"None required for this run. Optional: set GITHUB_TOKEN for complete searches (the README recommends it for regular use); unauthenticated searches can return inconclusive verdicts when quota is shared.\"}\nimport json\njson.dump(r,open('<guest-path>','w',encoding='utf-8'),indent=1,ensure_ascii=False)\nprint('written')\nEOF",
    "cd <guest-path> && COLDPASS_WORKSPACE=<guest-path> timeout 1500 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo rc=$?; python3 -I -c '\nimport json\ns=open(\"<guest-path>\").read()\nprint(s[:200]); print(\"valid\" , s.count(\"\\\"valid\\\": true\"), \"problems-empty\", \"\\\"problems\\\": []\" in s, \"FAIL\" in s)\n'; pgrep -af 'search-first' | grep -v pgrep || echo \"no server processes\"; ls -la .coldpass"
  ],
  "stuck_step": null,
  "error_excerpt": null,
  "what_it_did": "Run the search-first MCP server over stdio and call its search_existing, inspect_repo and compare_candidates tools against live public GitHub data (unauthenticated).",
  "suggested_fix": null,
  "tokens_in": 581417,
  "tokens_out": 16889,
  "cost_usd": 0.022820800000000002,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": true,
        "argv": [
          "<guest-path>",
          "--python",
          "3.12",
          "--from",
          ".",
          "search-first"
        ],
        "kind": "mcp",
        "serverInfo": {
          "name": "search-first",
          "version": "0.1.0"
        },
        "tools": [
          "search_existing",
          "inspect_repo",
          "compare_candidates"
        ],
        "tool_schema_bytes": 4129,
        "tool_result": {
          "content": [
            {
              "text": "{\n  \"verdict\": {\n    \"closest_match\": {\n      \"name\": \"maverick-360/vaultab\",\n      \"url\": \"https://github.com/maverick-360/vaultab\"\n    },\n    \"plausible_candidates\": 0,\n    \"adjacent_candidates\": 53,\n    \"recommendation\": \"inconclusive\",\n    \"reasoning\": \"Core overlap exists, but the reuse floor (25 stars, push within 365 days) or lexical plausibility threshold is unverified. Inspect their README and required behavior, then broaden queries before choosing to build. A low score does not establish that no reusable base exists.\",\n    \"provisional\": true,\n    \"search_complete\": true\n  },\n  \"warnings\": [],\n  \"candidates\": [\n    {\n      \"name\": \"maverick-360/vaultab\",\n      \"url\": \"https://github.com/maverick-360/vaultab\",\n      \"stars\": 5,\n      \"last_push\": \"2026-07-05T14:33:01Z\",\n      \"license\": \"MIT\",\n      \"relevance_score\": 0.858,\n      \"idea_term_coverage\": 1.0,\n      \"missing_key_terms\": [],\n      \"missing_constraints\": [],\n      \"why_it_matched\": \"Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 5 stars, push 108 days ago; returned by 2 query variant(s), best GitHub rank 1. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days.\"\n    },\n    {\n      \"name\": \"vladbulyukhin/tab-reaper\",\n      \"url\": \"https://github.com/vladbulyukhin/tab-reaper\",\n      \"stars\": 2,\n      \"last_push\": \"2026-09-06T19:31:45Z\",\n      \"license\": \"MPL-2.0\",\n      \"relevance_score\": 0.783,\n      \"idea_term_coverage\": 1.0,\n      \"missing_key_terms\": [],\n      \"missing_constraints\": [],\n      \"why_it_matched\": \"Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 2 stars, push 44 days ago; returned by 1 query variant(s), best GitHub rank 7. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days.\"\n    },\n    {\n      \"name\": \"danielmarquesads/tabflow\",\n      \"url\": \"https://github.com/danielmarquesads/tabflow\",\n      \"stars\": 4,\n      \"last_push\": \"2026-07-18T06:46:53Z\",\n      \"license\": \"MIT\",\n      \"relevance_score\": 0.777,\n      \"idea_term_coverage\": 1.0,\n      \"missing_key_terms\": [],\n      \"missing_constraints\": [],\n      \"why_it_matched\": \"Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 4 stars, push 95 days ago; returned by 1 query variant(s), best GitHub rank 27. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days.\"\n    },\n    {\n      \"name\": \"erag/tab-cleaner\",\n      \"url\": \"https://github.com/erag/tab-cleaner\",\n      \"stars\": 1,\n      \"last_push\": \"2026-09-04T03:16:05Z\",\n      \"license\": \"MIT\",\n      \"relevance_score\": 0.769,\n      \"idea_term_coverage\": 1.0,\n      \"missing_key_terms\": [],\n      \"missing_constraints\": [],\n      \"why_it_matched\": \"Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 1 stars, push 47 days ago; returned by 1 query variant(s), best GitHub rank 11. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days.\"\n    },\n    {\n      \"name\": \"GuyDev1/tab-minimalist\",\n      \"url\": \"https://github.com/GuyDev1/tab-minimalist\",\n      \"stars\": 1,\n      \"last_push\": \"2026-06-06T19:19:47Z\",\n      \"license\": \"MIT\",\n      \"relevance_score\": 0.767,\n      \"idea_term_coverage\": 1.0,\n      \"missing_key_terms\": [],\n      \"missing_constraints\": [],\n      \"why_it_matched\": \"Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 1 stars, push 136 days ago; returned by 1 query variant(s), best GitHub rank 14. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days.\"\n    },\n    {\n      \"name\": \"RealUnfazed/Chrome-TabTidy\",\n      \"url\": \"https://github.com/RealUnfazed/Chrome-TabTidy\",\n      \"stars\": 0,\n      \"last_push\": \"2026-09-28T10:41:29Z\",\n      \"license\": \"MIT\",\n      \"relevance_score\": 0.762,\n      \"idea_term_coverage\": 1.0,\n      \"missing_key_terms\": [],\n      \"missing_constraints\": [],\n      \"why_it_matched\": \"Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 0 stars, push 23 days ago; returned by 1 query variant(s), best GitHub rank 8. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days.\"\n    },\n    {\n      \"name\": \"mj407/tab-reaper\",\n      \"url\": \"https://github.com/mj407/tab-reaper\",\n      \"stars\": 0,\n      \"last_push\": \"2026-05-30T21:07:01Z\",\n      \"license\": \"MIT\",\n      \"relevance_score\": 0.759,\n      \"idea_term_coverage\": 1.0,\n      \"missing_key_terms\": [],\n      \"missing_constraints\": [],\n      \"why_it_matched\": \"Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 0 stars, push 143 days ago; returned by 1 query variant(s), best GitHub rank 10. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days.\"\n    },\n    {\n      \"name\": \"WahaajTauqir/tab-lean\",\n      \"url\": \"https://github.com/WahaajTauqir/tab-lean\",\n      \"stars\": 0,\n      \"last_push\": \"2026-08-24T08:20:15Z\",\n      \"license\": \"MIT\",\n      \"relevance_score\": 0.753,\n      \"idea_term_coverage\": 1.0,\n      \"missing_key_terms\": [],\n      \"missing_constraints\": [],\n      \"why_it_matched\": \"Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 0 stars, push 58 days ago; returned by 1 query variant(s), best GitHub rank 16. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days.\"\n    }\n  ],\n  \"unique_candidates_evaluated\": 55,\n  \"errors\": [],\n  \"message\": null,\n  \"retry_after_seconds\": null,\n  \"coverage\": {\n    \"bounded\": true,\n    \"truncated\": true,\n    \"repositories_per_query\": 30,\n    \"queries_completed\": 2,\n    \"queries_failed\": 0,\n    \"queries_skipped\": 3,\n    \"query_budget\": 2,\n    \"bounded_plan_complete\": true,\n    \"results_skipped\": 47,\n    \"unretrieved_results\": null,\n    \"note\": \"Counts refer to deduplicated retrieved projects, not all of GitHub. Metadata-only lexical ranking; no candidate has been run or tested.\"\n  },\n  \"notes\": [\n    \"Unauthenticated mode: at most 2 search variants per call; set GITHUB_TOKEN for complete searches. Shared-IP quota still applies.\"\n  ]\n}",
              "type": "text"
            }
          ],
          "isError": false,
          "structuredContent": {
            "verdict": {
              "closest_match": {
                "name": "maverick-360/vaultab",
                "url": "https://github.com/maverick-360/vaultab"
              },
              "plausible_candidates": 0,
              "adjacent_candidates": 53,
              "recommendation": "inconclusive",
              "reasoning": "Core overlap exists, but the reuse floor (25 stars, push within 365 days) or lexical plausibility threshold is unverified. Inspect their README and required behavior, then broaden queries before choosing to build. A low score does not establish that no reusable base exists.",
              "provisional": true,
              "search_complete": true
            },
            "warnings": [],
            "candidates": [
              {
                "name": "maverick-360/vaultab",
                "url": "https://github.com/maverick-360/vaultab",
                "stars": 5,
                "last_push": "2026-07-05T14:33:01Z",
                "license": "MIT",
                "relevance_score": 0.858,
                "idea_term_coverage": 1.0,
                "missing_key_terms": [],
                "missing_constraints": [],
                "why_it_matched": "Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 5 stars, push 108 days ago; returned by 2 query variant(s), best GitHub rank 1. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days."
              },
              {
                "name": "vladbulyukhin/tab-reaper",
                "url": "https://github.com/vladbulyukhin/tab-reaper",
                "stars": 2,
                "last_push": "2026-09-06T19:31:45Z",
                "license": "MPL-2.0",
                "relevance_score": 0.783,
                "idea_term_coverage": 1.0,
                "missing_key_terms": [],
                "missing_constraints": [],
                "why_it_matched": "Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 2 stars, push 44 days ago; returned by 1 query variant(s), best GitHub rank 7. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days."
              },
              {
                "name": "danielmarquesads/tabflow",
                "url": "https://github.com/danielmarquesads/tabflow",
                "stars": 4,
                "last_push": "2026-07-18T06:46:53Z",
                "license": "MIT",
                "relevance_score": 0.777,
                "idea_term_coverage": 1.0,
                "missing_key_terms": [],
                "missing_constraints": [],
                "why_it_matched": "Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 4 stars, push 95 days ago; returned by 1 query variant(s), best GitHub rank 27. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days."
              },
              {
                "name": "erag/tab-cleaner",
                "url": "https://github.com/erag/tab-cleaner",
                "stars": 1,
                "last_push": "2026-09-04T03:16:05Z",
                "license": "MIT",
                "relevance_score": 0.769,
                "idea_term_coverage": 1.0,
                "missing_key_terms": [],
                "missing_constraints": [],
                "why_it_matched": "Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 1 stars, push 47 days ago; returned by 1 query variant(s), best GitHub rank 11. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days."
              },
              {
                "name": "GuyDev1/tab-minimalist",
                "url": "https://github.com/GuyDev1/tab-minimalist",
                "stars": 1,
                "last_push": "2026-06-06T19:19:47Z",
                "license": "MIT",
                "relevance_score": 0.767,
                "idea_term_coverage": 1.0,
                "missing_key_terms": [],
                "missing_constraints": [],
                "why_it_matched": "Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 1 stars, push 136 days ago; returned by 1 query variant(s), best GitHub rank 14. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days."
              },
              {
                "name": "RealUnfazed/Chrome-TabTidy",
                "url": "https://github.com/RealUnfazed/Chrome-TabTidy",
                "stars": 0,
                "last_push": "2026-09-28T10:41:29Z",
                "license": "MIT",
                "relevance_score": 0.762,
                "idea_term_coverage": 1.0,
                "missing_key_terms": [],
                "missing_constraints": [],
                "why_it_matched": "Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 0 stars, push 23 days ago; returned by 1 query variant(s), best GitHub rank 8. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days."
              },
              {
                "name": "mj407/tab-reaper",
                "url": "https://github.com/mj407/tab-reaper",
                "stars": 0,
                "last_push": "2026-05-30T21:07:01Z",
                "license": "MIT",
                "relevance_score": 0.759,
                "idea_term_coverage": 1.0,
                "missing_key_terms": [],
                "missing_constraints": [],
                "why_it_matched": "Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 0 stars, push 143 days ago; returned by 1 query variant(s), best GitHub rank 10. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days."
              },
              {
                "name": "WahaajTauqir/tab-lean",
                "url": "https://github.com/WahaajTauqir/tab-lean",
                "stars": 0,
                "last_push": "2026-08-24T08:20:15Z",
                "license": "MIT",
                "relevance_score": 0.753,
                "idea_term_coverage": 1.0,
                "missing_key_terms": [],
                "missing_constraints": [],
                "why_it_matched": "Strong core match; Core terms: 5/5 (browser, close, extension, idle, tab); 0 stars, push 58 days ago; returned by 1 query variant(s), best GitHub rank 16. Cautions: reuse floor unverified: needs at least 25 stars and a push within 365 days."
              }
            ],
            "unique_candidates_evaluated": 55,
            "errors": [],
            "message": null,
            "retry_after_seconds": null,
            "coverage": {
              "bounded": true,
              "truncated": true,
              "repositories_per_query": 30,
              "queries_completed": 2,
              "queries_failed": 0,
              "queries_skipped": 3,
              "query_budget": 2,
              "bounded_plan_complete": true,
              "results_skipped": 47,
              "unretrieved_results": null,
              "note": "Counts refer to deduplicated retrieved projects, not all of GitHub. Metadata-only lexical ranking; no candidate has been run or tested."
            },
            "notes": [
              "Unauthenticated mode: at most 2 search variants per call; set GITHUB_TOKEN for complete searches. Shared-IP quota still applies."
            ]
          }
        },
        "tool_result_checked": true,
        "scope": "product operation"
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 1 connection review, 2 known vulnerability.",
    "findings": [
      {
        "kind": "connection-review",
        "count": 1,
        "note": "Repository processes attempted these non-loopback connections; proxies can hide the final hostname.",
        "location_count": 2,
        "process_count": 4
      },
      {
        "kind": "known-vulnerability",
        "count": 2,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 1,
        "path": "certifi"
      }
    ],
    "context": [],
    "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."
    ],
    "static": {
      "dependency_note": "OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check."
    },
    "evidence_url": "/safety/?run=TayHCode--search-first-claude-haiku-5-5-1792608937366265731",
    "evidence_file": "/data/safety/TayHCode--search-first-claude-haiku-5-5-1792608937366265731.json.gz"
  },
  "agent_execution": "native_agent",
  "agent_runtime": "claude-code",
  "agent_runtime_version": "2.1.300 (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": "2b7c5fd54b96bdd2a736eb2ae25db35d2cb71d7d",
    "url": "https://github.com/TayHCode/search-first"
  },
  "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": "local",
  "needs": [],
  "needs_which": null,
  "agent_interface": [
    "mcp"
  ],
  "license": "MIT",
  "repo_url": "https://github.com/TayHCode/search-first",
  "cost_to_try": "free",
  "hardware": null,
  "what_failed": null,
  "local_or_hosted": "local",
  "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": "Entry points inspected: src/search_first/server.py (argparse CLI for an MCP server over stdio or streamable-http, no scheduler, loop or --once/--now flag), and README grep for cron/schedule/webhook/loop found no product scheduler; the server only answers MCP tool calls. ranking.py 'schedule/cron' hits are keyword matching of discovered repositories, not product behavior.",
      "evidence": "Entry points inspected: src/search_first/server.py (argparse CLI for an MCP server over stdio or streamable-http, no scheduler, loop or --once/--now flag), and README grep for cron/schedule/webhook/loop found no product scheduler; the server only answers MCP tool calls. ranking.py 'schedule/cron' hits are keyword matching of discovered repositories, not product behavior.",
      "command": ""
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "inspect_repo returns maintenance and reuse signals for a public repository",
      "source": "Accepts `owner/repo` or `https://github.com/owner/repo`.",
      "input": "{\"tool\": \"inspect_repo\", \"arguments\": {\"repo\": \"maverick-360/vaultab\"}}",
      "expected": "README inspection for the named repository",
      "command": "<guest-path> --python 3.12 --from . search-first tools/call {\"tool\": \"inspect_repo\", \"arguments\": {\"repo\": \"maverick-360/vaultab\"}}",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: maverick-360/vaultab",
      "evidence": "maverick-360/vaultab\\\",\\n  \\\"url\\\": \\\"https://github.com/maverick-360/vaultab\\\",\\n  \\\"description\\\": \\\"A Chrome extension that saves tabs into collections & folders, auto-closes idle tabs, locks sites from closing, and tracks time spent per website. Everything stays local.\\\",\\n  \\\"stars\\\": 5,\\n  \\\"forks\\\": 0,\\n  \\\"last_push\\\": \\\"2026-07-05T14:33:01Z\\\",\\n  \\\"archived\\\": false,\\n  \\\"license\\\": \\\"MIT\\\",\\n  \\\"license_name\\\": \\\"MIT License\\\",\\n  \\\"language\\\": \\\"JavaScript\\\",\\n  \\\"topics\\\": [\\n    \\\"auto-close\\\",\\n    \\\"browser-extension\\\",\\n    \\\"chrome-extension\\\",\\n    \\\"javascript\\\",\\n    \\\"mani",
      "source_checked": true,
      "source_file": "README.md"
    },
    {
      "kind": "claim",
      "claim": "compare_candidates compares repositories side by side for an idea",
      "source": "Returns named `columns` and side-by-side `rows`, one per unique repo (1\u20136 inputs),",
      "input": "{\"tool\": \"compare_candidates\", \"arguments\": {\"idea\": \"a Python library for rate limiting outgoing HTTP requests\", \"repos\": [\"vutran1710/PyrateLimiter\", \"bboe/extended_http_server\"], \"sort_by\": \"overall\"}}",
      "expected": "a comparison row naming the repository",
      "command": "<guest-path> --python 3.12 --from . search-first tools/call {\"tool\": \"compare_candidates\", \"arguments\": {\"idea\": \"a Python library for rate limiting outgoing HTTP requests\", \"repos\": [\"vutran1710/PyrateLimiter\", \"bboe/extended_http_server\"], \"sort_by\": \"overall\"}}",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: vutran1710/PyrateLimiter",
      "evidence": "vutran1710/PyrateLimiter\\\",\\n      \\\"url\\\": \\\"https://github.com/vutran1710/PyrateLimiter\\\",\\n      \\\"description\\\": \\\"\u2694\ufe0fPython Rate-Limiter using Leaky-Bucket Algorithm Family\\\",\\n      \\\"stars\\\": 529,\\n      \\\"forks\\\": 53,\\n      \\\"last_push\\\": \\\"2026-10-20T13:45:29Z\\\",\\n      \\\"archived\\\": false,\\n      \\\"license\\\": \\\"MIT\\\",\\n      \\\"license_name\\\": \\\"MIT License\\\",\\n      \\\"language\\\": \\\"Python\\\",\\n      \\\"topics\\\": [\\n        \\\"leaky-bucket\\\",\\n        \\\"python\\\",\\n        \\\"rate-limit\\\",\\n        \\\"rate-limiter\\\",\\n        \\\"rate-limiting\\\",\\n        \\\"request-rate-limit\\\"\\n      ],\\n   ",
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "Documented development test suite passes",
      "source": "README.md",
      "input": "uv run --locked pytest -q",
      "command": "<guest-path> run --locked pytest -q",
      "evidence": "........................................................................ [ 35%]\n........................................................................ [ 71%]\n.........................................................                [100%]\n201 passed in 5.92s",
      "deferred": false,
      "expected": "all tests pass",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "Documented lint check passes",
      "source": "README.md",
      "input": "uv run --locked ruff check .",
      "command": "<guest-path> run --locked ruff check .",
      "evidence": "All checks passed!",
      "deferred": false,
      "expected": "ruff reports no problems",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "Documented format check passes",
      "source": "README.md",
      "input": "uv run --locked ruff format --check .",
      "command": "<guest-path> run --locked ruff format --check .",
      "evidence": "29 files already formatted",
      "deferred": false,
      "expected": "all files already formatted",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "Documented type check passes",
      "source": "README.md",
      "input": "uv run --locked mypy",
      "command": "<guest-path> run --locked mypy",
      "evidence": "Success: no issues found in 7 source files",
      "deferred": false,
      "expected": "no type issues",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "Live GitHub smoke run is explicit and not part of CI",
      "source": "docs/SMOKE.md",
      "input": "",
      "command": "",
      "evidence": "deferred: scripts/smoke.py makes live public GitHub searches (quota-limited, unauthenticated 2 variants/min budget) and the script says it is never part of CI; not run to avoid consuming shared rate limit. Fixture tests above cover the code paths offline.",
      "deferred": true,
      "expected": "documented command completes successfully",
      "verdict": "deferred",
      "outcome": "deferred: scripts/smoke.py makes live public GitHub searches (quota-limited, unauthenticated 2 variants/min budget) and the script says it is never part of CI; not run to avoid consuming shared rate limit. Fixture tests above cover the code paths offline."
    }
  ],
  "does_what_it_says": "yes",
  "maintenance": {
    "archived": false,
    "commits_90d": 9,
    "last_commit_at": "2026-10-15T16:25:15Z",
    "last_release_at": null,
    "median_reply_hours": null,
    "merged_prs_90d": 2,
    "note": "actively maintained: last commit 6 days ago; 9 commits and 2 merged PRs in 90 days; 0 open issues, 0 open PRs; no releases",
    "open_issues": 0,
    "open_prs": 0,
    "reply_share": null,
    "reply_threads": 0,
    "verdict": "maintained"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 6 days ago; 9 commits and 2 merged PRs in 90 days; 0 open issues, 0 open PRs; no releases",
  "maintained": "active",
  "maintained_note": "last commit 6 days ago",
  "last_commit_at": "2026-10-15T16:44:45Z",
  "last_release_at": null,
  "open_issues": null,
  "answered_issues": null,
  "platforms_claimed": [
    "linux",
    "mac",
    "windows"
  ],
  "topic": "mcp-server",
  "agent_interfaces": [
    {
      "interface": "mcp",
      "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": {
    "tool_count": 3,
    "schema_bytes": 4129,
    "tokens_approx": 1033,
    "estimate_method": "ceil(compact UTF-8 tools/list JSON bytes / 4)",
    "scope": "returned tools/list page only; excludes client framing and tool results"
  },
  "tested_at": "2026-10-21T19:06:27.573138+00:00",
  "tested_commit": "2b7c5fd54b96bdd2a736eb2ae25db35d2cb71d7d",
  "tested_with": {
    "agent": "claude-code",
    "agent_version": "2.1.300 (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": "TayHCode/search-first",
    "source": "https://github.com/TayHCode/search-first",
    "commit": "2b7c5fd54b96bdd2a736eb2ae25db35d2cb71d7d",
    "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.300 (Claude Code)",
    "tool_transport": "mcp-assigned-vm",
    "runtime": null,
    "runtime_version": null,
    "runtime_revision": null,
    "sandbox_source": null,
    "guest_setup": null,
    "source_pin": {
      "commit": "2b7c5fd54b96bdd2a736eb2ae25db35d2cb71d7d",
      "url": "https://github.com/TayHCode/search-first"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": null,
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Run the search-first MCP server over stdio and call its search_existing, inspect_repo and compare_candidates tools against live public GitHub data (unauthenticated).",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "mcp",
    "test_version": "readme-46075cc0a15054283edf08e1dffafeab70fc0eb7363f730a3d9f58040b16649a",
    "evidence_version": null
  },
  "other_model": null,
  "other_run_id": null,
  "models_agree": null,
  "furthest_model": null,
  "transcript_url": "/transcripts/TayHCode--search-first-claude-haiku-5-5-1792608937366265731.txt",
  "report_url": "/reports/TayHCode--search-first-claude-haiku-5-5-1792608937366265731.json"
}
