{
 "tool": "eclipse-pantry-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": "malformed DEX rejected at line 7, nothing stored",
   "verdict": "pass",
   "evidence": "dex-malformed.txt -> rejected DEX_PARSE_ERROR at line 7 (the non-integer vend count; the unknown record behind it never reached); bench state holds zero reads; the rejection itself is receipted with the line reference"
  },
  {
   "id": "P2",
   "name": "PAN fixture rejected; digits stored nowhere",
   "verdict": "pass",
   "evidence": "dex-with-pan.txt -> rejected PAN_DETECTED (line 9 named in the receipt, value never echoed); the fixture's Luhn-valid digit sequence (16 digits, withheld from this record) appears in none of: tool output, bench state file, receipt ledger; nothing was stored"
  },
  {
   "id": "P3",
   "name": "hand-total parity per machine and fleet",
   "verdict": "pass",
   "evidence": "ingest totals and sales_summary agree with hand-computed fixture sums on all 3 machines (DRINK 224 vends/33,250c/55.94% cashless; SNACK 168/21,875c/60.0%; COMBO 252/56,175c/69.96%); fleet totals 644 vends / 111,300c gross / 71,025c cashless / 40,275c cash"
  },
  {
   "id": "P4",
   "name": "duplicate ingest idempotent",
   "verdict": "pass",
   "evidence": "re-ingesting the identical DRINK-01 read (same audit counter + collection time) -> duplicate_ignored; fleet totals unchanged at 644 vends / 111,300c (no double-count)"
  },
  {
   "id": "P5",
   "name": "unenrolled machine rejected and invisible",
   "verdict": "pass",
   "evidence": "a well-formed DEX export for unenrolled GHOST-99 -> rejected MACHINE_NOT_ENROLLED; inventory_read for GHOST-99 errors; the fleet read lists exactly the 3 enrolled machines \u2014 the ghost is invisible on every surface"
  },
  {
   "id": "P6",
   "name": "staleness flags and forecast sanity",
   "verdict": "pass",
   "evidence": "staleness: DRINK-01 read (2026-10-24 09:15) is fresh at as_of 2026-10-25 (age 38.7h < 48h) and stale at 2026-10-28 (age 110.7h); forecast: A1 velocity 6.0/day -> 2.67 days to empty, A5 flagged stocked_out at 0.0 days \u2014 labeled heuristics, matching hand math"
  },
  {
   "id": "P7",
   "name": "receipt chain valid; tamper detected",
   "verdict": "pass",
   "evidence": "receipt_list reports chain_valid over 16 receipts (ingests, rejections, duplicates, reads); 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 Tier-0 tools, each with inputSchema type object + properties + required; no price/planogram/route/order/ticket/restock tool exists on the surface"
  },
  {
   "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 local-files-only C0 claim is structural, not configured"
  },
  {
   "id": "U4",
   "name": "no secret leak",
   "verdict": "pass",
   "evidence": "no secret patterns in 19 tool outputs"
  },
  {
   "id": "U5",
   "name": "sane errors",
   "verdict": "pass",
   "evidence": "unknown tool -> error; missing ingest file -> receipted FILE_NOT_FOUND rejection (a verdict, not a crash); unenrolled machine read -> error; malformed line survived (sales_summary answers); unknown method -> -32601"
  },
  {
   "id": "U6",
   "name": "process health",
   "verdict": "pass",
   "evidence": "initialize answered in 69 ms; ping ok"
  },
  {
   "id": "U7",
   "name": "audit completeness",
   "verdict": "pass",
   "evidence": "ledger covers the run in order (rejections, ingests, duplicate, reads all receipted \u2014 ['dex_ingest_rejected', 'dex_ingest', 'dex_ingest_duplicate', 'sales_summary'] present as a subsequence); 18 receipts, seq strictly increasing, hash chain valid"
  },
  {
   "id": "U8",
   "name": "bench isolation",
   "verdict": "pass",
   "evidence": "workspace product state byte-identical before/after bench"
  }
 ],
 "notes": [
  "Simulator scope: synthetic DEX fixtures only; bench state in /tmp; the product contains no network code path (U3 verifies structurally).",
  "C0 Tier-0 only: no price, planogram, route, ticket, or order tools exist to test. Live platform routes (Cantaloupe/Nayax exports) are [verify] per the addendum and untested."
 ],
 "history": "append-only; prior runs retained in results/"
}