{
 "tool": "eclipse-strike-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "0.1.0",
 "environment": "local",
 "qualifier": "local",
 "verdict": "CERTIFIED(local)",
 "checks": [
  {
   "id": "S1",
   "name": "native status 'pending_review' -> UNMAPPED verbatim; 'online' -> OPEN",
   "verdict": "pass",
   "evidence": "bench product with native status 'pending_review' surfaces as status UNMAPPED with native_status preserved verbatim in list and get \u2014 never coerced to OPEN/CLOSED; the 'online' product maps to OPEN as the one mapped value"
  },
  {
   "id": "S2",
   "name": "quote math recomputed independently from book levels + core-read fee bps (buy AND sell)",
   "verdict": "pass",
   "evidence": "fee bps (60) read back through the Book core on the shared state, then the quote recomputed in Decimal from the served book's own best levels (65000 / 65010, size 0.5): buy total 32700.03, sell total 32305.0 \u2014 exact match, schedule ref cited"
  },
  {
   "id": "S3",
   "name": "stale schedule (97h > 72h freshness) -> FEE_UNVERIFIED, price still serves",
   "verdict": "pass",
   "evidence": "at as_of 97h past the seeded schedule's fetch (72h freshness): fee_schedule_get reports STALE and the quote degrades both all-in fields to FEE_UNVERIFIED while bid/ask still serve \u2014 degraded, never wrong"
  },
  {
   "id": "S4",
   "name": "NO account tools: Coinbase-MCP-shaped verbs refused on direct call; tool surface is exactly the 6 data tools",
   "verdict": "pass",
   "evidence": "tools/list == exactly the 6 public-data tools; 25 account/trading-shaped names \u2014 including the vendor account MCP's own verb shapes (get_accounts, list_orders, cancel_order) \u2014 refused -32602 on direct call: no account surface exists for them to land on"
  },
  {
   "id": "S5",
   "name": "wrap-posture note present: README names the three vendor MCPs + governed wrap; venue_status states it on every call",
   "verdict": "pass",
   "evidence": "README 'Wrap posture' section names all three vendor MCPs (account / Wallet / CDP), states Strike does not re-implement any of them, and places account paths at M1+ as a governed WRAP; venue_status repeats account_surface ABSENT + the wrap note on the wire"
  },
  {
   "id": "S6",
   "name": "cross-adapter parity: same logical book via Coinbase-shaped and CLOB-shaped paths -> identical normalized Book + identical quote math",
   "verdict": "pass",
   "evidence": "the same logical book (0.40x1000 / 0.39x500 bids, 0.42x1000 / 0.43x500 asks) fed as a Coinbase level-2 array book and as a Polymarket CLOB book normalizes to IDENTICAL bids/asks/depth_summary/spread_bps/book_type, and \u2014 with fees aligned at 60bps via a bench-registered schedule \u2014 identical bid/ask/mid, liquidity_flag (THIN, $420 at best), and all-in buy 42.252 / sell 39.76 for size 100 on both adapters"
  },
  {
   "id": "U1",
   "name": "auth enforced",
   "verdict": "na",
   "evidence": "local stdio transport has no credential layer to test \u2014 process ownership is the boundary (the standing U1 note); the future wrap's credential posture is M1+, owner-gated"
  },
  {
   "id": "U2",
   "name": "schema valid",
   "verdict": "pass",
   "evidence": "all 6 tools carry name + description + object inputSchema with required fields declared"
  },
  {
   "id": "U3",
   "name": "no network surface (source-level)",
   "verdict": "pass",
   "evidence": "source-level scan of the adapter server: no socket/urllib/requests/http.client/urlopen tokens \u2014 no network code path exists in M0"
  },
  {
   "id": "U4",
   "name": "no secret leak",
   "verdict": "pass",
   "evidence": "secret-pattern scan over 39 collected responses: clean"
  },
  {
   "id": "U5",
   "name": "sane errors",
   "verdict": "pass",
   "evidence": "unknown product -> isError PRODUCT_NOT_FOUND (no crash); server answers ping afterwards"
  },
  {
   "id": "U6",
   "name": "process health",
   "verdict": "pass",
   "evidence": "initialize + ping healthy; initialize latency 0.0 ms"
  },
  {
   "id": "U7",
   "name": "audit completeness (shared ledger chain)",
   "verdict": "pass",
   "evidence": "the shared suite ledger, read through the adapter: chain_valid=true over 3 receipts (the adapter's own sync wrote the instrument_ingested entries it reads back)"
  },
  {
   "id": "U8",
   "name": "bench isolation",
   "verdict": "pass",
   "evidence": "workspace product state byte-identical before/after bench"
  }
 ],
 "notes": [
  "Local scope: M0 runs over fixture-shaped Coinbase public responses behind the transport seam \u2014 all probes ran against bench-owned fixture files + bench state in /tmp; no live Coinbase read was attempted.",
  "Account anything is NOT tested because it does not exist in this build: the account posture is an M1+ governed wrap of the vendor's account MCP (spec 10.1), owner-gated; the manifest not_tested carries this verbatim.",
  "U1 is na: local stdio transport \u2014 process ownership is the boundary; no credential layer exists to test.",
  "S6 parity aligns fees deliberately: a bench-registered polymarket_global schedule at 60bps (newer fetched_at than the core seed) makes the Forecast state's taker rate equal coinbase's seeded 60bps, so any remaining quote difference would be normalization, not fees. The unaligned seeded rates (75 vs 60bps) are each verified on their own cards.",
  "Quote as_of values are pinned (2026-10-25T13:00Z; stale probe 2026-10-29) against the seeded coinbase schedule (fetched 2026-10-25T12:00Z, 72h freshness) so the card does not depend on wall-clock run time.",
  "Run 1 PARTIAL card retained append-only: its S6 untestable was a bench-suite assertion defect (the parity comparison demanded byte-identical all_in dicts, but the embedded fee_schedule_ref is venue provenance and SHOULD differ across adapters \u2014 the rejected pair showed identical totals 42.252 on both sides). Suite fixed to compare the math fields and assert each ref separately; run 2 is the standing card. No product code touched."
 ],
 "history": "append-only; prior runs retained in results/"
}