{
  "checker": {
    "claims": [
      {
        "claim": "The server lists chats, most recent first.",
        "command": "",
        "evidence": "The README local Durable Object starts with empty storage; listing requires a phone-linked account, which is unavailable in this guest.",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "The README local Durable Object starts with empty storage; listing requires a phone-linked account, which is unavailable in this guest.",
        "source": "| `list_chats` | Chats, most recent first. Filter by name or number. |",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Daily scheduled pull",
        "command": "",
        "evidence": "Cloudflare account deployment and linked WhatsApp credentials unavailable",
        "expected": "pull executes",
        "input": "none",
        "kind": "cycle",
        "method": "not triggered in guest; requires Cloudflare deployment and linked credentials",
        "outcome": "Cloudflare account deployment and linked WhatsApp credentials unavailable",
        "schedule": "Daily at 04:00 UTC",
        "source": "README.md",
        "verdict": "blocked"
      }
    ],
    "details": {
      "argv": [
        "npm",
        "run",
        "dev",
        "--",
        "--ip",
        "127.0.0.1"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "[33m\u25b2 [43;33m[[43;30mWARNING[43;33m][0m [1mScheduled Workers are not automatically triggered during local development.[0m\n\n  To manually trigger a scheduled event, run:\n    curl \"http://127.0.0.1:8787/cdn-cgi/local/scheduled\"\n  For more details, see [4mhttps://developers.cloudflare.com/workers/configuration/cron-triggers/#test-cron-triggers-locally[0m\n\n\n[33m\u25b2 [43;33m[[43;30mWARNING[43;33m][0m [1mCIMD (Client ID Metadata Document) is disabled: add '\"compatibility_flags\": [\"global_fetch_strictly_public\"]' to your wrangler.jsonc to enable. See: https://developers.cloudflare.com/workers/configuration/compatibility-flags/#global-fetch-strictly-public[0m\n\n",
      "stdout": "\n> whatsapp-mcp@0.0.1 dev\n> wrangler dev --ip 127.0.0.1\n\n\n \u26c5\ufe0f wrangler 4.151.1 (update available 4.152.0)\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nYour Worker has access to the following bindings:\nBinding                                          Resource            Mode\nenv.WA (WhatsAppStore)                           Durable Object      local\nenv.OAUTH_KV (REPLACE_WITH_KV_NAMESPACE_ID)      KV Namespace        local\n\n[excerpt truncated]",
      "working": false
    },
    "evidence_strength": "partly_checked",
    "example_checks": [
      {
        "claim": "Typecheck and store behavior tests",
        "command": "npm run typecheck",
        "deferred": false,
        "evidence": "> whatsapp-mcp@0.0.1 typecheck\n> tsc --noEmit",
        "expected": "Typecheck succeeds and all store tests pass.",
        "input": "npm run typecheck; npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md, Checking a change",
        "verdict": "yes"
      },
      {
        "claim": "Store behavior tests",
        "command": "npm test",
        "deferred": false,
        "evidence": " comes first\nok   last thing THEY said, not me\nok   unnamed count\nok   save reports saved and which have chats\nok   named chat leaves the unnamed list\nok   new name shows in chat list\nok   sender name used in messages\nok   empty name removes it\nok   group message sender resolves to custom name\nok   toJid(\"+972 52-421-9320\", undefined)\nok   toJid(\"052-421-9320\", 972)\nok   toJid(\"052-421-9320\", undefined)\nok   toJid(\"00972524219320\", undefined)\nok   toJid(\"524219320\", 972)\nok   toJid(\"<email>\", undefined)\nok   toJid(\"abc\", 972)\nok   toJid(\"+1 (818) 917-7834\", 972)\n\nall passed",
        "expected": "all passed",
        "input": "npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md, Checking a change",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Initial unprivileged NodeSource setup failed apt update with permission denied; reran using sudo successfully.",
    "MCP read calls and scheduled pull not exercised because the guest has no linked WhatsApp account or Cloudflare deployment."
  ],
  "fault_owner": "prerequisite",
  "main_blocker": "No linked WhatsApp account or deployment credentials.",
  "operation": "npm run dev local app and documented store checks",
  "operation_scope": "Node 22 installed; dependencies, typecheck and store tests verified. Local app replay needs server startup; actual WhatsApp read tools require a linked phone and Cloudflare deployment.",
  "outcome": "unverified",
  "plain_failure": "The local install and store checks pass, but this fresh guest has no linked phone messages to exercise the WhatsApp tools.",
  "steps": [
    "Installed Node.js 22.23.4 with NodeSource setup script and sudo apt install.",
    "npm install",
    "npm run typecheck",
    "npm test"
  ],
  "stuck_step": "Real message operation",
  "suggested_fix": "Deploy using the README steps, link a phone, then call list_chats and read a chat."
}
