{
 "tool": "eclipse-procure-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "0.1.0",
 "environment": "simulator",
 "qualifier": "simulator",
 "verdict": "CERTIFIED(simulator)",
 "checks": [
  {
   "id": "P1",
   "name": "drift abort: payments store EMPTY after abort",
   "verdict": "pass",
   "evidence": "DriftMart's widget quotes 25.00 TEST and policy allows it, but the checkout re-read presents 29.00: order_execute aborts on drift (tolerance 0.00), the order record stands ABORTED_DRIFT with payment_id null, the abort receipt states payment_record_created=false \u2014 and the payments store is literally empty ({}), proving the abort precedes any payment record rather than cleaning one up"
  },
  {
   "id": "P2",
   "name": "incomplete (tax-unknowable) quote never authorizable",
   "verdict": "pass",
   "evidence": "the mystery box (merchant cannot state tax) quotes as incomplete with total null; policy_check denies it naming the incompleteness and order_execute denies it again at its own gate \u2014 the quote is un-authorizable at every stage, and the payments store is still empty"
  },
  {
   "id": "P3",
   "name": "approval mandate: forged rejected, single-use, quote-bound",
   "verdict": "pass",
   "evidence": "the 121.50 software seat (above the 100.00 approval threshold) opens a mandate: execute without a token and with a forged token both return approval_required; the genuine approval_request_id executes exactly once (approval record stands consumed, one payment of 121.50); presenting the same consumed token against a second intent's quote is refused approval_required \u2014 the mandate is single-use and bound to its quote hash, and the second intent executes only under its own mandate"
  },
  {
   "id": "P4",
   "name": "allow path executes; tracking advances",
   "verdict": "pass",
   "evidence": "the allow path runs the full pipeline: paper case quotes 55.20 TEST (45.99 + 3.22 tax + 5.99 shipping), policy allows under threshold, execute writes the sandbox authorization and simulated confirmation, and the tracker advances CONFIRMED -> SHIPPED across polls, each transition receipted"
  },
  {
   "id": "P5",
   "name": "every record type carries its Data Rights Ledger block",
   "verdict": "pass",
   "evidence": "every persisted record carries its Data Rights Ledger block: 19 records across intents/quotes/orders/payments/approvals, each with source, legal_basis, collection_method, collected_at, license_constraints, retention_deadline and rank=a_first_party_exhaust \u2014 no provenance, no record, verified record by record"
  },
  {
   "id": "P6",
   "name": "expired quote rejected at execute",
   "verdict": "pass",
   "evidence": "on a bench policy copy with quote_ttl_seconds=1 (shipped policy untouched), a quote left 1.4s past its TTL is denied by policy_check naming the expiry, and order_execute's own fresh gate denies it again with the same reason \u2014 expiry is enforced at execution time, not only at check time, and no payment exists"
  },
  {
   "id": "P7",
   "name": "receipt chain valid; tamper detected",
   "verdict": "pass",
   "evidence": "receipt_list reports chain_valid over 40 receipts spanning every stage (identity/intent/quote/policy/approval/payment/order/abort/tracking); the product verifier confirms it, and a deep copy with one altered amount 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 pipeline tools, each with inputSchema type object + properties + required"
  },
  {
   "id": "U3",
   "name": "no network surface (simulator build)",
   "verdict": "pass",
   "evidence": "server.py contains no network call sites \u2014 no urllib/socket/requests/http.client: the simulator claim (fixture merchants, sandbox rail, no external contact) is structural, not configured"
  },
  {
   "id": "U4",
   "name": "no secret leak",
   "verdict": "pass",
   "evidence": "no secret patterns in 30 tool outputs"
  },
  {
   "id": "U5",
   "name": "sane errors",
   "verdict": "pass",
   "evidence": "undeclared buyer identity -> structured refusal at the identity stage (receipted, no intent created); unknown intent/quote -> errors; a malformed intent (missing max_total) -> error; malformed line survived (receipt_list answers); unknown method -> -32601"
  },
  {
   "id": "U6",
   "name": "process health",
   "verdict": "pass",
   "evidence": "initialize answered in 72 ms; ping ok"
  },
  {
   "id": "U7",
   "name": "audit completeness",
   "verdict": "pass",
   "evidence": "ledger covers the whole pipeline in order (['identity_check', 'intent_created', 'quote_issued', 'policy_decision', 'order_aborted', 'approval_requested', 'approval_consumed', 'payment_authorized', 'order_confirmed', 'tracking_event'] present as a subsequence) across 41 receipts \u2014 refusals, denials and the drift abort are receipted alongside successes; seq strictly increasing, chain valid"
  },
  {
   "id": "U8",
   "name": "bench isolation",
   "verdict": "pass",
   "evidence": "workspace product state byte-identical before/after bench"
  }
 ],
 "notes": [
  "Simulator end to end: fixture merchants (DemoMart / DriftMart / BargainBin), sandbox payment rail authorizing TEST value only, simulated checkout. No real merchant, rail, or money exists in this build and none was touched.",
  "Policy evaluation re-implements the Agent Wallet's documented semantics locally by reference; live interoperation with the wallet MCP is untested (the wallet's files are untouched)."
 ],
 "history": "append-only; prior runs retained in results/"
}