{
  "run_id": "Anil-matcha--AI-Youtube-Shorts-Generator-claude-haiku-5-5-1792789641493602959",
  "checker": {
    "claims": [
      {
        "claim": "Local mode accepts a direct filesystem path and skips YouTube",
        "command": "",
        "evidence": "Needs OPENAI_API_KEY or GEMINI_API_KEY for the highlight-ranking step, which this guest does not have. The path was accepted and local transcription ran on <guest-path> (1 segment, 8s), then the run stopped with 'OPENAI_API_KEY is not set'.",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "Needs OPENAI_API_KEY or GEMINI_API_KEY for the highlight-ranking step, which this guest does not have. The path was accepted and local transcription ran on <guest-path> (1 segment, 8s), then the run stopped with 'OPENAI_API_KEY is not set'.",
        "source": "In `--mode local`, you can pass a `file://` URL or a direct filesystem path and skip YouTube entirely",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      },
      {
        "claim": "API mode needs a MuAPI key",
        "command": "",
        "evidence": "Needs MUAPI_API_KEY, which this guest does not have. Ran the documented API-mode command without a key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Recorded as the credentials_error check in probe.json.",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "Needs MUAPI_API_KEY, which this guest does not have. Ran the documented API-mode command without a key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Recorded as the credentials_error check in probe.json.",
        "source": "For **API mode (default)**: a MuAPI key",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      },
      {
        "claim": "Local mode writes shorts and transcript cache to LOCAL_OUTPUT_DIR",
        "command": "",
        "evidence": "Needs an OpenAI or Gemini key before shorts are rendered. The transcript cache step did run: <guest-path> was written (verified contents) before the missing-key stop.",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "Needs an OpenAI or Gemini key before shorts are rendered. The transcript cache step did run: <guest-path> was written (verified contents) before the missing-key stop.",
        "source": "Local transcription is cached as an `.srt` file in `LOCAL_OUTPUT_DIR` using the",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected: main.py is a one-shot argparse CLI (single run per invocation, exits). README has no cron, scheduling, loop, webhook, --once or --now. The only while-loop in source is a frame loop in shorts_generator/local/clipper.py and polling sleeps in muapi.py, which are not product cycles.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected: main.py is a one-shot argparse CLI (single run per invocation, exits). README has no cron, scheduling, loop, webhook, --once or --now. The only while-loop in source is a frame loop in shorts_generator/local/clipper.py and polling sleeps in muapi.py, which are not product cycles.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "checks": [
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "<guest-path>",
              "main.py",
              "https://www.youtube.com/watch?v=8Ua5lRiePFg",
              "--num-clips",
              "1"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": true,
            "returncode": 1,
            "scope": "partial: missing credentials",
            "stderr": "\nFAILED: MUAPI_API_KEY is not set. Add it to your .env file or export it as an env var.",
            "stdout": "[download] requesting https://www.youtube.com/watch?v=8Ua5lRiePFg @ 720p",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        },
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "<guest-path>",
              "main.py",
              "<guest-path>",
              "--mode",
              "local",
              "--num-clips",
              "1"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": true,
            "returncode": 1,
            "scope": "partial: missing credentials",
            "stderr": "\nFAILED: OPENAI_API_KEY is not set. Local mode needs an OpenAI key for highlight ranking. Add it to your .env or export it, or switch back to --mode api.",
            "stdout": "[download/local] using local file: <guest-path>\n[transcribe/local] reusing cached transcript: <guest-path>\n[transcribe/local] 1 cached segments, 7s of audio\n[highlights] content=other density=medium duration=7s",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "evidence_strength": "nothing_checked",
    "example_checks": [
      {
        "claim": "Single video, API mode quickstart",
        "command": "",
        "deferred": false,
        "evidence": "Needs MUAPI_API_KEY, which is not available in this guest. Ran the documented command with no key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Covered by the credentials_error check in probe.json.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Needs MUAPI_API_KEY, which is not available in this guest. Ran the documented command with no key; it stopped with 'MUAPI_API_KEY is not set' (exit 1). Covered by the credentials_error check in probe.json.",
        "source": "README.md Usage / Single video (API mode \u2014 default)",
        "verdict": "blocked"
      },
      {
        "claim": "Single video, local mode quickstart",
        "command": "",
        "deferred": false,
        "evidence": "Needs OPENAI_API_KEY or GEMINI_API_KEY for highlight ranking, which is not available. A YouTube URL was not used because only a local file was reachable without a key. Local file transcription ran to completion and wrote a cache .srt before stopping at the missing OPENAI_API_KEY.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Needs OPENAI_API_KEY or GEMINI_API_KEY for highlight ranking, which is not available. A YouTube URL was not used because only a local file was reachable without a key. Local file transcription ran to completion and wrote a cache .srt before stopping at the missing OPENAI_API_KEY.",
        "source": "README.md Usage / Single video (Local mode)",
        "verdict": "blocked"
      },
      {
        "claim": "Batch processing with xargs",
        "command": "",
        "deferred": false,
        "evidence": "Each line runs main.py, which needs a MuAPI key (API mode) or an OpenAI/Gemini key (local mode). Not runnable without credentials; the single-run paths above stop at the same missing-key checks.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Each line runs main.py, which needs a MuAPI key (API mode) or an OpenAI/Gemini key (local mode). Not runnable without credentials; the single-run paths above stop at the same missing-key checks.",
        "source": "README.md Usage / Batch processing",
        "verdict": "blocked"
      }
    ],
    "status": "PASS"
  },
  "diagnosis": null
}
