{
  "checker": {
    "claims": [
      {
        "claim": "Media tab searches the library",
        "command": "<guest-path> tools/search-media.mjs --media workspaces/Shared/Library/inputs/media --query 'sci-fi whoosh' --type audio --keywords-only --limit 3",
        "evidence": "00012_fast-sci-fi-metallic-whoosh-sting.mp3\n        A fast sci-fi digital whoosh sound effect featuring a quick pitch-rising sweep followed by\u2026\n  00005  [audio/?]  00005_sci-fi-digital-ui-transition-sound.mp3\n        Sound: Fast digital UI sound featuring a high-pitched synth laser chirp, swift whoosh, and\u2026\n",
        "expected": "returns the sci-fi whoosh sound effect from the shared library catalog",
        "input": "sci-fi whoosh, audio only, keywords",
        "kind": "claim",
        "outcome": "Real input produced the expected result: 00012_fast-sci-fi-metallic-whoosh-sting.mp3",
        "returncode": 0,
        "source": "**Media** (search the library)",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Entry points inspected: README.md, tools/setup.sh, tools/*.mjs, studio/dev.mjs and studio/app (grep for cron, setInterval, --once, --now, webhook, schedule). The only timers are SSE heartbeat intervals (keep-alive pings in studio/app/api/[ws]/[brand]/watch and agent routes), which are not product cycles. The product runs on demand: the agent or the user runs a tool or opens the studio.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Entry points inspected: README.md, tools/setup.sh, tools/*.mjs, studio/dev.mjs and studio/app (grep for cron, setInterval, --once, --now, webhook, schedule). The only timers are SSE heartbeat intervals (keep-alive pings in studio/app/api/[ws]/[brand]/watch and agent routes), which are not product cycles. The product runs on demand: the agent or the user runs a tool or opens the studio.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "argv": [
        "<guest-path>",
        "studio/dev.mjs"
      ],
      "bytes": 20513,
      "kind": "http",
      "response_checked": true,
      "response_excerpt": "00001_loud-vocal-scream-sound-effect.mp3\",\"type\":\"audio\",\"mime\":\"audio/mpeg\",\"bytes\":28890,\"duration\":1.7},\"source\":{\"kind\":\"upload\"},\"products\":[],\"people\":[],\"unknown_people\":[],\"text_in_media\":\"\",\"status\":\"cataloged\",\"analysis\":\"Sound: Loud, high-pitched vocal scream or screech with heavy distortion and chorus effects.\\n\\nSource: A human voice screaming, heavily processed with audio effects.\\n\\nShape: Sharp attack <email>, peaking instantly and sustaining before a quick <email>.\\n\\nMarks: Highlights a shock, jump scare, dramatic fail, or comedic reaction moment.\",\"analyzed_by\"",
      "scope": "product operation",
      "status": 200,
      "url": "http://127.0.0.1:4179/api/Shared/Library/media",
      "working": true
    },
    "evidence_strength": "readme_checked",
    "example_checks": [
      {
        "claim": "search a brand's media catalog from the command line (tools/ scripts, search-media --help)",
        "command": "<guest-path> tools/search-media.mjs --media workspaces/Shared/Library/inputs/media --query 'glass breaking' --keywords-only --limit 3",
        "deferred": false,
        "evidence": "1 result for \"glass breaking\" [keywords]:\n  00018  [audio/?]  00018_glass-breaking-shatter.mp3\n        A glass breaking: a sharp shatter right at the start (<email> s), then a short scat\u2026",
        "expected": "finds the glass breaking shatter sound effect in the shared library",
        "input": "--query glass breaking, keywords only, limit 3",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "tools/search-media.mjs (HELP text) and README.md How it's organized",
        "verdict": "yes"
      },
      {
        "claim": "check that a workspace's kie.ai key works before generating ads",
        "command": "",
        "deferred": false,
        "evidence": "Not tested: no kie.ai key is available in this guest, and the key is required for ad generation (images, video, voices, music). Only the key-free parts (studio and media search) were exercised.",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Not tested: no kie.ai key is available in this guest, and the key is required for ad generation (images, video, voices, music). Only the key-free parts (studio and media search) were exercised.",
        "source": "README.md How to set it up, step 3 (kie.ai key) and tools/check-keys.mjs HELP",
        "verdict": "blocked"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Did not run the curl | bash one-liner: the checkout is already the ADPK snapshot, so setup.sh was run from it (its documented 'inside ADPK' usage). Its get_kit step therefore did not clone, and no git init/fetch was needed.",
    "setup.sh tried 'git config core.hooksPath' which failed silently because the snapshot is not a git repository; no effect on the run.",
    "setup.sh added PATH lines to ~/.bashrc and ~/.profile (HOME is <guest-path>), as the script does by design.",
    "ffmpeg and whisper.cpp were not installed: setup.sh only installs them on macOS; on Linux the media tools say how to get them when first used. Not needed for the operations tested.",
    "The studio was started by hand once to verify it, then stopped before the checker ran its own copy.",
    "Keyword search for 'coin clink' returned 0 results although the index describes a coin clink; not investigated further.",
    "Could not run the kie.ai key check (tools/check-keys.mjs) or any generation step: no key available. Recorded as a blocked example, not as a product failure."
  ],
  "fault_owner": null,
  "main_blocker": null,
  "operation": "Install ADPK with the README's setup script, start the local studio web app, and search the shared media library.",
  "operation_scope": "Local, no kie.ai key. Covers the studio (http://127.0.0.1:4179) serving the media API and the keyword media search. Not tested: ad generation (images, video, voices, music), which needs a kie.ai API key that this guest does not have. Node 24.22.1 installed to <guest-path> (README requires Node 22.15+). Ubuntu 24.04, running as uid 1000 (no sudo needed since ffmpeg/whisper are not installed on Linux).",
  "outcome": "working",
  "plain_failure": null,
  "steps": [
    "bash tools/setup.sh (run inside the checkout; the README's 'inside ADPK' form of the curl | bash installer)",
    "node studio/dev.mjs (studio launcher, usage in its header; studio built and served on port 4179)",
    "curl http://127.0.0.1:4179/api/Shared/Library/media (returned catalog records, including 00001_loud-vocal-scream-sound-effect.mp3)",
    "node tools/search-media.mjs --media workspaces/Shared/Library/inputs/media --query \"sci-fi whoosh\" --type audio --keywords-only --limit 3 (returned 00012_fast-sci-fi-metallic-whoosh-sting.mp3)",
    "node tools/search-media.mjs --media workspaces/Shared/Library/inputs/media --query \"glass breaking\" --keywords-only --limit 3 (returned 00018_glass-breaking-shatter.mp3)"
  ],
  "stuck_step": null,
  "suggested_fix": "No fix needed for the tested operations. To test ad generation, add a kie.ai key to .env as <WS>_KIE_API_KEY and run node tools/check-keys.mjs <WS>."
}
