{
 "tool": "eclipse-compass-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "0.1.0",
 "environment": "simulator",
 "qualifier": "simulator",
 "verdict": "CERTIFIED(simulator)",
 "checks": [
  {
   "id": "C1",
   "name": "unknown category is a named error, never a silent nearest-match",
   "verdict": "pass",
   "evidence": "an unknown core category is refused by name in both category_map and pro_search ('no Thumbtack category mapping ... never a silent nearest-match') \u2014 the adapter never guesses the closest category; a known mapping (house_cleaning -> tt-cat-house-cleaning) resolves explicitly"
  },
  {
   "id": "C2",
   "name": "LICENSE_FIELD blocked posture on undeclared brief",
   "verdict": "pass",
   "evidence": "for the licensed Plumbing category, a brief whose license_required is 'unknown' produces a LICENSE_FIELD diff marked BLOCKED and the variant's blocked flag is true \u2014 it cannot be approved; declaring the posture ('yes:plumbing contractor') clears the block while the LICENSE_FIELD diff still travels with the variant"
  },
  {
   "id": "C3",
   "name": "license claims verbatim; Compass does not vouch",
   "verdict": "pass",
   "evidence": "tt-pro-3's license claim reaches the tool output byte-identical to the fixture record ('CA C-36 Plumbing Contractor License #1044821 (platform profile states)') and its provenance block states surfaced=verbatim with verified_by_compass=false \u2014 Compass surfaces the claim as the pro's own words and never asserts it is valid, current, or sufficient"
  },
  {
   "id": "C4",
   "name": "quote pair: 180 exposed hireable, cheaper UNEXPOSED barred",
   "verdict": "pass",
   "evidence": "the fixture pair resolves by the all-in law: tt-pro-1 at face 180 with its 24.50 lead fee borne by the PRO (itemized, explaining the quote level, not charged to the buyer) totals 180.00 all-in and is hireable under the 250 ceiling; tt-pro-2 is CHEAPER on its face (165) but its fees are UNEXPOSED \u2014 no all-in exists, so it is barred under the same ceiling; raw quote forms are preserved alongside both normalizations"
  },
  {
   "id": "C5",
   "name": "lifecycle states recorded verbatim",
   "verdict": "pass",
   "evidence": "the fixture request's lifecycle reads back exactly as the platform recorded it \u2014 submitted -> matched -> quotes_received \u2014 with the basis stated: platform states recorded verbatim, never smoothed"
  },
  {
   "id": "C6",
   "name": "capability denylist: exactly the 7 G0 tools",
   "verdict": "pass",
   "evidence": "tools/list is exactly the 7 G0 tools; direct calls to tt_request_submit and scrape_profiles are refused as 'unknown or G0-forbidden tool' \u2014 no live submission, session, cookie, or scraping route exists at any tier"
  },
  {
   "id": "C7",
   "name": "receipt chain valid; tamper detected",
   "verdict": "pass",
   "evidence": "receipt_list reports chain_valid over 2 receipts (variant_previewed / quotes_read); the product verifier confirms it, and a deep copy with one altered receipt detail verifies false"
  },
  {
   "id": "U1",
   "name": "auth enforced",
   "verdict": "na",
   "evidence": "local stdio transport: no credential layer exists to test; process ownership is the boundary"
  },
  {
   "id": "U2",
   "name": "schema valid",
   "verdict": "pass",
   "evidence": "tools/list returns exactly the 7 G0 tools, each with inputSchema type object + properties + required"
  },
  {
   "id": "U3",
   "name": "no network surface (local-only build)",
   "verdict": "pass",
   "evidence": "server.py contains no network call sites \u2014 no urllib/socket/requests/http.*: the fixtures-only G0 claim is structural, not configured"
  },
  {
   "id": "U4",
   "name": "no secret leak",
   "verdict": "pass",
   "evidence": "no secret patterns in 11 tool outputs"
  },
  {
   "id": "U5",
   "name": "sane errors",
   "verdict": "pass",
   "evidence": "unknown request id -> error on both read tools; empty brief -> category error; malformed line survived (receipt_list answers); unknown method -> -32601"
  },
  {
   "id": "U6",
   "name": "process health",
   "verdict": "pass",
   "evidence": "initialize answered in 65 ms; ping ok"
  },
  {
   "id": "U7",
   "name": "audit completeness",
   "verdict": "pass",
   "evidence": "ledger covers the run in order (['variant_previewed', 'quotes_read'] present as a subsequence); 2 receipts, seq strictly increasing, chain valid; the blocked plumbing variant's receipt itself records blocked=true \u2014 the refusal is part of the audit trail, not just the response"
  },
  {
   "id": "U8",
   "name": "bench isolation",
   "verdict": "pass",
   "evidence": "workspace product state byte-identical before/after bench"
  }
 ],
 "notes": [
  "Simulator scope: local fixtures shaped like Thumbtack Partner Platform responses; no live Thumbtack call exists in the product and none was made (partner access is an owner G1 step).",
  "Quote normalization is delegated by the adapter to the sibling gig-core engine; the ceiling outcomes probed here (C4) are the core's law observed through the adapter."
 ],
 "history": "append-only; prior runs retained in results/"
}