{
 "tool": "eclipse-connect-beyondcompare-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "0.1.0",
 "environment": "local",
 "qualifier": "simulated",
 "verdict": "CERTIFIED(simulated)",
 "round": "fix round 1 \u2014 scoped re-bench (E2 + G2 + regression A/B/C/G1 spot-lines) after Silas fixes for D-ENV + D-REVOKE",
 "prior_card": "eclipse-connect-beyondcompare-mcp-2026-10-25.json (PARTIAL, 40 pass/2 fail of 42; retained untouched, sha256 1be65f935e4eb2a23640479831e2dd3f1b54f28d2c246f9398d28720c9595e54)",
 "checks": [
  {
   "id": "A1",
   "name": "mandate custody: A1 absolute outside root refuses, zero adapter calls",
   "verdict": "pass",
   "evidence": "code=PATH_OUTSIDE_MANDATE; adapter_calls=0 (cumulative over all A probes, must be 0); packs=0"
  },
  {
   "id": "A2",
   "name": "mandate custody: A2 root-relative escape '../outside' refuses, zero adapter calls",
   "verdict": "pass",
   "evidence": "code=PATH_TRAVERSAL_REFUSED; adapter_calls=0 (cumulative over all A probes, must be 0); packs=0"
  },
  {
   "id": "A3",
   "name": "mandate custody: A3 absolute '..' traversal refuses, zero adapter calls",
   "verdict": "pass",
   "evidence": "code=PATH_TRAVERSAL_REFUSED; adapter_calls=0 (cumulative over all A probes, must be 0); packs=0"
  },
  {
   "id": "A4",
   "name": "mandate custody: A4 symlink dir escape refuses, zero adapter calls",
   "verdict": "pass",
   "evidence": "code=SYMLINK_ESCAPE_REFUSED; adapter_calls=0 (cumulative over all A probes, must be 0); packs=0"
  },
  {
   "id": "A5",
   "name": "mandate custody: A5 symlink file as compare path refuses, zero adapter calls",
   "verdict": "pass",
   "evidence": "code=SYMLINK_ESCAPE_REFUSED; adapter_calls=0 (cumulative over all A probes, must be 0); packs=0"
  },
  {
   "id": "A6",
   "name": "mandate custody: A6 sibling-prefix trick (root_evil) refuses, zero adapter calls",
   "verdict": "pass",
   "evidence": "code=PATH_OUTSIDE_MANDATE; adapter_calls=0 (cumulative over all A probes, must be 0); packs=0"
  },
  {
   "id": "B0",
   "name": "pack integrity: untampered pack verifies (full pins)",
   "verdict": "pass",
   "evidence": "recompute=PASS verdict=DIFFERENT; adapter_calls delta=0 (verify is offline)"
  },
  {
   "id": "B1",
   "name": "pack integrity: input hash LEFT flipped names pin",
   "verdict": "pass",
   "evidence": "recompute=FAIL failing_pin=INPUT_PIN_MOVED (want INPUT_PIN_MOVED)"
  },
  {
   "id": "B2",
   "name": "pack integrity: input hash RIGHT flipped names pin",
   "verdict": "pass",
   "evidence": "recompute=FAIL failing_pin=INPUT_PIN_MOVED (want INPUT_PIN_MOVED)"
  },
  {
   "id": "B3",
   "name": "pack integrity: script hash flipped names pin",
   "verdict": "pass",
   "evidence": "recompute=FAIL failing_pin=SCRIPT_PIN_MOVED (want SCRIPT_PIN_MOVED)"
  },
  {
   "id": "B4",
   "name": "pack integrity: rules hash flipped names pin",
   "verdict": "pass",
   "evidence": "recompute=FAIL failing_pin=RULES_PIN_MOVED (want RULES_PIN_MOVED)"
  },
  {
   "id": "B5",
   "name": "pack integrity: tool version flipped names pin",
   "verdict": "pass",
   "evidence": "recompute=FAIL failing_pin=TOOL_PIN_MOVED (want TOOL_PIN_MOVED)"
  },
  {
   "id": "B6",
   "name": "pack integrity: chain link broken (entry deleted) names pin",
   "verdict": "pass",
   "evidence": "recompute=FAIL failing_pin=CHAIN_BROKEN (want CHAIN_BROKEN)"
  },
  {
   "id": "B7",
   "name": "pack integrity: rollup forged (DIFFERENT->EQUAL) names pin",
   "verdict": "pass",
   "evidence": "recompute=FAIL failing_pin=ROLLUP_MISMATCH (want ROLLUP_MISMATCH)"
  },
  {
   "id": "B8",
   "name": "pack integrity: pack_hash flipped fails",
   "verdict": "pass",
   "evidence": "recompute=FAIL failing_pin=PACK_HASH_MISMATCH (want PACK_HASH_MISMATCH)"
  },
  {
   "id": "C1",
   "name": "T3: missing approval refuses, zero writes",
   "verdict": "pass",
   "evidence": "code=APPROVAL_MISSING (want APPROVAL_MISSING); trees byte-identical after refusal: True"
  },
  {
   "id": "C2",
   "name": "T3: forged approval (attacker key) refuses, zero writes",
   "verdict": "pass",
   "evidence": "code=APPROVAL_SIGNATURE_INVALID (want APPROVAL_SIGNATURE_INVALID); trees byte-identical after refusal: True"
  },
  {
   "id": "C3",
   "name": "T3: expired approval refuses, zero writes",
   "verdict": "pass",
   "evidence": "code=APPROVAL_EXPIRED (want APPROVAL_EXPIRED); trees byte-identical after refusal: True"
  },
  {
   "id": "C4",
   "name": "T3: replayed approval refuses, no further writes",
   "verdict": "pass",
   "evidence": "code=APPROVAL_REPLAYED; trees unchanged by replay: True"
  },
  {
   "id": "C5",
   "name": "T3: params-mismatched approval (plan A for plan B) refuses",
   "verdict": "pass",
   "evidence": "code=APPROVAL_PARAMS_MISMATCH (want APPROVAL_PARAMS_MISMATCH); trees byte-identical after refusal: True"
  },
  {
   "id": "C6",
   "name": "T3: approval for unproposed plan refuses, zero writes",
   "verdict": "pass",
   "evidence": "code=APPROVAL_WITHOUT_PROPOSAL (want APPROVAL_WITHOUT_PROPOSAL); trees byte-identical after refusal: True"
  },
  {
   "id": "C7",
   "name": "T3: base drift proposal->execute refuses MERGE_BASE_DRIFTED, zero writes",
   "verdict": "pass",
   "evidence": "code=MERGE_BASE_DRIFTED; post-drift trees == drifted snapshot: True; lone-left copied: False"
  },
  {
   "id": "C8",
   "name": "T3: happy path executes and seals a verifying result pack",
   "verdict": "pass",
   "evidence": "result_verdict=EQUAL; right/chg.txt now left bytes; lone-left copied; lone-right deleted; result pack recompute=PASS, evidence_class=simulated"
  },
  {
   "id": "E2",
   "name": "envelope fuzz: non-object envelope + initialize params shapes -> structured refusal, zero -32603, server survives",
   "verdict": "pass",
   "evidence": "all shapes refused cleanly (bench script, byte-for-byte E2 shapes) + detailed probe: non-object envelopes [1,2,3]/\"hello\"/123/null/true each -> rc=0, 2 responses, first -32600 'invalid request: envelope must be an object', final ping result {}, no traceback, zero -32603, no AttributeError leak; initialize params [1,2]/\"x\" -> codes [-32602,-32602,None], 'params must be an object', zero -32603; valid initialize still returns result"
  },
  {
   "id": "G1",
   "name": "revoke: subsequent compare/mandate_check/propose -> MANDATE_NOT_FOUND",
   "verdict": "pass",
   "evidence": "codes={'compare': 'MANDATE_NOT_FOUND', 'mandate_check': 'MANDATE_NOT_FOUND', 'propose': 'MANDATE_NOT_FOUND'}"
  },
  {
   "id": "G2",
   "name": "revoke: subsequent pack_fetch -> MANDATE_NOT_FOUND (fail-closed lifecycle, spec 2.12/4.3)",
   "verdict": "pass",
   "evidence": "pack_fetch refused: REFUSED MANDATE_NOT_FOUND (bench script, byte-for-byte G2 sequence: compare -> revoke_grant by principal -> pack_fetch by former agent). Builder regression additionally: by-id and by-hash both MANDATE_NOT_FOUND byte-identical to nonexistent-pack refusal; verify_pack post-revoke still PASS by design (spec 6.3, not fixed)."
  }
 ],
 "scope_summary": "26 scoped checks: 26 pass / 0 fail (E2, G2, A1-A6, B0-B8, C1-C8, G1). Full bench script also ran end-to-end out-of-scope for context: 42/42 pass \u2014 verdict rests on the scoped set.",
 "n_check": {
  "verdict": "NOVELTY_PROVEN",
  "note": "Retained from prior card untouched; N1-N3 also re-ran PASS in the full bench run for context.",
  "renamed_vendor_verbs": "0/6 = 0% (fail line >=80%)",
  "shim_score": "1/20 = 5% (ceiling <=20%)"
 },
 "defects": [
  {
   "id": "D-ENV",
   "severity": "major",
   "check": "E2",
   "status": "FIXED \u2014 re-bench PASS",
   "fix": "Envelope type guard at BOTH layers: bridge.handle() returns -32600 'invalid request: envelope must be an object' (id null) for any non-dict top-level envelope; initialize validates params is an object (None treated as absent) -> -32602 'params must be an object', and protocolVersion must be a string -> -32602. server.py pre-guards non-dict envelopes with the same -32600 and its exception handler now extracts id only from a dict and returns a named -32602 with no exception text. No -32603 is emitted by any serving code path (grep: only a comment mentions it).",
   "locations": "bridge.py handle() entry + initialize branch; server.py main() envelope pre-guard + exception handler"
  },
  {
   "id": "D-REVOKE",
   "severity": "major",
   "check": "G2",
   "status": "FIXED \u2014 re-bench PASS",
   "fix": "bc_engine.pack_fetch re-checks grant state after pack lookup: mandate missing or grants[mandate_id].state == REVOKED -> refuse MANDATE_NOT_FOUND 'pack not found', byte-identical to the nonexistent/not-yours refusal (no oracle). verify_pack deliberately unchanged \u2014 post-revoke PASS is by design (spec 6.3 public verification), regression-asserted.",
   "locations": "bc_engine.py pack_fetch"
  }
 ],
 "notes": [
  "VERDICT: CERTIFIED(simulated) \u2014 scoped re-bench 26/26 pass (E2 + G2 fixed; A/B/C/G1 regression spot-lines all pass). Prior PARTIAL card retained untouched (append-only).",
  "Builder suite: 75/75 OK (was 71/71; +4 regressions: pack_fetch-after-revoke by id+hash with verify_pack-still-PASS, bridge-layer non-object envelopes, bridge-layer initialize params shapes, subprocess bench-E2 shapes byte-for-byte). Stdio smoke: SMOKE PASS.",
  "Method: fixes by Silas (W-002); re-bench by Verity bench script /tmp/verity-bc-bench/bench.py (bench-own fixtures/keys/mandates, state under /tmp) run unmodified against fixed source, plus a detailed envelope probe (evidence file). No builder result counted as bench evidence beyond suite replication note above.",
  "Honesty: evidence_class simulated everywhere; live BC exercise still OWED at P1 \u2014 no live claim made or implied. Verdict ceiling CERTIFIED(simulated) respected."
 ],
 "evidence_file": "eclipse-connect-beyondcompare-mcp-evidence-2026-10-25-rebench-fixround1.json",
 "history": "append-only; prior runs retained in results/"
}