{
 "tool": "eclipse-friction-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "0.1.0-rebench-2",
 "bench_agent": "W-003 Verity (scoped re-bench of the D1-D7 fix round; independent harness, independent spec-5.1 recompute; builder tests not trusted, builder suite separately reproduced 67/67 OK)",
 "environment": "local",
 "qualifier": "local",
 "verdict": "CERTIFIED",
 "certification": "CERTIFIED(local) \u2014 D1-D5 fully closed, D6 closed under the adjudicated vendor-of-record reading (ruling 6), D7 holds; all named regression spot-lines unbroken; 34 prior passing lines carry from bench 1",
 "score": "41/41 checks pass (7 previously-failing lines re-benched and now pass; 34 prior passing lines carry, regression spot-lines among them re-verified)",
 "spec": "eclipse-friction-spec-20261025.md S13 + Errata E1 (appendix)",
 "prior_card": "eclipse-friction-mcp-2026-10-25.json (PARTIAL 34/41) RETAINED unmodified, md5 fa207dd9c1acbc36a8872a14d39a229a",
 "evidence_file": "eclipse-friction-mcp-rebench-d1d7-evidence-2026-10-25.json",
 "method": "Re-bench harness /tmp/friction_rebench.py: D1 three-arm radar leak probe (NO_MINE / dogfood+CLEAN / SUPERSEDED+old CLEAN); D2 raw-secret matrix (10 shapes + args_payload arm) at file site and exact/Bearer shapes at import, rebut, fix_submit sites with post-refusal state scans; D3 store inspection + bench-side independent recompute of rendered pack + already-shaped and tampered edges + VENDOR_ONLY arm; D4 bench-exact +51d shape on file AND import paths; D5 bench-exact subj-b1/subj-other shape + same-subject control; D6 stranger / original-filer / subject-vendor three-arm binding probe; D7 transition probes + errata location check; regression spot-lines (vocabulary, lane/score refusals, Herald missing/bad/forged/revoked, cohort exactness, FIX_VERIFIED gauntlet, surface disjointness 16 tools, static no-execution scan).",
 "checks": [
  {
   "id": "V1",
   "name": "canonical pagination_or_truncation accepted (C1)",
   "verdict": "pass",
   "evidence": "canonical pagination_or_truncation -> VERIFIED"
  },
  {
   "id": "V2",
   "name": "alternate spelling + near-miss classes refuse UNKNOWN_FRICTION_CLASS, never normalised",
   "verdict": "pass",
   "evidence": "11/11 near-misses -> UNKNOWN_FRICTION_CLASS, findings created=0; detail={'PAGINATION_TRUNCATION': 'UNKNOWN_FRICTION_CLASS', 'pagination': 'UNKNOWN_FRICTION_CLASS', 'schema_lie': 'UNKNOWN_FRICTION_CLASS', 'SCHEMA_LIE ': 'UNKNOWN_FRICTION_CLASS', ' pagination_or_truncation': 'UNKNOWN_FRICTION_CLASS', 'PAGINATION_OR_TRUNCATION': 'UNKNOWN_FRICTION_CLASS', 'auth_wall': 'UNKNOWN_FRICTION_CLASS', 'silent_empty': 'UNKNOWN_FRICTION_CLASS', 'Pagination_Or_Truncation': 'UNKNOWN_FRICTION_CLASS', 'pagination-or-truncation': 'UNKNOWN_FRICTION_CLASS', '': 'UNKNOWN_FRICTION_CLASS'}"
  },
  {
   "id": "V3",
   "name": "exactly Emic-12 + SCHEMA_LIE/SILENT_EMPTY/AUTH_WALL accepted",
   "verdict": "pass",
   "evidence": "15/15 spec classes VERIFIED; 16th invented class -> UNKNOWN_FRICTION_CLASS"
  },
  {
   "id": "V4",
   "name": "lane fields refuse UNEXPECTED_FIELD (any lane key)",
   "verdict": "pass",
   "evidence": "lane at finding/claim/pack/subject level -> {'finding.lane': 'UNEXPECTED_FIELD', 'claim.lane': 'UNEXPECTED_FIELD', 'pack.lane': 'UNEXPECTED_FIELD', 'subject.lane': 'UNEXPECTED_FIELD'}; nested entry-level lane is hash-bound pack data -> UNVERIFIED (entry schema is not field-enumerated; data, never a lane field on the finding)"
  },
  {
   "id": "V5",
   "name": "score/rating fields refuse SCORE_FIELD_REFUSED by name",
   "verdict": "pass",
   "evidence": "score-shaped fields -> {'satisfaction_score': 'SCORE_FIELD_REFUSED', 'rating': 'SCORE_FIELD_REFUSED', 'vendor_score': 'SCORE_FIELD_REFUSED', 'quality_score': 'SCORE_FIELD_REFUSED'}; findings=0"
  },
  {
   "id": "V6",
   "name": "structured claims only: unknown key / untyped values refuse by name",
   "verdict": "pass",
   "evidence": "claim discipline -> {'free_text_key': 'UNKNOWN_CLAIM_KEY', 'untyped_int': 'CLAIM_VALUE_UNTYPED', 'untyped_hash': 'CLAIM_VALUE_UNTYPED', 'empty_claims': 'CLAIM_REQUIRED'}"
  },
  {
   "id": "I1",
   "name": "identity: missing sig IDENTITY_UNVERIFIED; bad/mismatched sig SIGNATURE_INVALID; forged card refused",
   "verdict": "pass",
   "evidence": "{'missing_signature': 'IDENTITY_UNVERIFIED', 'string_identity': 'IDENTITY_UNVERIFIED', 'payload_mismatch_sig': 'SIGNATURE_INVALID', 'garbage_sig': 'SIGNATURE_INVALID', 'card_signed_by_other_key': 'IDENTITY_UNVERIFIED'}; findings=0"
  },
  {
   "id": "I2",
   "name": "revoked identity refuses at file, vendor action, feed and gate time",
   "verdict": "pass",
   "evidence": "revoked card refuses at file/vendor/feed/gate -> {'file_revoked': 'IDENTITY_REVOKED', 'vendor_ack_revoked': 'IDENTITY_REVOKED', 'feed_revoked': 'IDENTITY_REVOKED', 'gate_revoked': 'IDENTITY_REVOKED'}"
  },
  {
   "id": "I3",
   "name": "self-filing (identity + operator anchor), human subject, unregistered subject refuse by name",
   "verdict": "pass",
   "evidence": "{'vendor_self_file': 'SUBJECT_CONFLICT_SELF_FILING', 'same_operator_file': 'SUBJECT_CONFLICT_SELF_FILING', 'human_subject': 'SUBJECT_NOT_A_SURFACE', 'unregistered_subject': 'SUBJECT_NOT_REGISTERED'}"
  },
  {
   "id": "R1",
   "name": "third-party recompute reproduces pack_hash, chain head, verdict byte-identical (13.1.2)",
   "verdict": "pass",
   "evidence": "bench-side independent recompute (own code, spec 5.1): failure=None; pack_hash+chain_head byte-identical in store=True; board VERIFIED=VERIFIED; friction_verify(presented)=VERIFIED"
  },
  {
   "id": "R2",
   "name": "chain tamper matrix: every element names its first failure, stays UNVERIFIED/unlisted (H3)",
   "verdict": "pass",
   "evidence": "tamper matrix named first-failures: {'entry_deleted': 'SEQ_GAP', 'entries_reordered': 'CHAIN_BROKEN', 'entry_hash_forged': 'ENTRY_HASH_MISMATCH', 'result_hash_forged+rechained': 'RESULT_HASH_MISMATCH', 'shape_hash_forged+rechained': 'SHAPE_MISMATCH', 'pack_hash_forged': 'PACK_HASH_MISMATCH', 'chain_head_forged': 'CHAIN_BROKEN', 'subject_version_mismatch+rechained': 'SUBJECT_MISMATCH', 'copied_pack_other_identity': 'PACK_IDENTITY_MISMATCH'}; all UNVERIFIED + unlisted=True"
  },
  {
   "id": "R3",
   "name": "N-check core: fabricated/prose/self-signed/doctored filings never surface (13.1.1)",
   "verdict": "pass",
   "evidence": "incumbent fixture cannot surface: {'prose_no_pack': 'NO_EVIDENCE_PACK', 'self_signed_identity': 'IDENTITY_UNVERIFIED', 'doctored_state': 'UNVERIFIED', 'list_empty': True, 'feed_empty': True, 'gate_empty': True, 'radar_no_cells': True, 'foreign_get_blocked': True}"
  },
  {
   "id": "L1",
   "name": "every illegal response-state cross-transition refuses, state unchanged (6.3)",
   "verdict": "pass",
   "evidence": "illegal cross-transitions attempted=23, refused with state unchanged=23; slipped=[]"
  },
  {
   "id": "L1b",
   "name": "REBUTTED->WONTFIX is an extra transition not drawn in 6.3",
   "verdict": "pass",
   "evidence": "RE-BENCH D7 PASS: REBUTTED->WONTFIX -> ILLEGAL_RESPONSE_TRANSITION, state stays REBUTTED; ACKNOWLEDGED->WONTFIX legal; WONTFIX terminal \u2014 ACK/WONTFIX/REBUT/FIX_CLAIM exits all refuse ILLEGAL_RESPONSE_TRANSITION, state unchanged. Spec errata E1 present in the Errata appendix only (after '## Errata'), records the diagram discrepancy, normative text unchanged.",
   "rebench": "2026-10-25 scoped re-bench (D1-D7 fix round); supersedes bench-1 fail on this line"
  },
  {
   "id": "L2",
   "name": "FIX_VERIFIED unreachable without fresh-pack recompute AND CLEAN bench receipt (13.1.3)",
   "verdict": "pass",
   "evidence": "FIX_VERIFIED gauntlet: {'submit_before_claim': 'FIX_PROOF_REQUIRED', 'gate_still_grounds_on_claim': True, 'no_receipt': 'FIX_PROOF_REQUIRED', 'state_after_no_receipt': 'FIX_CLAIMED', 'failed_receipt_state': 'FIX_CLAIMED', 'doctored_plus_clean_receipt': ('FIX_CLAIMED', 'FAILED', 'ENTRY_HASH_MISMATCH'), 'receipt_for_other_pack': 'FIX_PROOF_REQUIRED', 'receipt_wrong_version': 'FIX_PROOF_REQUIRED', 'clean_plus_clean_receipt': 'FIX_VERIFIED', 'gate_clears_after_verified': True}"
  },
  {
   "id": "L2b",
   "name": "fix pack must be identity-bound (5.3.6 binding applied to fix_submit)",
   "verdict": "pass",
   "evidence": "RE-BENCH D6 PASS under adjudicated reading (ruling 6, ACCEPT vendor-of-record anchor): fresh pack bound to third-party stranger + CLEAN receipt -> stays FIX_CLAIMED, FixVerification FAILED/PACK_IDENTITY_MISMATCH; pack bound to original filer + CLEAN -> also FAILED/PACK_IDENTITY_MISMATCH (consistent: filer has no standing on the vendor surface); legitimate subject-vendor-bound pack + CLEAN receipt -> FIX_VERIFIED (control).",
   "rebench": "2026-10-25 scoped re-bench (D1-D7 fix round); supersedes bench-1 fail on this line"
  },
  {
   "id": "L3",
   "name": "response transitions on UNVERIFIED findings refuse FINDING_NOT_VERIFIED",
   "verdict": "pass",
   "evidence": "all vendor actions on UNVERIFIED finding -> {'ACK': 'FINDING_NOT_VERIFIED', 'WONTFIX': 'FINDING_NOT_VERIFIED', 'REBUT': 'FINDING_NOT_VERIFIED', 'FIX_CLAIM': 'FINDING_NOT_VERIFIED', 'FIX_SUBMIT': 'FINDING_NOT_VERIFIED'}"
  },
  {
   "id": "L4",
   "name": "WONTFIX is terminal and citable/resolved for gates",
   "verdict": "pass",
   "evidence": "WONTFIX exits all refuse by name (FIX_SUBMIT hits the proof gate first: FIX_PROOF_REQUIRED) -> {'ACK': 'ILLEGAL_RESPONSE_TRANSITION', 'WONTFIX': 'ILLEGAL_RESPONSE_TRANSITION', 'REBUT': 'ILLEGAL_RESPONSE_TRANSITION', 'FIX_CLAIM': 'ILLEGAL_RESPONSE_TRANSITION', 'FIX_SUBMIT': 'FIX_PROOF_REQUIRED'}; state stays WONTFIX; WONTFIX counts resolved for gates (grounding=0)"
  },
  {
   "id": "L5",
   "name": "original never edited: hash stable through vendor flows; edit attempt FINDING_EDIT_REFUSED",
   "verdict": "pass",
   "evidence": "finding_hash recomputes from untouched core after ACK/REBUT/FIX_CLAIM=True; re-file with existing finding_id -> FINDING_EDIT_REFUSED"
  },
  {
   "id": "L6",
   "name": "import ceiling: Emic + #2369 land UNVERIFIED stated-only, VERIFIED unreachable",
   "verdict": "pass",
   "evidence": "imports land UNVERIFIED/stated-only -> {'emic_wire': ('UNVERIFIED', 'imported_emic', True), 'mcp2369_feedback_submit': ('UNVERIFIED', 'imported_mcp2369', True), 'ask_verified': 'IMPORT_CANNOT_VERIFY', 'listed': [], 'ack_import': 'FINDING_NOT_VERIFIED'}"
  },
  {
   "id": "B1",
   "name": "board never executes: no execution/network code path; pack content is data only (Law #1)",
   "verdict": "pass",
   "evidence": "static scan of engine+server+signing for execution/network primitives: hits=[]; injection-shaped tool name filed as quoted data, marker file created=False; recompute-only confirmed (fix path consumes register_bench_receipt state, no call path exists)"
  },
  {
   "id": "B2",
   "name": "board receipt hash-chain verifies offline and detects tamper (5.6)",
   "verdict": "pass",
   "evidence": "receipt chain verifies=True (3 receipts); tampered outcome -> valid=False, failure_seq=2"
  },
  {
   "id": "C1",
   "name": "cohort suppression: <5 identities or <3 operators renders NO numbers (9.2, H1)",
   "verdict": "pass",
   "evidence": "cohort: 4id/3op=(True, True), 5id/2op=(True, True), 5id/3op renders=(False, 5, 3, 5), Sybil 12id/1op=(True, True, True); suppressed cells carry zero numeric keys"
  },
  {
   "id": "C2",
   "name": "NO_MINE, UNVERIFIED and dogfood excluded from Radar including counters",
   "verdict": "pass",
   "evidence": "digest cells=[('pagination_or_truncation', 5, False)]; NO_MINE/UNVERIFIED/dogfood classes produce no cell and no counter"
  },
  {
   "id": "C3",
   "name": "NO_MINE data contributes nothing to Radar \u2014 including fix-latency",
   "verdict": "pass",
   "evidence": "RE-BENCH D1 PASS: base cell (5, median=None, unsuppressed); after NO_MINE finding driven to FIX_VERIFIED: (count=5, median=None); after dogfood finding with CLEAN FixVerification driven to FIX_VERIFIED: (5, None); after AGGREGATE finding driven to FIX_VERIFIED then SUPERSEDED (NO_MINE successor): (5, None). No excluded finding moved any rendered stat.",
   "rebench": "2026-10-25 scoped re-bench (D1-D7 fix round); supersedes bench-1 fail on this line"
  },
  {
   "id": "C4",
   "name": "per-filer/per-operator mining lookup refuses FILER_LOOKUP_REFUSED / tool absent",
   "verdict": "pass",
   "evidence": "internal filer_lookup -> FILER_LOOKUP_REFUSED; no per-filer tool exists on any surface (see D1)"
  },
  {
   "id": "Q1",
   "name": "quota 100/30d counts verified + unverified + imports (H7)",
   "verdict": "pass",
   "evidence": "limit=3 (bench-set config): verified+unverified+import consume budget; 4th filing -> FILER_QUOTA_EXCEEDED; findings=3"
  },
  {
   "id": "Q2",
   "name": "quota cannot be evaded by manipulating caller timestamps",
   "verdict": "pass",
   "evidence": "RE-BENCH D4 PASS: limit=3, 3 filings at 2026-10-25T14:03:00-04:00; 4th same-ts -> FILER_QUOTA_EXCEEDED; 4th filed_at +51d (2026-12-15) -> FILER_QUOTA_EXCEEDED; findings stay 3. Import path (2 files + 1 import = 3): 4th import future-dated AND honest-ts both -> FILER_QUOTA_EXCEEDED, findings stay 3, imports land UNVERIFIED. Caller filed_at recorded verbatim as data; board_received_at board-clock stamp separate.",
   "rebench": "2026-10-25 scoped re-bench (D1-D7 fix round); supersedes bench-1 fail on this line"
  },
  {
   "id": "Q3",
   "name": "consent matrix: VENDOR_ONLY never leaks to filer/public surfaces; enums enforced",
   "verdict": "pass",
   "evidence": "VENDOR_ONLY: public list empty=True, anon get blocked=True, identified foreign get refused=True, filer+vendor get ok, vendor feed carries it, foreign feed -> VENDOR_NOT_SUBJECT; invalid consent values -> CONSENT_CLASS_INVALID x2"
  },
  {
   "id": "Q4",
   "name": "supersede semantics: successor followed by listings/gates, superseded still citable",
   "verdict": "pass",
   "evidence": "supersede: non-filer -> SUPERSEDE_NOT_FILER; original SUPERSEDED, still citable via get (state=SUPERSEDED), listing+gate follow successor; stored-pack verify of superseded original reports VERIFIED (matches_stored_record compares against VERIFIED only \u2014 cosmetic)"
  },
  {
   "id": "Q5",
   "name": "supersede lineage bound to the original subject",
   "verdict": "pass",
   "evidence": "RE-BENCH D5 PASS: subj-b1 VERIFIED blocking finding, gate grounds=1; cross-subject supersede onto subj-other -> SUBJECT_MISMATCH refusal; original stays VERIFIED, superseded_by=None, gate(subj-b1) still grounds=1. Control: same-subject supersede -> successor VERIFIED, original SUPERSEDED, gate follows successor (grounding=1 on successor finding_id).",
   "rebench": "2026-10-25 scoped re-bench (D1-D7 fix round); supersedes bench-1 fail on this line"
  },
  {
   "id": "S1",
   "name": "secret-shaped filings refuse whole SECRET_IN_PACK, zero bytes persisted (5.2)",
   "verdict": "pass",
   "evidence": "RE-BENCH D2 PASS: raw pre-canonicalisation scan at all 4 sites. File site: bench-exact api_key = \"supersecretvalue1\" plus sk-/ghp_/AKIA/Bearer/BEGIN PRIVATE KEY/password/client_secret/access_token quoted variants (10 shapes + args_payload arm) -> all SECRET_IN_PACK, 0 findings, 0 packs, secret string absent from canon(state). Import site: exact string + Bearer in record -> SECRET_IN_PACK, nothing stored. Rebut site: secret in rebuttal pack -> SECRET_IN_PACK, vendor_records unchanged, state ACKNOWLEDGED. Fix_submit site: Bearer in fresh pack -> SECRET_IN_PACK, stays FIX_CLAIMED, pack not stored. Clean control filing VERIFIED. Refuse-not-redact confirmed everywhere.",
   "rebench": "2026-10-25 scoped re-bench (D1-D7 fix round); supersedes bench-1 fail on this line"
  },
  {
   "id": "S2",
   "name": "shapes_only payloads reduced at ingest, not merely redacted at render (5.1)",
   "verdict": "pass",
   "evidence": "RE-BENCH D3 PASS: shapes_only pack stored payload-free at ingest (shapes+hashes retained); board-rendered pack == stored pack; bench-side independent recompute of rendered pack = clean (None) and friction_verify = VERIFIED/no failure \u2014 no ENTRY_HASH_MISMATCH. Already-shaped pack: stored hash == presented hash (no double-reduction), VERIFIED. Tampered packs (payload tamper, tool-field tamper) -> UNVERIFIED / ENTRY_HASH_MISMATCH on presented hashes (reduction does not launder). VENDOR_ONLY + shapes_and_payloads_public pack: same ingest reduction (stored payload-free), public list=0, anon get NOT_LISTED_FOR_CALLER, vendor get OK, vendor-rendered pack recomputes clean.",
   "rebench": "2026-10-25 scoped re-bench (D1-D7 fix round); supersedes bench-1 fail on this line"
  },
  {
   "id": "G1",
   "name": "gate grounding + grounded_on citation re-verifies offline; non-grounding set excluded (13.1.4)",
   "verdict": "pass",
   "evidence": "gate: {'grounding': 1, 'citation_recomputes': True, 'wrong_version': [], 'after_nonblocking_still': 1, 'vendoronly_foreign': 'GATE_SUBJECT_MISMATCH', 'vendoronly_vendor': 1}"
  },
  {
   "id": "T1",
   "name": "parse_time guard: missing/naive/date-only/natural/epoch refuse TIMESTAMP_* everywhere (5.5)",
   "verdict": "pass",
   "evidence": "parse_time guard on file/vendor/gate/radar/list/feed inputs -> {'filed_at=None': 'TIMESTAMP_MISSING', \"filed_at='2026-10-25T14:03:00'\": 'TIMESTAMP_UNPARSEABLE', \"filed_at='2026-10-25'\": 'TIMESTAMP_UNPARSEABLE', \"filed_at='next tuesday'\": 'TIMESTAMP_UNPARSEABLE', \"filed_at='1760000000'\": 'TIMESTAMP_UNPARSEABLE', \"filed_at='1760000000000'\": 'TIMESTAMP_UNPARSEABLE', 'vendor_ts_naive': 'TIMESTAMP_UNPARSEABLE', 'gate_at_missing': 'TIMESTAMP_MISSING', 'radar_natural': 'TIMESTAMP_UNPARSEABLE', 'list_since_dateonly': 'TIMESTAMP_UNPARSEABLE', 'feed_since_epoch': 'TIMESTAMP_UNPARSEABLE'}; no board-now substitution (findings still 1)"
  },
  {
   "id": "CC1",
   "name": "CC0 Emic credit + powered-by + descriptor on surfaces (4.1/G4, brand)",
   "verdict": "pass",
   "evidence": "CC0 credit in friction_list vocabulary block=True, README credit+powered-by present, descriptor verbatim on list output"
  },
  {
   "id": "O1",
   "name": "no scores/leaderboards/rankings/characterisation in ANY output surface (4.5)",
   "verdict": "pass",
   "evidence": "banned score/rank/characterisation vocabulary in success outputs of 6 surfaces: hits={}; board_status leaks filer/vendor identity hashes=False"
  },
  {
   "id": "D1",
   "name": "surface disjointness + denylist: identical unknown-tool refusal, no oracle (7/7.5/H9)",
   "verdict": "pass",
   "evidence": "4 surfaces x (cross-surface + 15 denylist names): byte-identical unknown-tool refusal, tools/list exact per surface, total tools=16, problems=[]"
  },
  {
   "id": "D2",
   "name": "process isolation via stdio subprocess: ECLIPSE_FRICTION_SURFACE pins the surface",
   "verdict": "pass",
   "evidence": "real subprocess, one process = one surface: {'filer': (6, 'filer', 'Eclipse Friction \u2014 the signed ', -32602, 'unknown tool: friction_radar_digest'), 'operator': (3, 'operator', 'Eclipse Friction \u2014 the signed ', -32602, 'unknown tool: friction_file')}"
  },
  {
   "id": "F1",
   "name": "fuzz: malformed containers -> named refusals, zero -32603, zero crashes (13.4)",
   "verdict": "pass",
   "evidence": "schema-enumerating fuzz w/ VALID signed context, all 16 tools: cases=721, raw -32603/crash escapes=0 required, violations=[]"
  },
  {
   "id": "N1",
   "name": "N-check: renamed-incumbent shim must fail >=80% of fixtures (13.5)",
   "verdict": "pass",
   "evidence": "renamed-incumbent shim passes 2/25 bench fixtures = 8% (novelty requires <=20%): passes only ['well-formed filing accepted+listed', 'revoked identity refused']"
  }
 ],
 "novelty": {
  "mechanism_one_line": "A friction filing surfaces only after the board RECOMPUTES its Herald-signed, hash-chained trace pack (chain/seq/pack-hash/shape/result-hash/identity-binding/subject) \u2014 faking a filing requires actually executing the calls and holding the identity key; fixes surface only the same way, via a fresh recomputed pack plus an out-of-band CLEAN Bench REPLAY receipt.",
  "n_check": "PASS \u2014 NOVELTY_PROVEN: renamed-incumbent shim (Emic/ERC-8004/VoA capabilities under Friction tool names, no recompute/Herald/replay/cohort/gate-citation) passes 2/25 bench fixtures = 8% (<=20% required by S13.5); its only passes are 'well-formed filing accepted+listed' and a shim-side revocation stub. Distinguishing tests R1/R2/R3/L2/G1 all pass against the real build.",
  "distinguishing_test_result": "13.1.1 doctored trace UNVERIFIED + invisible on list/feed/gate/radar (R3 pass); 13.1.2 third-party recompute byte-identical (R1 pass); 13.1.3 unproven fix never flips, CLEAN replay flips (L2 pass); 13.1.4 gate citation re-verifies offline (G1 pass)"
 },
 "n_check_note": "N-check stands from bench 1 (PASS / NOVELTY_PROVEN) \u2014 not re-run; no fix touched the novel mechanism (recompute/Herald/replay/cohort/gate-citation unchanged in kind).",
 "defects": [],
 "defects_open": [],
 "defects_closed": [
  {
   "id": "D1",
   "check": "C3",
   "verdict": "CLOSED",
   "probe": "NO_MINE, dogfood+CLEAN, and SUPERSEDED+old-CLEAN findings each driven to FIX_VERIFIED against a rendering cell; verified_pack_count stayed 5 and fix_latency_median_days stayed None in all three arms."
  },
  {
   "id": "D2",
   "check": "S1",
   "verdict": "CLOSED",
   "probe": "Bench-exact api_key = \"supersecretvalue1\" and 9 other raw pattern families refused SECRET_IN_PACK at file; exact/Bearer shapes refused at import, rebut, fix_submit; canon(state) scan after every refusal: no scanned-positive content persisted anywhere; clean control VERIFIED."
  },
  {
   "id": "D3",
   "check": "S2",
   "verdict": "CLOSED",
   "probe": "Store inspection: shapes_only payloads absent at ingest, shapes+hashes retained; rendered pack byte-equal to stored pack and recomputes clean under bench-side independent recompute; already-shaped pack hash unchanged; tampered packs fail UNVERIFIED/ENTRY_HASH_MISMATCH on presented hashes; VENDOR_ONLY packs reduced at ingest with listing consent intact."
  },
  {
   "id": "D4",
   "check": "Q2",
   "verdict": "CLOSED",
   "probe": "Limit 3: 4th filing at +51d filed_at refuses FILER_QUOTA_EXCEEDED on the file path and on the import path; findings count stays 3 both paths; caller filed_at preserved as data only, quota anchored to board_received_at."
  },
  {
   "id": "D5",
   "check": "Q5",
   "verdict": "CLOSED",
   "probe": "Bench-exact cross-subject supersede (subj-b1 -> subj-other) refuses SUBJECT_MISMATCH; original remains VERIFIED, superseded_by=None, gate(subj-b1) still grounds on it (1); same-subject control supersedes and gate follows successor."
  },
  {
   "id": "D6",
   "check": "L2b",
   "verdict": "CLOSED under adjudicated reading (ruling 6: ACCEPT vendor-of-record anchor)",
   "probe": "Stranger-bound fresh pack + CLEAN receipt -> no flip (FAILED/PACK_IDENTITY_MISMATCH); original-filer-bound pack + CLEAN -> no flip (same failure, consistent with ruling); subject-vendor-bound pack + CLEAN receipt -> FIX_VERIFIED (control). Defect closes under both readings on the stranger arm, which was the bench-1 defect."
  },
  {
   "id": "D7",
   "check": "L1b",
   "verdict": "CLOSED",
   "probe": "REBUTTED->WONTFIX refuses ILLEGAL_RESPONSE_TRANSITION with state unchanged; ACKNOWLEDGED->WONTFIX legal; WONTFIX terminal from every attempted exit; spec errata E1 located in the Errata appendix only, normative text unchanged."
  }
 ],
 "ambiguity_rulings": [
  {
   "n": 1,
   "resolution": "WONTFIX via friction_acknowledge action_kind (no 17th tool)",
   "ruling": "ACCEPT",
   "reasoning": "S7 enumerates exactly 16 tools and S6.3 makes WONTFIX first-class; riding the ack tool keeps the surface exact, the action is Herald-signed identically, and bench confirms WONTFIX is reachable only after ACK and is terminal (L4). The separate REBUTTED->WONTFIX extra transition is charged as defect D7, not to this resolution."
  },
  {
   "n": 2,
   "resolution": "Signature code split: missing -> IDENTITY_UNVERIFIED, present-but-failing/payload-mismatched -> SIGNATURE_INVALID",
   "ruling": "ACCEPT",
   "reasoning": "Both codes exist in S4.3 with no explicit trigger split; this reading gives each a distinct, testable trigger and matches S4.3's wording (IDENTITY_UNVERIFIED covers 'signature missing/invalid' identity-level failure at card stage). Verified behaviourally in I1: missing/garbage-card cases and payload-mismatch cases land on the documented sides of the split consistently."
  },
  {
   "n": 3,
   "resolution": "SUBJECT_MISMATCH as the named recompute failure for pack subject/version != finding",
   "ruling": "ACCEPT",
   "reasoning": "S5.3.6 mandates the equality check but its failure enum names no code; a dedicated named failure is strictly better than mislabelling it PACK_HASH_MISMATCH, and it surfaces in the verification record as the named first failure (R2 tamper matrix: subject_version_mismatch+rechained -> SUBJECT_MISMATCH). Spec should be amended to add it to the S5.3 enum."
  },
  {
   "n": 4,
   "resolution": "SUBJECT_NOT_REGISTERED / SUBJECT_NOT_A_SURFACE refusal names",
   "ruling": "ACCEPT",
   "reasoning": "SUBJECT_NOT_A_SURFACE is verbatim S4.3. SUBJECT_NOT_REGISTERED is a necessary named refusal: self-filing checks, feed delivery and gate checks all require a registered subject vendor, and filing against a ghost subject cannot be admitted or left as a raw KeyError; the name follows house convention and refuses before any finding is created (I3)."
  },
  {
   "n": 5,
   "resolution": "Bench REPLAY receipts registered out-of-band in local state at P0 (register_bench_receipt, not a tool)",
   "ruling": "ACCEPT",
   "reasoning": "S7's 16-tool surface has no bench tool and S5.4 defines Friction as the receipt's consumer, never its issuer; an engine-level bench-side write is the only spec-consistent P0 route and preserves the recompute/replay split (B1: no execution path exists in the board). Caveats recorded, not charged to this resolution: the S5.4 receipt shape binds pack_hash+new_version only (not finding_id), so the same fresh pack+receipt can prove fixes on multiple findings of the same subject+version \u2014 that follows the spec's own receipt shape; the identity-binding gap in fix_submit is defect D6."
  },
  {
   "n": 6,
   "resolution": "friction_fix_submit recompute anchors the fresh pack's identity binding to the board-recorded SUBJECT-VENDOR identity for the finding (the identity _vendor_gate authenticates), not the pack's self-declared filer hash and not literally the original filer's identity",
   "ruling": "ACCEPT \u2014 vendor-of-record anchor is the spec-consistent binding",
   "reasoning": "Section 7.2 defines the vendor surface as 'subject-vendor identity only' and friction_fix_submit sits on it; section 6.3's vendor actions are the subject vendor's signed actions, and the fresh pack is the vendor's own trace evidence of the fixed surface, recorded by the vendor. Section 5.3 step 6's pack-to-identity binding, applied at fix_submit, binds the pack to the authenticated presenter of that surface \u2014 the subject vendor of record \u2014 exactly as friction_rebut already binds its pack to its authenticated caller. The original filer has no standing on the vendor surface, holds no key the vendor could record with, and a literal filer anchor would make the legitimate section 6.3 fix path unusable while adding no security: the defect in bench 1 was that the pack was bound to nobody authenticated, and that defect is closed \u2014 a stranger-bound pack now fails PACK_IDENTITY_MISMATCH and never flips, and the subject-vendor control flips. Behaviour verified three-arm in the re-bench (stranger FAIL, filer-bound FAIL, vendor-bound FIX_VERIFIED)."
  }
 ],
 "regression_spot_lines": "ALL UNBROKEN: canonical pagination_or_truncation VERIFIED, 5/5 near-misses UNKNOWN_FRICTION_CLASS, lane -> UNEXPECTED_FIELD, score field -> SCORE_FIELD_REFUSED; Herald missing -> IDENTITY_UNVERIFIED, wrong-key sig -> SIGNATURE_INVALID, forged card -> IDENTITY_UNVERIFIED, revoked -> IDENTITY_REVOKED; cohort below-threshold (4id) suppressed with zero numeric keys, at-threshold (5id/3op) renders count=5; FIX_VERIFIED gauntlet: no receipt -> FIX_PROOF_REQUIRED (stays FIX_CLAIMED), FAILED receipt -> stays FIX_CLAIMED, doctored pack + CLEAN receipt -> FAILED/ENTRY_HASH_MISMATCH, clean vendor pack -> FIX_VERIFIED; surfaces disjoint (6+6+1+3=16 tools); static scan: no execution/network call-form primitives in engine+server+signing (RECOMPUTE only).",
 "builder_claims_check": "Builder-reported 67/67 reproduced independently (unittest discover: 67 tests OK, 41s), consistent with the fix-round claim (55 prior + 12 new). Builder claims were not relied on for any verdict above.",
 "notes_for_rook": "CERTIFIED(local) may be set in the Bazaar manifest for Eclipse Friction on the basis of this card. Prior PARTIAL card retained unmodified; this card is append-only (suffix -2).",
 "scope_ceiling": "local (P0). Nothing here certifies hosted/public behaviour."
}