{
  "checker": {
    "claims": [
      {
        "claim": "inspect_repo returns maintenance and reuse signals for a public repository",
        "command": "<guest-path> --python 3.12 --from . search-first tools/call {\"tool\": \"inspect_repo\", \"arguments\": {\"repo\": \"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",
        "expected": "README inspection for the named repository",
        "input": "{\"tool\": \"inspect_repo\", \"arguments\": {\"repo\": \"maverick-360/vaultab\"}}",
        "kind": "claim",
        "outcome": "Real input produced the expected result: maverick-360/vaultab",
        "source": "Accepts `owner/repo` or `https://github.com/owner/repo`.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "compare_candidates compares repositories side by side for an idea",
        "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\"}}",
        "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   ",
        "expected": "a comparison row naming the repository",
        "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\"}}",
        "kind": "claim",
        "outcome": "Real input produced the expected result: vutran1710/PyrateLimiter",
        "source": "Returns named `columns` and side-by-side `rows`, one per unique repo (1\u20136 inputs),",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "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.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "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.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "--python",
        "3.12",
        "--from",
        ".",
        "search-first"
      ],
      "kind": "mcp",
      "scope": "product operation",
      "serverInfo": {
        "name": "search-first",
        "version": "0.1.0"
      },
      "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": {
          "candidates": [
            {
              "idea_term_coverage": 1.0,
              "last_push": "2026-07-05T14:33:01Z",
              "license": "MIT",
              "missing_constraints": [],
              "missing_key_terms": [],
              "name": "maverick-360/vaultab",
              "relevance_score": 0.858,
              "stars": 5,
              "url": "https://github.com/maverick-360/vaultab",
              "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."
            },
            {
              "idea_term_coverage": 1.0,
              "last_push": "2026-09-06T19:31:45Z",
              "license": "MPL-2.0",
              "missing_constraints": [],
              "missing_key_terms": [],
              "name": "vladbulyukhin/tab-reaper",
              "relevance_score": 0.783,
              "stars": 2,
              "url": "https://github.com/vladbulyukhin/tab-reaper",
              "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."
            },
            {
              "idea_term_coverage": 1.0,
              "last_push": "2026-07-18T06:46:53Z",
              "license": "MIT",
              "missing_constraints": [],
              "missing_key_terms": [],
              "name": "danielmarquesads/tabflow",
              "relevance_score": 0.777,
              "stars": 4,
              "url": "https://github.com/danielmarquesads/tabflow",
              "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."
            },
            {
              "idea_term_coverage": 1.0,
              "last_push": "2026-09-04T03:16:05Z",
              "license": "MIT",
              "missing_constraints": [],
              "missing_key_terms": [],
              "name": "erag/tab-cleaner",
              "relevance_score": 0.769,
              "stars": 1,
              "url": "https://github.com/erag/tab-cleaner",
              "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."
            },
            {
              "idea_term_coverage": 1.0,
              "last_push": "2026-06-06T19:19:47Z",
              "license": "MIT",
              "missing_constraints": [],
              "missing_key_terms": [],
              "name": "GuyDev1/tab-minimalist",
              "relevance_score": 0.767,
              "stars": 1,
              "url": "https://github.com/GuyDev1/tab-minimalist",
              "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."
            },
            {
              "idea_term_coverage": 1.0,
              "last_push": "2026-09-28T10:41:29Z",
              "license": "MIT",
              "missing_constraints": [],
              "missing_key_terms": [],
              "name": "RealUnfazed/Chrome-TabTidy",
              "relevance_score": 0.762,
              "stars": 0,
              "url": "https://github.com/RealUnfazed/Chrome-TabTidy",
              "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."
            },
            {
              "idea_term_coverage": 1.0,
              "last_push": "2026-05-30T21:07:01Z",
              "license": "MIT",
              "missing_constraints": [],
              "missing_key_terms": [],
              "name": "mj407/tab-reaper",
              "relevance_score": 0.759,
              "stars": 0,
              "url": "https://github.com/mj407/tab-reaper",
              "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."
            },
            {
              "idea_term_coverage": 1.0,
              "last_push": "2026-08-24T08:20:15Z",
              "license": "MIT",
              "missing_constraints": [],
              "missing_key_terms": [],
              "name": "WahaajTauqir/tab-lean",
              "relevance_score": 0.753,
              "stars": 0,
              "url": "https://github.com/WahaajTauqir/tab-lean",
              "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."
            }
          ],
          "coverage": {
            "bounded": true,
            "bounded_plan_complete": true,
            "note": "Counts refer to deduplicated retrieved projects, not all of GitHub. Metadata-only lexical ranking; no candidate has been run or tested.",
            "queries_completed": 2,
            "queries_failed": 0,
            "queries_skipped": 3,
            "query_budget": 2,
            "repositories_per_query": 30,
            "results_skipped": 47,
            "truncated": true,
            "unretrieved_results": null
          },
          "errors": [],
          "message": null,
          "notes": [
            "Unauthenticated mode: at most 2 search variants per call; set GITHUB_TOKEN for complete searches. Shared-IP quota still applies."
          ],
          "retry_after_seconds": null,
          "unique_candidates_evaluated": 55,
          "verdict": {
            "adjacent_candidates": 53,
            "closest_match": {
              "name": "maverick-360/vaultab",
              "url": "https://github.com/maverick-360/vaultab"
            },
            "plausible_candidates": 0,
            "provisional": true,
            "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.",
            "recommendation": "inconclusive",
            "search_complete": true
          },
          "warnings": []
        }
      },
      "tool_result_checked": true,
      "tool_schema_bytes": 4129,
      "tools": [
        "search_existing",
        "inspect_repo",
        "compare_candidates"
      ],
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "Documented development test suite passes",
        "command": "<guest-path> run --locked pytest -q",
        "deferred": false,
        "evidence": "........................................................................ [ 35%]\n........................................................................ [ 71%]\n.........................................................                [100%]\n201 passed in 5.92s",
        "expected": "all tests pass",
        "input": "uv run --locked pytest -q",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Documented lint check passes",
        "command": "<guest-path> run --locked ruff check .",
        "deferred": false,
        "evidence": "All checks passed!",
        "expected": "ruff reports no problems",
        "input": "uv run --locked ruff check .",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Documented format check passes",
        "command": "<guest-path> run --locked ruff format --check .",
        "deferred": false,
        "evidence": "29 files already formatted",
        "expected": "all files already formatted",
        "input": "uv run --locked ruff format --check .",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Documented type check passes",
        "command": "<guest-path> run --locked mypy",
        "deferred": false,
        "evidence": "Success: no issues found in 7 source files",
        "expected": "no type issues",
        "input": "uv run --locked mypy",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Live GitHub smoke run is explicit and not part of CI",
        "command": "",
        "deferred": true,
        "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.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "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.",
        "source": "docs/SMOKE.md",
        "verdict": "deferred"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "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.",
    "uv installed to <guest-path> via the README's official installer; the PATH note was ignored, absolute paths were used in argv.",
    "The uvx argv in probe/claims uses the absolute path <guest-path>",
    "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.",
    "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.",
    "scripts/smoke.py (live GitHub smoke) deferred: it makes live public searches against shared unauthenticated quota and is documented as not part of CI.",
    "Ruff/mypy/pytest reported no issues. No GitHub token was obtained or used."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "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": "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.",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "curl -LsSf https://astral.sh/uv/install.sh | sh",
    "git init; git remote add origin https://github.com/TayHCode/search-first; git fetch --depth 1 origin 2b7c5fd54b96bdd2a736eb2ae25db35d2cb71d7d; git reset --mixed FETCH_HEAD",
    "uvx --python 3.12 --from . search-first --help",
    "uv sync --locked --extra dev",
    "uv run --locked pytest -q",
    "uv run --locked ruff check .",
    "uv run --locked ruff format --check .",
    "uv run --locked mypy",
    "uvx --python 3.12 --from . search-first (stdio MCP server, driven by the checker's MCP client)",
    "uv run --locked python -m build (in a copy of the checkout)"
  ],
  "stuck_step": null,
  "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."
}
