{
  "checker": {
    "details": {
      "argv": [
        "/opt/node22/bin/npm",
        "run",
        "mcp:demo"
      ],
      "kind": "cli",
      "needs_browser": false,
      "needs_credentials": false,
      "returncode": 0,
      "scope": "product operation",
      "stderr": "(node:1003) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.\n(Use `node --trace-warnings ...` to show where the warning was created)\n(node:1016) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.\n(Use `node --trace-warnings ...` to show where the warning was created)",
      "stdout": "\n> contacts@26.6.29 mcp:demo\n> node scripts/mcp-demo.js\n\n[1m\nContacts over MCP \u2014 a full session, no Puter required.[0m\n[2m3 contacts seeded in the fake cloud.\n[0m\n  [33m\u2190[0m ready [2m(notification)[0m\n[2mServer up for \"ai\". Tools offered: search_contacts, list_contacts, suggest_recipients, get_contact, create_contact, update_contact, delete_contact[0m\n[2m(That first \u2190 is the app-to-app protocol's greeting \u2014 an MCP client ignores it.)[0m\n\n[excerpt truncated]",
      "working": true
    },
    "status": "PASS"
  },
  "deviations": [
    "Node/npm not present in guest. Installed Node v22.23.3 to /opt/node22 (prerequisite). Also installed xz-utils (to unpack the tarball) and git (to build the patch).",
    "`npm run mcp:demo` failed at 'Add someone': create_contact returned 'Unknown tool' and the script threw TypeError reading created.result.structuredContent. Cause: scripts/mcp-demo.js starts the server as callerApp 'calendar', whose grant in src/api/protocol.js ALLOWED_CALLERS is READ_METHODS only. Fixed by changing the demo's callerApp to 'ai' (grant '*'), matching the README's 'assistant app can find, add and edit people' narrative. Changed 2 lines (callerApp and the 'Server up for' log string).",
    "`npm install` rewrote src/contacts/package-lock.json (dropped 'peer': true on 5 entries). Restored the pinned lockfile from the pinned commit; node_modules left installed.",
    "/workspace has no .git directory. Patch was produced by fetching fe402697 into /tmp/pin and applying the change there, then git add -N . and git diff --binary HEAD."
  ],
  "fault_owner": "repo",
  "fault_reason": "The demo's caller identity ('calendar', read-only by design) contradicts its write step (create_contact), so the README-documented mcp:demo crashes deterministically. Changing the demo caller to 'ai' (full grant, as the README describes for an assistant app) makes the documented session run to completion without touching product code or the grant.",
  "main_blocker": null,
  "observed": ".coldpass/observed.json",
  "operation": "Contacts MCP session via README command `npm run mcp:demo` (src/contacts): initialize, tools/list, search, suggest, create contact, vCard resource read, and tool/protocol error handling against the real server.",
  "operation_scope": "Offline demo: an in-memory Map stands in for puter.kv and a fake AppConnection replaces the Puter desktop launch. No Puter account, desktop, browser, or CDP endpoint was needed or used. Live Puter cloud features were not exercised.",
  "outcome": "working",
  "patch": ".coldpass/repo-fix.patch",
  "probe": ".coldpass/probe.json",
  "steps": [
    "Read README.md (root) and src/contacts/README.md",
    "Installed Node.js v22.23.3 to /opt/node22 from nodejs.org (README requires Node >= 22.12)",
    "cd src/contacts && npm install (exit 0; audit warnings only)",
    "npm run mcp:demo (after fix below) exit 0, printed 'Session complete'",
    "Probe re-run in a clean env: exit 0"
  ],
  "stuck_step": null,
  "suggested_fix": null
}
