{
  "checker": {
    "claims": [
      {
        "claim": "Keyword search reports how many open-access papers match before downloading",
        "command": "<guest-path> search 'burn scar'",
        "evidence": "\u2026open-access article(s) match 'burn scar'\n[pmcfetch] NCBI searched: (\"burns\"[MeSH Terms] OR \"burns\"[All Fields] OR \"burn\"[All Fields]) AND (\"cicatrix\"[MeSH Terms] OR \"cicatrix\"[All Fields] OR \"scar\"[All Fields]) AND \"open access\"[Filter]\n[pmcfetch] to download, rerun with --download N or --download all (saves to pdfs/)\n",
        "expected": "count line printed for the query",
        "input": "burn scar",
        "kind": "claim",
        "outcome": "Real input produced the expected result: open-access article(s) match 'burn scar'",
        "returncode": 0,
        "source": "# [pmcfetch] 20,349 open-access article(s) match 'burn scar'",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Downloads the PDFs listed in a corpus id file into an output directory",
        "command": "<guest-path> download --corpus <guest-path> --out <guest-path>",
        "evidence": "\u2026downloaded=1 skipped=0 failed=0 total=1\n",
        "expected": "one article downloaded, none failed",
        "input": "ids.txt with PMC10007932",
        "kind": "claim",
        "outcome": "Real input produced the expected result: downloaded=1 skipped=0 failed=0 total=1",
        "returncode": 0,
        "source": "pmcfetch download --corpus ids.txt --out pdfs/",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected README.md (no cron, schedule, daemon, webhook, --once or --now feature documented), pyproject.toml scripts (only pmcfetch.cli:main), and src/pmcfetch/cli.py. The only loop found is the interactive 'How many to download?' prompt in _ask_amount, which is user input retry, not a scheduled or repeating product cycle. The .github/workflows/publish.yml file is CI, not a product cycle.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected README.md (no cron, schedule, daemon, webhook, --once or --now feature documented), pyproject.toml scripts (only pmcfetch.cli:main), and src/pmcfetch/cli.py. The only loop found is the interactive 'How many to download?' prompt in _ask_amount, which is user input retry, not a scheduled or repeating product cycle. The .github/workflows/publish.yml file is CI, not a product cycle.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "download",
        "--corpus",
        "<guest-path>",
        "--out",
        "<guest-path>"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "",
      "stdout": "[pmcfetch] corpus=<guest-path> namespace=ALL n=1\n[1/1] ok   PMC10007932\n\n[pmcfetch] ALL: downloaded=1 skipped=0 failed=0 total=1",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "The documented test suite runs and passes",
        "command": "<guest-path> -m pytest tests/ -q",
        "deferred": false,
        "evidence": "........................................................................ [ 62%]\n...........................................                              [100%]",
        "expected": "all offline tests pass",
        "input": "python -m pytest tests/ -q",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Tests section (## Tests)",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Installed from the pinned local source with pip install <workspace path> rather than PyPI 'pip install pmcfetch', so the tested code matches the pin.",
    "pip install created build artifacts (src/pmcfetch.egg-info, __pycache__) inside the workspace; no product source was edited.",
    "Checker path: /inputs/coldpass-preflight.py does not exist in this VM, so <guest-path> was used with --validate --replay (valid=true, replay PASS).",
    "Tests were run with the README's 'python -m pytest tests/ -q' (venv python) because the pytest entrypoint was not separately documented.",
    "Replay of the search count depends on live NCBI results; claims match on the stable phrase, not the count.",
    "Cycles: none detected; the only loop is an interactive input prompt."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Install pmcfetch from the pinned source and run the README's keyword search and id-list download, producing a real PDF from PubMed Central's open-access S3 bucket.",
  "operation_scope": "Python 3.12.3 (README requires 3.10+) in a venv at <guest-path>; network access to NCBI E-utilities and the AWS S3 bucket pmc-oa-opendata; stdlib-only product. Source pinned at https://github.com/kms2229/pmcfetch @ 5a95f5979ffc2c521f8062a2cc6d0dc149546c12 (workspace supplied pre-populated; no git metadata was initialized).",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "python3 -m venv <guest-path>",
    "<guest-path> install <guest-path>  (README says 'pip install pmcfetch'; installed the pinned local source instead, which reported pmcfetch-0.2.1)",
    "<guest-path> --help",
    "<guest-path> search \"burn scar\"  (returned 20,349 open-access matches)",
    "printf PMC10007932 > ids.txt; <guest-path> download --corpus ids.txt --out pdfs/  (downloaded=1 failed=0; output is %PDF-1.4, 542332 bytes)",
    "<guest-path> -m pytest tests/ -q  (README ## Tests; 115 passed)"
  ],
  "stuck_step": null,
  "suggested_fix": "None required for the tested operations. Optional: the README's pip install pmcfetch line should be kept in sync with the published PyPI release."
}
