{
  "run_id": "jkudish--jev-mcp-claude-haiku-5-5-1792844381637487745",
  "checker": {
    "claims": [
      {
        "claim": "Unit tests run without an API key",
        "command": "",
        "evidence": "The only offline test command (npm test, 292 unit tests) is a test suite, not a product operation, so it cannot verify a product claim. It is run as a README example in examples.json instead.",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "The only offline test command (npm test, 292 unit tests) is a test suite, not a product operation, so it cannot verify a product claim. It is run as a README example in examples.json instead.",
        "source": "# unit tests, no API key needed",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      },
      {
        "claim": "Live judgments need a provider API key",
        "command": "",
        "evidence": "No TYPESAFE_API_KEY, OPENROUTER_API_KEY or Cloudflare/AI gateway credential is available in the guest, and credentials were not sought. The jev_noul call returns the missing-key error instead (see probe credentials_error).",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "No TYPESAFE_API_KEY, OPENROUTER_API_KEY or Cloudflare/AI gateway credential is available in the guest, and credentials were not sought. The jev_noul call returns the missing-key error instead (see probe credentials_error).",
        "source": "Requires Node.js 22 or newer and an API key for a Jev provider",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      },
      {
        "claim": "HTTP server serves MCP at /mcp with a health check at /health",
        "command": "",
        "evidence": "Only the /health start check was exercised (see probe). A tool call on /mcp needs a provider key, so the judgment result cannot be verified.",
        "expected": "",
        "input": "",
        "kind": "claim",
        "outcome": "Only the /health start check was exercised (see probe). A tool call on /mcp needs a provider key, so the judgment result cannot be verified.",
        "source": "It listens on `PORT` (default `8080`) and serves MCP at `/mcp`, with a health check at `/health`.",
        "source_checked": true,
        "source_file": "README.md",
        "verdict": "blocked"
      }
    ],
    "cycle_checks": [
      {
        "claim": "Scheduled or looping main behavior",
        "command": "",
        "evidence": "Inspected README.md and package.json entry points (bin dist/index.js, src/index.ts, src/http.ts). The server is an on-demand stdio or stateless HTTP MCP server: it starts on a client request and handles tool calls; there is no cron, loop, --once/--now flag, scheduler or webhook trigger in the README or source. The only background behavior is the HTTP listener, which was verified by a start check instead.",
        "expected": "identify the product trigger",
        "input": "source inspection",
        "kind": "cycle",
        "outcome": "Inspected README.md and package.json entry points (bin dist/index.js, src/index.ts, src/http.ts). The server is an on-demand stdio or stateless HTTP MCP server: it starts on a client request and handles tool calls; there is no cron, loop, --once/--now flag, scheduler or webhook trigger in the README or source. The only background behavior is the HTTP listener, which was verified by a start check instead.",
        "source": "repository entry points",
        "verdict": "yes"
      }
    ],
    "details": {
      "checks": [
        {
          "check": "list_tools",
          "details": {
            "argv": [
              "node",
              "dist/index.js",
              "--http"
            ],
            "hosting": "local",
            "kind": "mcp_http",
            "protocolVersion": "2025-06-18",
            "scope": "remote hosted MCP initialize + tools/list",
            "serverInfo": {
              "name": "jev-mcp",
              "version": "0.14.5"
            },
            "tool_result_checked": false,
            "tool_schema_bytes": 24135,
            "tools": [
              "jev_verify",
              "jev_screen",
              "jev_noul",
              "jev_find",
              "jev_classify",
              "jev_decide",
              "jev_rerank",
              "jev_compare",
              "jev_extract",
              "jev_audit",
              "jev_review",
              "jev_gate"
            ],
            "transport": "streamable-http",
            "url": "http://127.0.0.1:8080/mcp",
            "working": false
          },
          "optional": false,
          "status": "PASS"
        },
        {
          "check": "list_tools",
          "details": {
            "argv": [
              "node",
              "dist/index.js"
            ],
            "kind": "mcp",
            "scope": "partial: list_tools",
            "serverInfo": {
              "name": "jev-mcp",
              "version": "0.14.5"
            },
            "tool_result_checked": false,
            "tool_schema_bytes": 24135,
            "tools": [
              "jev_verify",
              "jev_screen",
              "jev_noul",
              "jev_find",
              "jev_classify",
              "jev_decide",
              "jev_rerank",
              "jev_compare",
              "jev_extract",
              "jev_audit",
              "jev_review",
              "jev_gate"
            ],
            "working": false
          },
          "optional": false,
          "status": "PASS"
        },
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "node",
              "dist/index.js"
            ],
            "credentials_error": "MCP tool reported missing credentials: {\"content\": [{\"type\": \"text\", \"text\": \"No TYPESAFE_API_KEY, OPENROUTER_API_KEY (sk-or-), Cloudflare token (CLOUDFLARE_API_TOKEN or JEV_CLOUDFLARE_API_TOKEN) + CLOUDFLARE_ACCOUNT_ID, or AI_GATEWAY_API_KEY found. Set one, or JEV_PROVIDER to choose explicitly.\"}], \"isError\": true}",
            "kind": "mcp",
            "needs_credentials": true,
            "serverInfo": {
              "name": "jev-mcp",
              "version": "0.14.5"
            },
            "tool_result": {
              "content": [
                {
                  "text": "No TYPESAFE_API_KEY, OPENROUTER_API_KEY (sk-or-), Cloudflare token (CLOUDFLARE_API_TOKEN or JEV_CLOUDFLARE_API_TOKEN) + CLOUDFLARE_ACCOUNT_ID, or AI_GATEWAY_API_KEY found. Set one, or JEV_PROVIDER to choose explicitly.",
                  "type": "text"
                }
              ],
              "isError": true
            },
            "tool_schema_bytes": 24135,
            "tools": [
              "jev_verify",
              "jev_screen",
              "jev_noul",
              "jev_find",
              "jev_classify",
              "jev_decide",
              "jev_rerank",
              "jev_compare",
              "jev_extract",
              "jev_audit",
              "jev_review",
              "jev_gate"
            ],
            "working": false
          },
          "optional": false,
          "status": "PASS"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "evidence_strength": "partly_checked",
    "example_checks": [
      {
        "claim": "Build the TypeScript server as documented",
        "command": "npm run build",
        "deferred": false,
        "evidence": "> @jkudish/jev-mcp@0.14.5 build\n> tsc",
        "expected": "tsc compiles to dist/ without errors",
        "input": "npm run build",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Development section",
        "verdict": "yes"
      },
      {
        "claim": "Run documented offline unit tests",
        "command": "npm test",
        "deferred": false,
        "evidence": "hing echoed\n  ---\n  duration_ms: 51.602503\n  type: 'test'\n  ...\n# Subtest: runRegex settles immediately with an error when the request is already aborted\nok 291 - runRegex settles immediately with an error when the request is already aborted\n  ---\n  duration_ms: 0.950265\n  type: 'test'\n  ...\n# Subtest: runRegex terminates its worker when the signal aborts mid-run\nok 292 - runRegex terminates its worker when the signal aborts mid-run\n  ---\n  duration_ms: 25.51719\n  type: 'test'\n  ...\n1..292\n# tests 292\n# suites 0\n# pass 292\n# fail 0\n# cancelled 0\n# skipped 0\n# todo 0\n# duration_ms 139134.002911",
        "expected": "292 unit tests pass with no API key",
        "input": "npm test",
        "kind": "example",
        "outcome": "command completed successfully",
        "returncode": 0,
        "source": "README.md Development section",
        "verdict": "yes"
      }
    ],
    "status": "PASS"
  },
  "diagnosis": null
}
