{
  "checker": {
    "claims": [
      {
        "claim": "Build the project",
        "command": "npm run build",
        "evidence": "tsc && shx chmod +x dist/*.js\n\n",
        "expected": "TypeScript build completes",
        "input": "npm run build",
        "kind": "claim",
        "outcome": "Real input produced the expected result: tsc && shx chmod +x dist/*.js",
        "returncode": 0,
        "source": "# Build the project",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "yes"
      },
      {
        "claim": "Server needs QuickBooks authentication",
        "command": "",
        "evidence": "Calling QuickBooks tools needs QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID from an Intuit developer app and a browser OAuth handshake, which are not available in this guest",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "Calling QuickBooks tools needs QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID from an Intuit developer app and a browser OAuth handshake, which are not available in this guest",
        "source": "this is a local MCP server. It runs as a stdio subprocess",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected README.md and src/ entry points (src/index.ts stdio MCP server, src/auth-server.ts OAuth helper). No cron, scheduler, loop, webhook, --once or --now trigger exists; the server only responds to MCP requests over stdio. The one setTimeout in src/clients/quickbooks-client.ts is internal timing, not a product cycle.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected README.md and src/ entry points (src/index.ts stdio MCP server, src/auth-server.ts OAuth helper). No cron, scheduler, loop, webhook, --once or --now trigger exists; the server only responds to MCP requests over stdio. The one setTimeout in src/clients/quickbooks-client.ts is internal timing, not a product cycle.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "checks": [
        {
          "check": "install",
          "details": {
            "argv": [
              "npm",
              "install"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "scope": "partial: install",
            "stderr": "npm WARN EBADENGINE Unsupported engine {\nnpm WARN EBADENGINE   package: '@hono/node-server@2.1.0',\nnpm WARN EBADENGINE   required: { node: '>=20' },\nnpm WARN EBADENGINE   current: { node: 'v18.19.1', npm: '9.2.0' }\nnpm WARN EBADENGINE }",
            "stdout": "\n> @qboapi/qbo-mcp-server@0.0.1 prepare\n> npm run build\n\n\n> @qboapi/qbo-mcp-server@0.0.1 build\n> tsc && shx chmod +x dist/*.js\n\n\nup to date, audited 630 packages in 7s\n\n147 packages are looking for funding\n[excerpt truncated]",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        },
        {
          "check": "start",
          "details": {
            "argv": [
              "node",
              "dist/index.js"
            ],
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "scope": "partial: start",
            "stderr": "[auth-server] uncaughtException: Error: Client ID, Client Secret and Redirect URI must be set in environment variables\n    at file://<guest-path> (node:internal/modules/esm/module_job:195:25)\n    at async ModuleLoader.import (node:internal/modules/esm/loader:336:24)\n    at async loadESM (node:internal/process/esm_loader:34:7)\n    at async handleMainPromise (node:internal/modules/run_main:106:12)",
            "stdout": "",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "evidence_strength": "partly_checked",
    "example_checks": [
      {
        "claim": "Run the documented test suite",
        "command": "npm test",
        "deferred": false,
        "evidence": "st.ts:85:5)\n\nPASS tests/unit/handlers/invoice-pdf.handler.test.ts\nPASS tests/unit/handlers/invoice-template-fields.handlers.test.ts\nPASS tests/unit/handlers/budget.handlers.test.ts\nPASS tests/unit/handlers/account-reparent.handlers.test.ts\nPASS tests/unit/handlers/create-account.handlers.test.ts\nPASS tests/unit/handlers/invoice-linked-txn.handlers.test.ts\nPASS tests/unit/helpers/build-quickbooks-search-criteria.test.ts\nPASS tests/unit/helpers/format-error.test.ts\n\nTest Suites: 35 passed, 35 total\nTests:       639 passed, 639 total\nSnapshots:   0 total\nTime:        10.881 s\nRan all test suites.",
        "expected": "Jest reports all tests passing",
        "input": "npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Testing section",
        "verdict": "yes"
      },
      {
        "claim": "Run the MCP server from Claude Code configuration",
        "command": "",
        "deferred": false,
        "evidence": "Needs QuickBooks OAuth credentials (QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN, QUICKBOOKS_REALM_ID); not obtainable in this guest. Without them the server exits at startup with 'Client ID, Client Secret and Redirect URI must be set in environment variables' (observed).",
        "expected": "documented command completes successfully",
        "input": "",
        "kind": "example",
        "outcome": "Needs QuickBooks OAuth credentials (QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN, QUICKBOOKS_REALM_ID); not obtainable in this guest. Without them the server exits at startup with 'Client ID, Client Secret and Redirect URI must be set in environment variables' (observed).",
        "source": "README.md Claude Code Integration",
        "verdict": "blocked"
      }
    ],
    "status": "PASS"
  },
  "deviations": [
    "Node and npm were not preinstalled; installed Ubuntu apt nodejs 18.19.1 and npm 9.2.0 instead of a newer Node. npm install warned that a transitive dependency (@hono/node-server@2.1.0) requires node >=20; the build and tests still passed.",
    "README says the test suite has 396 tests; the actual npm test run reported 639 passed tests across 35 suites. Recorded as observed; not used as a claim.",
    "The probe for the MCP tool call is a credentials_error check in the task spec. The checker's credential pattern did not recognise the product's message ('Client ID, Client Secret and Redirect URI must be set'), so the observed startup failure was recorded as a 'start' partial check instead of a credentials_error check.",
    "No live MCP tools/call was made: it needs QuickBooks credentials that were not available.",
    "/inputs/coldpass-preflight.py does not exist in this guest; the validation was run with <guest-path> as given in the task preamble.",
    "The workspace has no .git metadata. No command needed git, so the git init/fetch pin step was not performed."
  ],
  "fault_owner": "prerequisite",
  "main_blocker": "Missing QuickBooks OAuth credentials. The server refuses to start without them, and the README says they come from an Intuit developer app and a one-time browser sign-in.",
  "operation": "Build and run the QuickBooks Online MCP server (stdio) and call a QuickBooks tool from the README Quick Start",
  "operation_scope": "Guest VM with Ubuntu 24.04, Python 3.12.3, Node 18.19.1 and npm 9.2.0 (installed via apt). Setup, build and the Jest suite ran fully. The live QuickBooks tool call could not run because no QuickBooks OAuth credentials (client ID, client secret, refresh token, realm ID) are available in this guest; obtaining them requires an Intuit developer app and a browser OAuth handshake, which is out of scope here.",
  "outcome": "unverified",
  "plain_failure": "The QuickBooks server installs, builds and passes its 639 tests, but it cannot be used against a real QuickBooks company here. It needs company login details (client ID, client secret and a refresh token from a one-time browser sign-in), and this test machine does not have them. Without them, the server stops immediately at startup.",
  "steps": [
    "sudo apt-get install -y nodejs npm (Node 18.19.1 / npm 9.2.0; README names no Node version)",
    "npm install (exit 0, 630 packages; EBADENGINE warning for @hono/node-server@2.1.0 which wants node >=20)",
    "npm run build (tsc succeeded, dist/ produced)",
    "npm test (35 suites, 639 tests passed)",
    "cp .env.example .env was NOT run: no credentials to put in it",
    "node dist/index.js with no QUICKBOOKS_* variables: exits with 'Client ID, Client Secret and Redirect URI must be set in environment variables'"
  ],
  "stuck_step": "Calling any QuickBooks MCP tool, because the server cannot start without QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN and QUICKBOOKS_REALM_ID.",
  "suggested_fix": "Provide a QuickBooks sandbox app's client ID, client secret, refresh token and realm ID (set in the MCP server's env block or in .env), then rerun the tool-call probe. Also update the README to name the Node version it needs (npm warns for node >=20) and correct the test count from 396 to the current number."
}
