{
 "tool": "eclipse-marquee-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "0.1.0",
 "environment": "simulator",
 "qualifier": "simulator",
 "verdict": "CERTIFIED(simulator)",
 "checks": [
  {
   "id": "M1",
   "name": "discovery and row semantics survive normalization",
   "verdict": "pass",
   "evidence": "discovery returns all 3 fixture events across both feed shapes; listing_read keeps location nested and exact (Ticketmaster: section 112 / row F / seats 9-12; SeatGeek: section 214 / row J / seats 5-8) \u2014 row semantics are never flattened"
  },
  {
   "id": "M2",
   "name": "fee truth: face and fees separate, all-in derived",
   "verdict": "pass",
   "evidence": "current price for the concert's section 112 listing: face 111.00 with fees itemized (service 18 / facility 7 / processing 0, total 25) and all_in 136.00 derived \u2014 face and fees remain separate fields end to end"
  },
  {
   "id": "M3",
   "name": "fee trap: pre-fee-under listing never alerts",
   "verdict": "pass",
   "evidence": "at the 2026-10-24 snapshot the watch (ceiling 140 all-in) alerts on nothing: section 112 is at all-in 141, and the section 108 trap \u2014 face 95, under the ceiling pre-fee \u2014 sits at all-in 144 once its 49 in fees are counted, so it correctly stays silent"
  },
  {
   "id": "M4",
   "name": "genuine all-in dip alerts exactly once",
   "verdict": "pass",
   "evidence": "at the final snapshot (all-in 136 <= ceiling 140) exactly one alert fires, for section 112 row F at unit_all_in 136.00; the section 108 trap has no alert in the watch's full alert history"
  },
  {
   "id": "M5",
   "name": "tightening rule enforced by name",
   "verdict": "pass",
   "evidence": "both loosenings are refused by name \u2014 raising the ceiling 140 -> 150 and widening sections 112/108 -> +201 each return an error naming the Marquee tightening rule; a genuine tightening successor (ceiling 138, sections narrowed to 112) is accepted and the original watch is marked superseded"
  },
  {
   "id": "M6",
   "name": "capability denylist: exactly the 6 F0 tools",
   "verdict": "pass",
   "evidence": "tools/list is exactly the 6 F0 tools (event_search, listing_read, watch_create, watch_list, watch_evaluate, receipt_list); direct calls to purchase and checkout are refused as 'unknown or F0-forbidden tool' \u2014 the transaction surface does not exist, not merely gated"
  },
  {
   "id": "M7",
   "name": "expired watch cannot alert",
   "verdict": "pass",
   "evidence": "watch bench-w3 (section 201, whose all-in 90 is far under its 140 ceiling) evaluated after its 2026-10-26 expiry -> status expired, zero listings evaluated for alerts, zero new alerts: an expired watch cannot alert even on a qualifying price"
  },
  {
   "id": "M8",
   "name": "receipt chain valid; tamper detected",
   "verdict": "pass",
   "evidence": "receipt_list reports chain_valid over 7 receipts (watch_created / watch_evaluated / alert_created / watch_tightened); 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 6 F0 tools, each with inputSchema type object + properties + required"
  },
  {
   "id": "U3",
   "name": "no network surface (local-only build)",
   "verdict": "pass",
   "evidence": "server.py (the whole product) contains no network call sites \u2014 no urllib/socket/requests/http.*: the no-live-marketplace F0 claim is structural, not configured"
  },
  {
   "id": "U4",
   "name": "no secret leak",
   "verdict": "pass",
   "evidence": "no secret patterns in 17 tool outputs"
  },
  {
   "id": "U5",
   "name": "sane errors",
   "verdict": "pass",
   "evidence": "listing_read with both ids -> error; unknown listing -> error; watch on unknown event -> error; malformed line survived (event_search answers); unknown method -> -32601"
  },
  {
   "id": "U6",
   "name": "process health",
   "verdict": "pass",
   "evidence": "initialize answered in 60 ms; ping ok"
  },
  {
   "id": "U7",
   "name": "audit completeness",
   "verdict": "pass",
   "evidence": "ledger covers the run in order (['watch_created', 'watch_evaluated', 'alert_created', 'watch_tightened'] present as a subsequence); 7 receipts, seq strictly increasing, chain valid; all 4 first-party price-history points carry per-source provenance (source + feed file + listing id)"
  },
  {
   "id": "U8",
   "name": "bench isolation",
   "verdict": "pass",
   "evidence": "workspace product state byte-identical before/after bench"
  }
 ],
 "notes": [
  "Simulator scope: local stub feeds shaped like Ticketmaster Discovery / SeatGeek Platform responses; no live marketplace call exists in the product and none was made (U3 verifies structurally).",
  "F0 only: no purchase, checkout, transfer, or resale tools exist; the capability denylist is probed directly (M6). F1 buy-under-mandate and the organizer side are unbuilt and owner/partner-gated."
 ],
 "history": "append-only; prior runs retained in results/"
}