{"bench":"Verity SCOPED RE-BENCH — Eclipse Scholarly Record Witness fix round @ 4f49b54. Scope per card -1: SRW-D1 + SRW-D2 (gating MEDs) verified on both surfaces (server audit_verify + offline tools/verify.py) with card-1's exact repro shape plus fresh shapes; SRW-D3–D6 ride-alongs; adjudication-5 wording correction; gold receipt + sealed-snapshot regression. Builder suite re-run first-hand; fresh battery driven against the real sealed snapshot and an independently rebuilt fixture. Proof files treated as claims, never evidence.","benched_at":"2026-10-26","card":"eclipse-scholarly-witness-mcp-2026-10-26-2","checks":{"detail":"Builder suite re-run first-hand: 23/23 OK (claim confirmed). D1 battery 15/15: card-1 repro shape re-minted on the real snapshot (6 inputs, NEJM DOI duplicated) — duplicates_collapsed=[doi:10.1056/nejmoa2007621], input_count=6, identifier_count=5, input_identifiers verbatim in submission order; audit_verify RECOMPUTE_MATCH seal_verified=true; offline tools/verify.py MATCH exit 0. Fresh shapes: triple-duplicate + duplicated malformed identifiers verify MATCH. Tamper battery — every variant RECOMPUTE_DIVERGES BY NAME on the server surface: cleared duplicates_collapsed -> duplicates_collapsed; dropped occurrence from input_identifiers -> diverges; input_count altered -> input_count; attribution altered -> attribution; sealed_at altered -> sealed_at; sources_consulted trimmed -> sources_consulted; coverage works_count altered -> coverage.works_count; genuine RETRACTED line's verdict altered -> lines[1].verdict; population count altered -> population_counts.population_1_with_events; line events emptied -> lines[0].events.length; line reorder -> lines[0].divergences. Offline tamper (cleared duplicates_collapsed) exits 1 naming duplicates_collapsed. Input-list reorder diverges at seal (the seal binds the raw list verbatim; field recompute is seed-symmetric by construction — tamper-evident, named). D2 census 13/13 over BOTH the fresh minted receipt and the shipped gold receipt: attribution string verbatim ('Retraction Watch data via Crossref redistribution, CC-BY: Retraction Watch (retractionwatch.com) / Crossref.'), sources_consulted == [CROSSREF_PUBLISHER, CROSSREF_RW, PUBMED_NLM], coverage block complete (per-source blocks with windows, event_class_counts, works_count, known_bounds, provenance_counts), sealed_at == manifest seal date 2026-10-26T13:25:53Z, coverage_limits present. D3 5/5: disposition_lookup carries sealed_at + sources_consulted + coverage_window + coverage_limits on the found-RETRACTED branch, the NOT_FOUND branch, and a NO_NOTICE_FOUND branch, with sane values. D4 2/2: work_resolve returns the work's pins (Wakefield work: crossref-work + pubmed-record pins, each with kind + pull_id + source_record_hash). D6 4/4 on an independently rebuilt fixture: reinstatement-only line prints its 1 REINSTATEMENT event and counts population_1_with_events=1 / population_2=0 (was population_2 at card -1); disposition_lookup prints the event; mixed 3-line audit populations sum exactly (2/0/1). Regression 4/4: regenerated gold receipt rcpt_68a0a453ad5ecb16 verifies MATCH offline (seal_verified=True, exit 0) AND via server audit_verify; snapshot root recompute via verify.py MATCH root ea6bc90cf693...; builder suite 23/23. Two initial battery flags were bench-harness artifacts, resolved on inspection (see observations).","fail":0,"pass":52,"total":52},"conditions":["Scope stays fixture: receipts and snapshot are FIXTURE_SIGNED (house fixture HMAC key, disclosed in the seal block); no live/production claim attaches until a live signer decision (spec O3) is taken.","Pre-A4 receipt artefacts are superseded: a receipt minted before the §9.3 shape completion (e.g. the card-1-era gold file) now diverges at 'attribution' under the current verifier — verified first-hand. This is the documented A4 shape change, the receipt ID formula (list_hash, snapshot_id, canon) is untouched so rcpt_68a0a453ad5ecb16 legitimately persists, the shipped gold receipt was regenerated at the same ID and verifies MATCH, and no pre-A4 receipt was ever distributed (fixture scope, pre-listing). Any future receipt-shape change after distribution would need a compatibility ruling before shipping."],"defects":[],"fix_verification":{"SRW-D1":"FIXED. Receipts carry input_identifiers (raw list verbatim) + input_count; verify_audit_body seeds from the raw list (legacy fallback: lines + one re-added occurrence per duplicates_collapsed entry). Card-1's repro receipt shape now verifies MATCH on audit_verify and verify.py; the fix does NOT weaken divergence — 11 tamper variants diverge by name (see checks).","SRW-D2":"FIXED. Receipt body carries sealed_at, sources_consulted, coverage (the snapshot's §6.3 block verbatim), attribution (CC-BY string, grep-present and value-verified), input_count alongside identifier_count — census-verified on minted + gold receipts.","SRW-D3":"FIXED. disposition_answer and the NOT_FOUND branch both spread as_of_block (sealed_at, sources_consulted, coverage_window per source, coverage_limits) — all branches censused.","SRW-D4":"FIXED. work_resolve surfaces the sealed work record's pins. The per-pin source label is the canon pin shape itself (kind = source-record type, e.g. crossref-work / pubmed-record, + pull_id tracing to the manifest pull block + source_record_hash). No CROSSREF_PUBLISHER-style provenance token exists in sealed work records (that token lives on event provenance_pins), so nothing further can be surfaced without a reseal; surfacing is complete against the sealed record.","SRW-D5":"FIXED. CANON.md §2a errata records the hashed shapes as built, covering every card-1 item: kind field (4 values), Crossref work/notice shapes, the UNIFIED PubMed record (no two-shape split; eSummary shape separate), pub_types ordering (eFetch sorted+deduped, eSummary sorted), links from RefPMID with ref_doi trailing punctuation . , ; ) ] stripped before normalization. States the errata governs §2 where they differ and the seal is unaffected.","SRW-D6":"FIXED under amendment A3 (recorded in AMENDMENTS.md + SPEC §18). Populations derive from the event set each line prints: reinstatement-only counts population_1; the headline stays the residual NO_NOTICE_FOUND because §7.2's vocabulary is closed and §7.3 bars REINSTATEMENT from carrying a headline verdict in either direction. Verdict and population are now consistent with the printed events under that ruling. Zero sealed-corpus instances, as at card -1.","adjudication_5_wording":"CORRECTED. Amendment A5 (AMENDMENTS.md, indexed in SPEC §18) states the sealed truth verbatim as card -1 established it: 4 PARTIAL_RETRACTION pins over 2 events; the second work's pins sit in CORRECTION-class evt_39ca3c247af1ea7b under the CANON §3 first-pin rule (NOT a RETRACTION-class event), 12 pins / 6 classes preserved, TYPE_DISAGREEMENT div_7d26c29d3a29ed6b minted."},"head_at_bench":"4f49b544ed2cb94a417a4ba55fda60fdf375636f","live_proof_verification":"Sealed snapshot untouched by the fix round: tools/verify.py snapshot recompute -> MATCH root=ea6bc90cf693fcaa24ca01d248fb6ee08719951363c5ecefbfdb549cc02b7b3a (exit 0). Gold receipt rcpt_68a0a453ad5ecb16 (regenerated at the same ID under A4) verifies MATCH offline with seal_verified=True and via server audit_verify. Fresh duplicate-bearing receipt minted against the real snapshot verifies MATCH on both surfaces first-hand.","n_check":{"criterion_met":true,"finding":"Unchanged from card -1 (NOVELTY_PROVEN): the fix round touched only the receipt/verifier surface and answer completeness inside the novel mechanism (seal + divergence + snapshot-bound receipts). No retrieval or search-shaped capability added; tools remain 9, retrieval 1/9."},"observations":["OBS-1 (LOW, non-gating, harness-surface only): FixtureSigner.verify() returns False when the key has not been loaded in-process, while seal() auto-loads. An in-process consumer that calls audit_verify before any seal operation in the same process sees RECOMPUTE_DIVERGES at field 'seal' on a genuine receipt (body recompute itself MATCHes). Both shipped surfaces load correctly (server main() calls load_or_create at startup; tools/verify.py uses load_existing). Bench hit this twice and resolved it as a harness artifact both times; a load-on-verify would remove the footgun for embedders.","OBS-2: the drift artefact (§10.2) is a distinct artefact kind from the §9.3 audit receipt and carries its own normative fields (both snapshot IDs + roots, verdict changes, standing sentence) — censused and conformant to §10.2; §9.3's attribution/coverage fields do not apply to it. Noted so the D2 census scope is explicit: every reference_audit receipt carries the full §9.3 set.","OBS-3: input_identifiers order is bound by the seal, not by field recompute (the verifier seeds from the receipt's own list, so a reordered list recomputes identically and is caught at the seal check, diverging by the name 'seal'). Tamper-evidence holds end-to-end on both surfaces; noted for the sceptic's map of which layer binds what."],"prior_card":"eclipse-scholarly-witness-mcp-2026-10-26","product":"eclipse-scholarly-witness-mcp","scope_language_exact":"CERTIFIED(local, fixture scope) — sealed snapshot srw-20261026-ea6bc90cf693 (root ea6bc90cf693fcaa24ca01d248fb6ee08719951363c5ecefbfdb549cc02b7b3a, untouched by the fix round), duplicate-bearing audit receipts recompute MATCH on both verification surfaces with tamper-by-name divergence, receipts carry the full §9.3 field set incl. the CC-BY attribution, disposition answers carry the §6.3 as-of block on all branches, work_resolve surfaces per-pin source labels, and the reinstatement-only population shape is consistent under amendment A3. Fixture signer (FIXTURE_SIGNED) — no live/production claim; PubMed errata coverage window 2023-01-01..2026-10-26 remains disclosed in the manifest known_bounds.","spec":"~/workspace/cyan-eclipse/scholarly-record-witness-spec-20261026.md (srw-canon/1.0) + docs/CANON.md (incl. §2a errata) + docs/AMENDMENTS.md (A1–A5); gate scholarly-record-witness-gate-20261026.md","tree":"~/workspace/cyan-eclipse/eclipse-scholarly-witness-mcp @ 4f49b54 (private repo)","verdict":"CERTIFIED(local, fixture scope)"}