{
  "checker": {
    "claims": [
      {
        "claim": "--json gives machine-readable output for show",
        "command": "<guest-path> show 614 --json --no-image",
        "evidence": "\"title\": \"Woodpecker\",\n  \"safe_title\": \"Woodpecker\",\n  \"alt\": \"If you don't have an extension cord I can get that too.  Because we're friends!  Right?\",\n  \"img\": \"https://imgs.xkcd.com/comics/woodpecker.png\",\n  \"transcript\": \"[[A man with a beret and a woman are standing on a boardwalk, leaning on a handrail.]]\\nMan: A woodpecker!\\n<<Pop pop pop>>\\nWoman: Yup.\\n\\n[[The woodpecker is banging its head against a tree.]]\\nWoman: He hatched about this time last year.\\n<<Pop pop pop pop>>\\n\\n[[The woman walks away.  The man is still standing at the handrail.]]\\n\\nMan: ... woodpecker?\\nMan: It's your",
        "expected": "JSON comic record with title Woodpecker",
        "input": "xkcd show 614 --json --no-image",
        "kind": "claim",
        "outcome": "Real input produced the expected result: \"title\": \"Woodpecker\"",
        "returncode": 0,
        "source": "Add `--json` to `show`, `latest`, `random`, `search` or `explain` for",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "explain prints the explanation as plain text",
        "command": "<guest-path> explain 614",
        "evidence": "Beret Guy observes a woodpecker. A woodpecker is a type of bird known for using \nits bill to bore holes into trees to get access to and eat the insects living \ninside. Megan notes that the bird hatched approximately a year ago. Beret Guy \nseems touched by this fact, and attempts to explain to the woodpecker that it is\nthe woodpecker's birthday.\n\nBeret Guy leaves a present by the foot of the tree where the woodpecker is \nnesting. The woodpecker opens the present which turns out to be a power drill, a\nmechanical tool that is used to bore holes into wood, much quicker than a bird \nnormally could.",
        "expected": "plain explanation text for comic 614",
        "input": "xkcd explain 614",
        "kind": "claim",
        "outcome": "Real input produced the expected result: Beret Guy observes a woodpecker",
        "returncode": 0,
        "source": "# just the explanation, as plain text",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected: src/xkcdkit/cli.py and tui.py are one-shot Typer commands or an interactive Textual browser started by the user; README documents no cron, --once, --now or webhook scheduling. The only sleep in src is the rate limiter in client.py (asyncio.sleep before explainxkcd requests), which is not a product cycle.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected: src/xkcdkit/cli.py and tui.py are one-shot Typer commands or an interactive Textual browser started by the user; README documents no cron, --once, --now or webhook scheduling. The only sleep in src is the rate limiter in client.py (asyncio.sleep before explainxkcd requests), which is not a product cycle.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "show",
        "614",
        "--json",
        "--no-image"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "",
      "stdout": "{\n  \"num\": 614,\n  \"title\": \"Woodpecker\",\n  \"safe_title\": \"Woodpecker\",\n  \"alt\": \"If you don't have an extension cord I can get that too.  Because we're friends!  Right?\",\n  \"img\": \"https://imgs.xkcd.com/comics/woodpecker.png\",\n  \"transcript\": \"[[A man with a beret and a woman are standing on a boardwalk, leaning on a handrail.]]\\nMan: A woodpecker!\\n<<Pop pop pop>>\\nWoman: Yup.\\n\\n[[The woodpecker is banging its head against a tree.]]\\nWoman: He hatched about this time last year.\\n<<Pop pop pop pop>>\\n\\n[[The woman walks away.  The man is still standing at the handrail.]]\\n\\nMan: ... woodpecker?\\nMan: It's your birthday!\\n\\nMan: Did you know?\\n\\nMan: Did... did nobody tell you?\\n\\n[[The man stands, looking.]]\\n\\n[[The man walks away.]]\\n\\n[[There is a tree.]]\\n\\n[[The man approaches the tree with a present in a box, tied up with ribbon.]]\\n\\n[[The man sets the present down at the base of the tree and looks up.]]\\n\\n[[The man walks away.]]\\n\\n[[The present is sitting at the bottom of the tree.]]\\n\\n[[The woodpecker looks down at the present.]]\\n\\n[[The woodpecker sits on the present.]]\\n\\n[[The woodpecker pulls on the ribbon tying the present closed.]]\\n\\n((full width panel))\\n[[The\n[excerpt truncated]",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "search over cached data with JSON output",
        "command": "<guest-path> search woodpecker --json",
        "deferred": false,
        "evidence": "cker flies away, with clouds at the left and right of the panel, holding onto the cord of a power drill.]\\n\\n==Trivia==\\nThis comic used to be [https://web.archive.org/web/20211215150653/https://store.xkcd.com/products/woodpecker available as a T-shirt] in the xkcd store before it was [[Store|shut down]].\\n\\n{{comic discussion}}\\n\\n[[Category:Comics featuring Megan]]\\n[[Category:Comics featuring Beret Guy]]\\n[[Category:Comics with xkcd store products]]\\n[[Category:Animals]]\",\n    \"explanation_revid\": 216714,\n    \"explanation_missing\": false,\n    \"synced_at\": \"2026-10-27T20:23:30.735898Z\"\n  }\n]",
        "expected": "JSON list including comic 614",
        "input": "search woodpecker --json",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Command line section",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Installed from the local snapshot with uv tool install <path> instead of PyPI xkcdkit, so the tested code is the pinned source.",
    "Preflight path /inputs/coldpass-preflight.py does not exist in this guest; ran <guest-path> with the same flags instead.",
    "Workspace is not a git repository; no git metadata was needed for uv sync or the build.",
    "Used XKCDKIT_DB=/tmp/xkcd-data/xkcd.sqlite3 for all probes so replay reads the same cache.",
    "Cycle detection: no product scheduler or loop found, so detected=false."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Fetch and print xkcd comic 614 (plus its explanation and search) from the local xkcdkit CLI, with JSON output, backed by the local SQLite cache",
  "operation_scope": "Linux guest, Python 3.12.3 (README requires >=3.12), uv 0.13.5, outbound network to xkcd.com and explainxkcd.com; CLI and library from the pinned snapshot; TUI not exercised",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "uv sync --all-groups",
    "uv run pytest (124 passed)",
    "uv tool install --force <guest-path> (local-source equivalent of 'uv tool install xkcdkit')",
    "XKCDKIT_DB=/tmp/xkcd-data/xkcd.sqlite3 xkcd show 614 --no-image --json",
    "xkcd explain 614",
    "xkcd search woodpecker --json",
    "python3 -I <guest-path> --validate --replay"
  ],
  "stuck_step": null,
  "suggested_fix": null
}
