{"bench_date":"2026-10-25","bench_version":"0.1.0","checks":[{"evidence":"python3 -m unittest discover -s tests -> Ran 42 tests, OK (31 original + 11 fix-round regressions in tests/test_fix_round_bench.py); python3 smoke.py -> SMOKE OK (fixture pack PACK_VALID + gate BOOT_VERIFIED; qemu session sealed target_class=emulator). Replication only — verdicts below rest on the bench's own fresh probes, not this suite.","id":"R0","name":"builder suite replication (regression floor): full suite + smoke replicated exactly before independent probing","verdict":"pass"},{"evidence":"Bench-own probes, clocks pinned 2026-11-03 (fresh origin, not the builder's): (9a, required shape) /tmp COPY of fixtures, qemu board registry target_class emulator->bench, adapter left qemu_xsdb -> session_open refuses TARGET_MISMATCH with receipt_id; sessions=0, packs=0, no lease held. (9b, fresh board) same relabel on renode -> TARGET_MISMATCH, packs=0. (9c, fresh direction) qemu relabeled emulator->fixture (downgrade) -> TARGET_MISMATCH (relabeling refuses in both directions). (9d, fresh timing) honest fixture session opened, registry mutated in-memory AFTER open -> target_connect refuses TARGET_MISMATCH, refusal receipted in the session's refusals[]. (9e, fresh timing) honest ACTIVE fixture session, registry relabeled to bench, session_close -> TARGET_MISMATCH, packs=0, session NOT SEALED (stays ACTIVE); registry restored to honest value -> close succeeds, pack target_class=fixture, pack_verify PACK_VALID (no bench pack ever sealed; recovery is the honest class, not the attempted one). (9f, control) honest qemu session seals pack target_class=emulator, PACK_VALID. DECIDING PROBE: 9a+9e — open-time and seal-time interlocks both hold; the run-1 laundering path (validly sealed bench pack over an emulator adapter) is unreachable in every timing/direction/board variant probed.","id":"B9R","name":"class integrity re-probe (defect D-1 / H-13/§4.2/§3.2.8): target_class cross-checked against a fresh adapter instance at open/connect/seal; a relabeled registry must NOT seal a bench pack","verdict":"pass"},{"evidence":"Bench-own clock origin T0=2026-11-02T09:00Z (fresh, not the builder's). (10a, lease limb) mandate-full (max_duration_s=3600, mandate in bounds to 2027): memory_write OK at T0+3599s; at T0+3601s a spread of ops each refuse LEASE_EXPIRED — register_read (T0), power_set (T2), artifact_load (T1), session_status, and a repeat memory_write (refusal is persistent, not one-shot); lease record state=expired, session state=EXPIRED (transition via expire_lease inside the gate). (10b, mandate limb ISOLATED, bench-signed fresh mandate) mandate-verity-shortlived signed by this bench with the Herald test seed: expires_at T0+1800s, max_duration_s=86400 so the lease stays far from expiry; write OK at T0+600s; at T0+1801s memory_write -> MANDATE_EXPIRED and register_read -> MANDATE_EXPIRED while lease_state remains 'held' — the mandate limb fires on its own, not as a lease side-effect. (10c, precedence) clock advanced past BOTH bounds (T0+90000s) -> op names MANDATE_EXPIRED (mandate checked first, per the fix brief). No false positives: every pre-expiry op above succeeded. DECIDING PROBE: 10b — a mandate-only expiry with a live lease refuses MANDATE_EXPIRED per op, the exact case run 1 showed succeeding.","id":"B10R","name":"time-based expiry re-probe (defect D-2 / H-5 second limb/§10.2/§5.1): per-op refusals once the clock passes lease/mandate bounds, no manual expire helper driven by the bench","verdict":"pass"},{"evidence":"Bench-own battery of 21 shapes in a valid sealed-pack context (fixture session opened, powered, closed on the same bridge first): params as bare string / int 777 / None / list / bool -> -32602 each; tool name as list / dict / int / None -> -32602 each; non-dict request as int 42 / string / list / None / bool / float 3.14 -> -32600 each; method as int / list / dict -> -32600 each; arguments as list / string / int -> -32602 each (fresh shapes beyond run 1: params None/list/bool, name int/None, request bool/float, method shapes, arguments string/int). Zero exception escapes (escapes=0). After EVERY hostile input: tools/list still returns exactly 22 tools, pack_verify over the wire on the pre-sealed pack returns PACK_VALID, the bridge-log receipt chain verifies (receipts.verify_chain), and gate_tool pack_verify is PACK_VALID; a fresh valid session then opens/connects/attests/writes successfully in the same process. Fresh transport shape: real stdio subprocess fed hostile lines (params string, name list, bare-array request) then valid lines -> 5 responses, hostile ids answer -32602, tools/list after answers 22 tools, pin_status answers ok, process exits 0 on EOF (the run-1 process-kill path through server main() is closed). DECIDING PROBE: params-as-string and name-as-list — run 1's two process-killing shapes — now return -32602 with the server and both chains intact.","id":"B11R","name":"envelope hostile re-probe (defect D-3): wrong-shape JSON-RPC envelopes refuse structured -32600/-32602, server survives, receipt/audit chains intact","verdict":"pass"},{"evidence":"Tree-wide text scan (all .py/.md/.json/.txt under eclipse-proving-mcp/, __pycache__ excluded): ZERO occurrences of the struck env-var name (the builder's regression file references it only as a split string concatenation, never the literal). adapters/qemu_xsdb.py docstring now states affirmatively: 'No live transport exists in this build: no code in this adapter (or anywhere in the tree) binds a real XSDB/GDB/TCF session, and no environment variable, flag, or config enables one.' BUILD-MANIFEST.json/.md carry the same disclosure. Behavioral probe (fresh): subprocess with the env var SET to 1 -> qemu target_connect still returns transport 'XSDB via GDB/TCF (simulated PS in build env)' and target_class=emulator — the variable is not merely undocumented, it is inert. Ceiling discipline unchanged and re-affirmed: NO live transport is claimed by this verdict — §12.4 X4/X5 (live XSDB vs AMD QEMU, Renode monitor/GDB) remain owed and unexercised; adapters remain simulated-PS, evidence class emulator.","id":"B12R","name":"evidence-class disclosure re-probe (defect D-4 limb of run-1 B12): the live-transport env claim struck tree-wide; no surface overstates evidence class","verdict":"pass"},{"evidence":"Fresh tool assignments (run 1 and the builder probed via power_set; this bench spreads them): pmic on memory_write -> PERMANENT_REFUSED_PMIC; voltage_set on target_reset -> PERMANENT_REFUSED_PMIC; set_voltage on register_read and on power_set -> PERMANENT_REFUSED_PMIC; efuse on session_status -> PERMANENT_REFUSED_FUSE; controls voltage on console_read -> PERMANENT_REFUSED_PMIC, fuse on target_run -> PERMANENT_REFUSED_FUSE. Every case: ok=false, receipt_id present, and the bridge-log receipt chain verifies after the battery. The §6.4 boundary vocabulary is complete for all brief-named synonyms (pmic/voltage_set/set_voltage/efuse).","id":"B2R-BONUS","name":"BONUS spot-probe (run-1 B2 observation): denied-param synonyms map to the PERMANENT codes, not ARGUMENT_UNKNOWN","verdict":"pass"},{"evidence":"Bench-derived fixture on a /tmp COPY (originals untouched): NEW 2600-byte artifact (verity-own pattern (i*31+7)%256, distinct from run 1's 1500-byte pattern), bench-signed pin-verity-own + re-signed mandate-verity-own injected into the copy. Good load OK. Artifact file then flipped at a fresh offset (byte 1999, XOR 0x01): artifact_load -> ARTIFACT_PIN_MISMATCH with receipt; adapter spy load_calls delta = 0; adapter attest programmed{} identical before/after; standalone pin_verify on the flipped bytes -> ARTIFACT_PIN_MISMATCH; sealed pack refusals[] contains ARTIFACT_PIN_MISMATCH and the pack verifies PACK_VALID. Unbroken.","id":"B1R","name":"regression spot-line B1 (pin law): bench-own fixture, one-byte-off artifact refuses ARTIFACT_PIN_MISMATCH with zero adapter load calls","verdict":"pass"},{"evidence":"Fresh op choices vs run 1/builder: threaded slow load with a genuine write window (window observed live); during the window power_set CYCLE (run 1 used off) -> POWER_WINDOW_ACTIVE, not queued (power_acts holds exactly the 1 pre-window power act); mandate revoked mid-window; window released -> in-flight artifact_load returned ok=True, adapter power still 'on'; subsequent target_run (fresh frozen-op choice) -> SESSION_FROZEN; T0 memory_read in FROZEN state succeeds, consistent with §10.3. Unbroken.","id":"B5R","name":"regression spot-line B5 (dead-man, §5.1): revoke mid-write — in-flight completes, power never cut, new write-class ops SESSION_FROZEN","verdict":"pass"},{"evidence":"Fresh order/verification vs run 1: session with power-on + ELF load, then simulate_drop -> pack gap_records=1 with board_state_after=UNKNOWN, sealed_by='bridge (session dropped)'; pack verified PACK_VALID in a CLEAN subprocess (pack JSON + bridge pubkey only, no Bridge import of the live session). Next session, probed power-first (run 1 probed write-first): power_set -> REATTESTATION_REQUIRED, memory_write -> REATTESTATION_REQUIRED, target_attest in that session -> memory_write succeeds. Unbroken.","id":"B6R","name":"regression spot-line B6 (drop/disconnect, D-2/§10.4): gap sealed, board UNKNOWN, next session re-attestation gate","verdict":"pass"},{"evidence":"Run-1 N-check PASS stands: the novel mechanism (Herald-signed mandate binding agent x board x op-class x exact artifact hash, enforced at the bridge, every session incl. gaps/refusals sealed into an offline-verifiable pack) is unchanged by the fix round, and the one caveat recorded against it in run 1 — the B9 config path mislabeling evidence CLASS — is now closed by B9R (the mechanism itself was never voided: no target op was reachable and no mandate/pin check was bypassed through it). No new bypass path was introduced by the fixes as probed: the envelope guards refuse before dispatch (B11R), the class interlock fires at open/connect/seal (B9R), and expiry refuses inside the per-op gate (B10R).","id":"N1","name":"N-check (§13.4): carried from run 1 — PASS, not re-litigated in this scoped re-bench","verdict":"pass"}],"defect_verdicts":{"BONUS (denied-param synonyms)":"CLOSED — pmic/voltage_set/set_voltage -> PERMANENT_REFUSED_PMIC and efuse -> PERMANENT_REFUSED_FUSE at the wire boundary across seven tool/param pairings, all receipted (B2R-BONUS).","D-1 (B9, class integrity)":"CLOSED — deciding probes B9R 9a (relabeled qemu->bench copy refuses TARGET_MISMATCH at session_open, no session/lease/pack) and 9e (seal-time interlock: relabeled ACTIVE session seals nothing; restored registry seals the honest fixture class, PACK_VALID). Cross-check runs at open, connect, and seal against a fresh adapter instance.","D-2 (B10, time expiry)":"CLOSED — deciding probe B10R 10b (bench-signed mandate expiring T0+1800s with lease held to T0+86400s: ops refuse MANDATE_EXPIRED per op past expiry); lease limb and precedence confirmed in 10a (spread of T0/T1/T2/status ops all LEASE_EXPIRED, persistent) and 10c (both bounds passed -> MANDATE_EXPIRED named first).","D-3 (B11, envelope crash)":"CLOSED — deciding probes B11R params-as-string and name-as-list (run 1's process-killers) return structured -32602 with tools/list, pack_verify, and both receipt chains intact after each of 21 hostile shapes, plus a real-stdio survival run.","D-4 (B12, live-transport claim)":"CLOSED — zero occurrences of the env-var name tree-wide; qemu adapter docstring and both manifests state no live transport exists and none can be switched on; with the env var set, connect still reports the simulated-PS transport and emulator class (claim struck AND behaviorally inert)."},"environment":"local","history":"append-only; prior runs retained in results/","notes":["VERDICT: CERTIFIED(simulator) — scoped re-bench. All three run-1 FAIL lines (B9/B10/B11) re-probed PASS with bench-own fresh shapes, the B12 partial's sole defect (D-4) is closed, the BONUS synonym mapping is closed, and the B1/B5/B6 regression spot-lines are unbroken; builder suite replicated 42/42 + SMOKE OK as the regression floor. Run-1 lines not in scope (B1-B8, B12's ceiling ruling) stand as recorded; with B9R/B10R/B11R/B12R now passing, no failing or partial line remains on the card. N-check PASS (run 1, carried in N1 above).","CEILING — read exactly: CERTIFIED(simulator) and nothing broader. Adapters remain simulated-PS; evidence classes as verified: fixture packs = fixture, qemu/renode packs = emulator (label per spec §12.2; content is a deterministic simulated PS in-adapter). NO live transport is claimed or certified: no QEMU process, XSDB/GDB/TCF session, or Renode monitor was exercised at any point in either run. Spec §12.4 exit checks X4/X5 are still owed before any transport-level interop claim; HwServerAdapter remains an ADAPTER_NOT_IN_PHASE stub and zero bench-class packs exist or can be produced — correct at P0.","Observation (non-gating, for spec adjudication — outside this re-bench's pass conditions): a session whose LEASE time-expires transitions to state EXPIRED, from which session_close refuses SESSION_FROZEN (observed in 10a) and expire_lease() seals no gap record or pack — contrast §11.3, which lists lease_expiry among gap-record causes, and the mandate limb, where the session remains closable and its pack seals normally (observed in 10c). The scoped D-2 pass condition (H-5 second limb: ops on an expired lease refuse LEASE_EXPIRED) is met; whether an expired session's evidence should also seal (gap or pack) is a spec question for Argus/Silas, flagged here, not silently passed over.","Observation carried from run 1 (unchanged, spec-text only): §2.2's 'AMD official: no agent layer found' is stale after AMD Ross (design-flow assistant over MCP, Oct 2026 reports); the novelty delta stands (Ross has no mandate/pin/pack mechanism), but the §2.2 wording should be re-scoped before any public copy reuses it.","Bench method note: every deciding probe above uses shapes authored by this bench (fresh clock origins 2026-11-02..05, fresh boards/directions/timings for class relabeling, a bench-signed short-lived mandate isolating the mandate limb from the lease limb, a 21-shape envelope battery plus real-stdio survival, a new 2600-byte bench-own artifact flipped at byte 1999). The builder's tests/test_fix_round_bench.py was read for scope only and replicated solely as part of the R0 suite floor; no verdict rests on it."],"prior_run":"eclipse-proving-mcp-2026-10-25.json (PARTIAL — 10 pass/1 partial/3 fail, N-check PASS)","qualifier":"simulator","run":2,"scope":"Scoped re-bench of run-1 FAIL/PARTIAL lines only (B9/B10/B11 + B12 D-4 limb), re-probed with bench-own FRESH shapes (not the builder's regression shapes), plus B1/B5/B6 regression spot-lines, BONUS denied-param synonyms, and builder-suite replication. All other run-1 lines stand as recorded and were not re-litigated. Bench isolation: all bench state under /tmp/verity-proving-rebench (copied fixture trees, bench-signed records, probe script); product tree read-only (PYTHONDONTWRITEBYTECODE=1 throughout); prior card untouched (sha256 6c1b9f5da63638640c87ffbbaeb3ad33524b61f024c271db73b573745a5c4f02 before and after).","tool":"eclipse-proving-mcp","verdict":"CERTIFIED(simulator)","version":"0.1.0"}