{"bench":"Verity SCOPED re-bench — fix round for card eclipse-recall-witness-mcp-2026-10-26 (RW-D1..RW-D6 + transport repoint). Closed areas not re-benched. Fresh shapes throughout; the fix code was the target.","benched_at":"2026-10-26","card":"eclipse-recall-witness-mcp-2026-10-26-2","checks":{"detail":"Builder suites reproduced first-hand: run_tests.py 35/35 OK, test_fix_round_rw.py 18/18 OK, smoke PASS. Bench fresh battery 65 checks (54 counted + 6 RW-D1 paraphrase-gap probes + 3 RW-D5 chain probes + 2 RW-D3 synonym probes): 53 pass / 1 fail (RW-D7) in the counted battery; probes grouped as RW-D8 (2 genesis shapes) and RW-D9 (6 paraphrase gaps). Live-proof verification 5/5 (see live_proof_verification). Independent API cross-signal: 15 campaigns re-fetched live from api.nhtsa.gov, every returned row's phrase tags agree with the API's own parkIt/parkOutSide flags (15/15 campaigns).","fail":9,"pass":127,"total":136},"conditions":["RW-D7 + RW-D9 land at the next grammar touch (recall-events/1.2) BEFORE any escalation-completeness claim beyond the live-stock-proven families; RW-D8 lands at the next seal-store touch. None blocks CERTIFIED(local, fixture scope).","Live scope remains gated on: first real nightly ingest (www-odi reachable) + live-key cutover (owner). The live-API proof upgrades cross-check + check issuance to live-proven; it does NOT upgrade the nightly spine, which remains fixture-proven."],"defects":[{"evidence":"Fresh negative: 'The vehicle may roll away while parked outside the owner's home, increasing the risk of a crash.' -> advisory_tags [PARK_OUTSIDE]. The matcher scans the union of defect/consequence/remedy tokens and the park-stem + outside window (5) cannot distinguish an owner-directed advisory from a rollaway narrative describing where the vehicle was parked. No live-stock instance was found (15/15 campaigns agree with API flags, including the rollaway-adjacent negatives sampled), and the verbatim text remains sealed beside the tag, so the harm is a false drift class on a constructed-but-plausible shape — the mirror image of RW-D1 at far lower frequency. Fix at the next grammar touch (recall-events/1.2): require owner-directed voice for the park family (advised/should/please/do-not within the window, or the away-from-structures shape), and add this shape as a regression.","id":"RW-D7","severity":"LOW","title":"Park-outside matcher tags narrative 'parked outside' text (false PARK_OUTSIDE escalation shape)"},{"evidence":"Fresh tampers on a two-night store: setting vintages[0].prev_vintage_hash to 'f'*64 (it is None by construction) -> verify_receipt MATCH; setting anchors[0].prev_anchor_hash to 'f'*64 -> MATCH. _chain_break starts both walks at index 1, so the genesis links — the one place a forged predecessor could be grafted — are unchecked. Content integrity is unaffected (record hashes + seals still verify, and anchor bodies are not re-hashed by verify at any index — pre-existing, outside RW-D5's link scope). Fix: assert genesis prev values are None in _chain_break (both verify_receipt and recompute.py inherit it), regression = these two shapes.","id":"RW-D8","severity":"LOW","title":"Chain walk never asserts the genesis links: first-vintage prev_vintage_hash and first-anchor prev_anchor_hash tampers verify MATCH"},{"evidence":"Fresh paraphrase probes that tag NOTHING: 'The vehicle should not be operated until repaired.', 'Never operate the vehicle until it is repaired.', 'Stop operating the vehicle immediately.', 'Owners should refrain from operating the vehicle until repaired.', 'Keep the vehicle outdoors and away from structures until repaired.' (no park verb), 'Do not use the vehicle until the repair is complete.'. Unlike card -1's RW-D1, no as-served instance of any of these wordings was found in the live stock sampled by either bench (the API flag cross-signal agrees 15/15 without them), so this is a coverage boundary, not a demonstrated systematic miss. Printed as a condition: 1.2 candidates; until then, escalation-completeness claims are limited to the proven families (scope language carries this).","id":"RW-D9","severity":"LOW","title":"recall-events/1.1 paraphrase residuals in the operate/use families — no live-stock instance, coverage proven only for the drive/park families"}],"fix_verification":[{"evidence":"recall-events/1.1 normalized token-pattern matching. Bench shape byte-for-byte end-to-end: 27V321000 733->1042 with 'Owners are advised not to drive their vehicles until repaired' emits ESCALATION_DO_NOT_DRIVE/ADVISORY_ADDED + POPULATION_EXPANSION + REMEDY_CHANGE, sealed record advisory_classes [DO_NOT_DRIVE]. Fresh positives 11/11 (must not drive, please do not drive, urged not to drive, must not be driven, never drive, do not operate, should not be driven, park away from structures, park outdoors, park outside and away from buildings). Fresh negatives 7/8 (park-and-shut-off, fire-while-driving, modal-guarded may/can not operate, drive-to-dealer, should-not-charge-indoors, not-park-in-a-garage) — the one failure is RW-D7. Independent cross-signal: 15 live campaigns re-fetched from api.nhtsa.gov (13V172, 25V748, 17V429, 25V401, 24V810, 24V809, 26V682 DND stock; 20V701, 21V650, 22V703 park-outside stock; 22V432, 22V484, 24V169, 24V155, 25V896 negatives) — phrase tags agree with parkIt/parkOutSide on every row. Grammar-bump discipline (RW-O1) now tested: sealed 1.1 events byte-stable across later nights.","id":"RW-D1","prior_severity":"HIGH","state":"FIXED — VERIFIED"},{"evidence":"Fresh run: methodology-only segment sealed -> get_churn_series series_state MEASURING (segment listed, rates null). After a second vintage 104 days later, churn_publish seals a PUBLISHED segment with non-null rates and get_churn_series reports PUBLISHED; the earlier segment stays MEASURING in the listing. Top-level state derives from segments, as the fix claimed.","id":"RW-D2","prior_severity":"MED","state":"FIXED — VERIFIED"},{"evidence":"Normalized whole-token screen. All 10 card-1 evasion shapes + 10 builder fresh spellings + 14 bench-fresh spellings refuse BY NAME (is_it_safe, SAFE, safetyRating, riskLevel -> SAFETY_VERDICT_REFUSED; ownersName, vehicleOwner, homeAddress -> PERSON_QUERY_REFUSED; repairCost -> REPAIR_ADVICE_REFUSED; exactVin, vinStatus, unrepairedVehicles -> VIN_EXACT_REFUSED; consumer_lookup -> CONSUMER_LOOKUP_REFUSED; dataSource, source -> SOURCE_CLASS_REFUSED). Benign extras (notes, summary, manufacturer, format, page, include_history, locale) still serve. Two synonym probes served instead of refusing — see observations (openRecalls, shouldIUse).","id":"RW-D3","prior_severity":"MED","state":"FIXED — VERIFIED"},{"evidence":"layout_hash is MEASURED: sha256 over the as-served header when present (permuted header raises LayoutError -> LAYOUT_DRIFT_REFUSED; unpermuted header seals with the header-derived hash), otherwise over the content-derived column-role order. Fresh permutations all refuse: defect<->consequence (the card-1 shape, replicated with fresh marker-rich texts), consequence<->remedy, defect<->remedy, header keyed-column swap (MAKETXT<->MODELTXT). Unpermuted real-shape files (headerless and headered) seal. No silent interchange on any shape.","id":"RW-D4","prior_severity":"MED","state":"FIXED — VERIFIED"},{"evidence":"Tampered prev_vintage_hash on the latest vintage -> verify_receipt MISMATCH field=prev_vintage_hash naming the campaign; tampered anchor link -> MISMATCH field=anchor_chain; recompute.py CLI refuses '(chain)' with returncode 1 on the same tamper (builder regression reproduced, plus bench re-run). Baseline MATCH before and after restoration. Residual genesis-link shapes -> RW-D8.","id":"RW-D5","prior_severity":"LOW","state":"FIXED — VERIFIED (one residual: RW-D8)"},{"evidence":"Bench shape replicated fresh: campaign 28V777000 first sealed 2027-07-02, corpus floor 2027-07-01 -> campaign-scoped NOT_SEALED/BEFORE_FIRST_VINTAGE prints first_vintage 2027-07-02 with corpus_first_vintage 2027-07-01 labelled alongside. Vehicle-class ask on a pre-floor date prints the corpus floor only (no corpus_first_vintage key) — the labelled split is exactly as specified.","id":"RW-D6","prior_severity":"LOW","state":"FIXED — VERIFIED"}],"head_at_bench":"0e3a90c1811c8de2c23a1718b9d6abbdae1da94d (parent ea2c650; ls-remote verified by builder, HEAD read first-hand)","live_proof_verification":{"items":["Cross-check seal: proof/live-api-store anchor ingest_scope cross_check OK, reconciliation_failures []; campaign 24V809 sealed, its record's remedy is the real API text ('Owners should not drive their vehicles until they have been repaired.') and advisory_classes [DO_NOT_DRIVE] agrees with the API's parkIt: true (re-fetched live by this bench).","Divergence hold-out: proof/live-api-store-diverged seals NOTHING for the campaign (campaigns []), anchor cross_check FAILED with 24V809 named in reconciliation_failed_campaigns. Sealing never picked a winner.","Live check issuance: rcpt-00001 (CHECK, CAMPAIGN-LEVEL) in the live store carries exactly the 4 campaigns the live API returns today for Porsche 911 MY2024 (24V155000, 24V809000, 25V896000, 26V682000 — set re-derived by this bench from api.nhtsa.gov). recompute.py rcpt-00001 --root proof/live-api-store -> MATCH, seal OK. Phrase tags vs API flags agree 4/4 (24V809000 + 26V682000 parkIt true <-> DO_NOT_DRIVE; the other two flags false, no tags).","Flat-file spine NOT re-routed: FLAT_FILE_URL still www-odi.nhtsa.dot.gov; ingest_live still fetches the file; the API is used only for cross-check + check issuance, as spec section 3.4/4.3 prescribe.","www-odi re-probed by this bench 2026-10-26: curl -> empty reply (exit 52) after proxy CONNECT — still unreachable; api.nhtsa.gov answers 200 with real data. The outage is a scope fact, not a product failure."],"state":"VERIFIED FIRST-HAND — all five builder claims in proof/live-api-20261026.md"},"n_check":{"basis":"Fix round changed no tool surface; the 1.1 grammar, measured layout, chain verification and transport repoint deepen the sealed-vintage mechanism rather than adding vendor-verb surface.","verdict":"NOVELTY_PROVEN (carried from card -1; not re-benched — closed area)"},"observations":["RW-D3 synonym probes: extra keys openRecalls and shouldIUse on a posture ask are SERVED (ordinary sealed-store read; no forbidden data disclosed — the same mitigating fact as card -1). They sit outside the spec's named ask families (open_status = open+status pair; advice = repair*/should+drive/drive+advice). Recommend adding {open,recall*} and {should,use/operate} pairs at the next screen touch; not a certification blocker.","Chain verification scope is cited-campaigns + the full anchor chain, per the fix's stated design: tampering a NON-cited campaign's prev_vintage_hash does not affect a posture receipt that never cited it (verified by probe; the receipt's own evidence chain is intact). A store-wide chain audit verb would close the remaining gap but is not in spec section 11.2.","campaignNumber on api.nhtsa.gov returns one row per affected vehicle line (18 rows for 13V172000); the phrase tags were identical on every row. Cross-check dedupes by campaign in the engine already (fetch_campaign takes the first row); noted only because the API's row multiplicity surprised the bench's first read."],"prior_card":"eclipse-recall-witness-mcp-2026-10-26.json (PARTIAL(local, FIXTURE scope), 50 checks 43P/7F)","product":"eclipse-recall-witness-mcp","scope_language_exact":"CERTIFIED(local, FIXTURE scope) — sealed campaign-vintage witness over fixture flat files: nightly anchor + hash-chained per-campaign vintages, closed recall-events/1.1 drift grammar (spec section 7 names, delta-1 ACCEPTED at card -1), sealed-vintage-only posture-at-date receipts and mandate-bound CAMPAIGN-LEVEL check receipts with byte-exact standing sentences, churn instrumentation with segment-derived series_state. All seals under FIXTURE ECDSA keys, labelled on every artifact. The API transport is repointed to the spec-named host (api.nhtsa.gov) and LIVE-PROVEN at cross-check + check-issuance scope (proof/live-api-20261026.md, independently re-verified by this bench). NO live nightly seal exists: the flat-file spine host (www-odi.nhtsa.dot.gov) remains unreachable from this egress (re-probed 2026-10-26, empty reply) and was NOT re-routed to the API — the file is the canon source. LIVE scope additionally requires (a) the first real nightly ingest and (b) live-key cutover (fixture keys at P0, owner's call) — scope items, not defects. Conditions RW-D7/RW-D8/RW-D9 (all LOW) are printed on this card and bind the next grammar/seal touch; no escalation-completeness claim beyond the live-stock-proven phrase families (15/15 campaigns, API-flag cross-signal) may appear in any copy. Nothing in this verdict speaks to any vehicle's safety, any specific VIN's repair state, or compliance with any law (gate C2/C5/C11).","spec":"~/workspace/cyan-eclipse/eclipse-recall-witness-spec-20261026.md","tree":"~/workspace/cyan-eclipse/eclipse-recall-witness-mcp/","verdict":"CERTIFIED(local)"}