{
 "tool": "eclipse-corona-mcp",
 "version": "0.1.0",
 "bench_date": "2026-10-25",
 "bench_version": "1.0.0-verity-corona-bench",
 "environment": "local",
 "qualifier": "local",
 "verdict": "CERTIFIED(local)",
 "score": "25/27 checks pass (1 partial, 1 fail)",
 "scope": "CERTIFIED(local) \u2014 local verifier only, at P0 ceiling. Proven: the 5-tool MCP surface + Gate CLI + Sheet CLI as shipped; staged-class sealed packs over the \u00a714 fixture corpus (bench-built, bench-signed); served-class dogfood pack verification for cetech.ai (builder-sealed, bench-recomputed); gate contract incl. WARN/ENFORCE claim asymmetry; house profile on a bench house-shaped fixture. Certification scope states exactly this and nothing broader (see not_covered).",
 "n_check": {
  "outcome": "NOVELTY_PROVEN",
  "tally": "Shipped surface = 7 surfaces: MCP tools/list verbatim [pack_inspect, pack_recompute, probe_registry, verify_deploy, verify_page] (5) + Eclipse Corona Gate CLI (gate_check) + Eclipse Corona Sheet CLI (render_sheet). Novel core (verify_deploy, verify_page, pack_inspect, pack_recompute, probe_registry, gate_check/sheet) = 7/7 = 100%. Substrate verbs (navigate/click/screenshot/type and renamed equivalents) = 0/7 = 0% \u2014 far below the >=80% R3 kill line; 10 substrate/T3-shaped names actively refuse -32602. Probes and gate contract DID survive into the shipped surface. R3 demotion NOT triggered; line does NOT demote to internal Tool.",
  "r3_armed": true
 },
 "checks": [
  {
   "id": "C-NCHECK",
   "name": "N-check with R3 kill criterion armed: shipped surface substrate-verb share",
   "verdict": "pass",
   "evidence": "shipped surface = 5 MCP tools ['pack_inspect', 'pack_recompute', 'probe_registry', 'verify_deploy', 'verify_page'] + Gate CLI + Sheet CLI = 7 surfaces; substrate verbs = 0/7 = 0% (<80% R3 line); novel core = 7/7. bazaar-manifest tools = ['verify_deploy', 'verify_page', 'pack_inspect', 'pack_recompute', 'probe_registry']"
  },
  {
   "id": "C-SURFACE",
   "name": "tools/list verbatim = exactly the 5 spec tools; denylist of substrate/T3 names refuses -32602",
   "verdict": "pass",
   "evidence": "10 substrate/T3-shaped names all refuse -32602: True"
  },
  {
   "id": "C-ENV",
   "name": "envelope hygiene: -32700 malformed, -32602 wrong-shape/unknown-field/missing-field, no stack leaks",
   "verdict": "pass",
   "evidence": "malformed JSON -> -32700:True; arguments wrong-shape (list) -> -32602:True; unknown/substrate tool 'screenshot' -> -32602:True; unknown field -> -32602 naming field:True; missing required field -> -32602:True; no stack trace leaked:True"
  },
  {
   "id": "B1",
   "name": "distinguishing test 1: MIME-trap fixture -> FAIL naming ASSET_MIME_MISMATCH + UNSTYLED_RENDER with measured values",
   "verdict": "pass",
   "evidence": "mime-trap staged run verdict=FAIL; ASSET_MIME_MISMATCH FAIL in 9/9 cells with sealed served type raw='text/html' normalized='text/html' (byte-perfect CSS as text/html); UNSTYLED_RENDER FAIL in 9/9 cells. Named probes, measured values \u2014 no pixel-diff language"
  },
  {
   "id": "B2",
   "name": "distinguishing test 2: one-byte change, same version -> gate STALE (never VERIFIED_LIVE) + recompute STALE_INPUT naming path and both hashes; sealed pack unmodified",
   "verdict": "pass",
   "evidence": "PASS served pack + same manifest -> exit 0 VERIFIED_LIVE; one-byte manifest change (same version 'g1') -> exit 1 state=STALE reason=manifest_mismatch \u2014 never VERIFIED_LIVE"
  },
  {
   "id": "B2-R",
   "name": "B2 recompute leg on a real sealed pack",
   "verdict": "pass",
   "evidence": "one byte appended to /styles.css (same version string): recompute=STALE_INPUT naming /styles.css pinned a76d8b2d0dbb\u2026 vs served bacf7f14872b\u2026; sealed pack bytes in ledger unmodified:True"
  },
  {
   "id": "B3",
   "name": "distinguishing test 3: same-dimensions wrong hero pre-approval -> honest identity PASS; contact sheet carries the actual image at every viewport; no probe claims semantic detection",
   "verdict": "pass",
   "evidence": "hero-swap (same 120x80 dims, wrong red asset, lying alt) pack verdict=PASS \u2014 honest identity PASS; ASSET_PIN_MISMATCH={'PASS'} in all cells (wrong file IS the pinned file); no probe claims semantic detection:True; sheet carries the actual rendered image at every viewport: 9 cell sections, 9 embedded PNGs byte-identical to sealed screenshots (hash sets equal:True), lying alt text displayed beside them"
  },
  {
   "id": "B4",
   "name": "distinguishing test 4: tampered screenshot hash in sealed pack -> never REPRODUCED; REFUTED naming cell on bytes vector",
   "verdict": "partial",
   "evidence": "vector1 (sealed hash altered in pack.json): pack_inspect signature_valid=False (tamper flagged); recompute -> SIGNATURE_INVALID refusal (\u00a74.7 step 1) \u2014 never REPRODUCED, but NOT the literal \u00a714-row outcome 'REFUTED naming the cell' (refusal detail does not name the cell). vector2 (screenshot bytes altered, seal intact): recompute=REFUTED naming cell /|chromium|desktop-1440 reason=screenshot_bytes_hash_mismatch; sheet renders SHEET INVALID:True + SCREENSHOT HASH MISMATCH:True. Tamper-evidence property holds on both vectors; graded partial on the \u00a714-row literal wording vs \u00a74.7 order tension"
  },
  {
   "id": "B5",
   "name": "unknown probe refused PROBE_UNKNOWN on every surface (verify_page, nested verify_deploy, registry version)",
   "verdict": "pass",
   "evidence": "registry v1.0.0 hash db19ecae0787\u2026 probes=14 (11 core + 3 house); unknown version refused:True; verify_page unknown probe -> PROBE_UNKNOWN naming id:True; nested unknown probe in verify_deploy refused:True"
  },
  {
   "id": "B6",
   "name": "diagnostic honesty: verify_page proof:false + \u00a75.2 notice verbatim; no ledger entry; gate unchanged",
   "verdict": "pass",
   "evidence": "verify_page: proof=False diagnostic=True notice == spec \u00a75.2 verbatim:True; ledger entries unchanged (2->2); probes returned=11"
  },
  {
   "id": "B7",
   "name": "egress-wall honesty: loopback wall served run -> SERVED_FETCH_FAILED, no pack sealed, no circumvention",
   "verdict": "pass",
   "evidence": "loopback wall fixture, served request -> SERVED_FETCH_FAILED; packs sealed before/after equal (2->2); no served pack over challenge bytes; no circumvention code path observed (single UA, no retry rotation in engine)"
  },
  {
   "id": "B8",
   "name": "probe completeness / no silent pass: NOT_APPLICABLE paths (real silence fixture) + PROBE_ERROR paths (synthetic unknown-class asset, missing DOM facts) + timeout/unreachable blanking; PROBE_ERROR -> INCOMPLETE never PASS",
   "verdict": "pass",
   "evidence": "unknown asset class -> ASSET_MIME_MISMATCH PROBE_ERROR(asset_class_unknown):True; cell rollup INCOMPLETE (never PASS):INCOMPLETE; DOM facts unavailable -> PROBE_ERROR:True; timeout -> RENDER_TIMEOUT FAIL + others NOT_APPLICABLE(render_timeout):True"
  },
  {
   "id": "B8-R",
   "name": "B8 real-run leg: silence fixture cells carry all 11 core results with sealed NA reasons",
   "verdict": "pass",
   "evidence": "silence fixture (no media/styles/images): every cell carries all 11 core results (counts={11}); MEDIA_OVERSIZED/UNSTYLED_RENDER/ALT_TEXT_MISSING = NOT_APPLICABLE with sealed reasons (no_media_elements/no_stylesheets/no_img_elements); verdict=PASS (NOT_APPLICABLE alone never blocks PASS, \u00a74.6)"
  },
  {
   "id": "B9",
   "name": "determinism budget: 5 repeated sealed runs of a stable fixture reproduce per-cell probe results, measured values and screenshot hashes 5/5 (task scope: stable fixture; full \u00a714 corpus x5 not run)",
   "verdict": "pass",
   "evidence": "5 repeated sealed runs, identical pin (good fixture): per-cell probe results + measured values (durations stripped) + screenshot hashes identical across 5/5 runs:True; differing cells:[]; budget \u00a711.1 = 0 non-deterministic in 5 \u2014 met on this fixture"
  },
  {
   "id": "B10",
   "name": "gate asymmetry: gate infra failure exit 2; publish shim proceeds, status reads 'published \u2014 unverified'; WARN and ENFORCE compute identical states and block only the claim",
   "verdict": "pass",
   "evidence": "shim returns claim strings, never raises/blocks: VERIFIED_LIVE->'verified live' got 'verified live'; manifest unreadable -> gate exit 2 (2=infra) and shim still returns 'published \u2014 unverified' \u2014 publish proceeds, only the word 'verified' is blocked. Shim source inspected: status_line() only, try/except -> GATE_ERROR claim, no delay/retry/block path"
  },
  {
   "id": "C-POSTURE",
   "name": "WARN vs ENFORCE posture invariance of computed gate state",
   "verdict": "pass",
   "evidence": "WARN (1, 'UNVERIFIED', 'evidence_class_below_served') == ENFORCE (1, 'UNVERIFIED', 'evidence_class_below_served'): posture changes claim discipline only, never computed state, never publish"
  },
  {
   "id": "C-NONBLEND",
   "name": "evidence-class non-blending: staged PASS pack with identical hashes cannot satisfy the served gate",
   "verdict": "pass",
   "evidence": "staged PASS pack for identical hashes -> gate exit 1 reason=evidence_class_below_served; staged never satisfies served gate"
  },
  {
   "id": "C-REGCLOSE",
   "name": "registry closure at pack surface: pack carrying an invented probe id refused PROBE_UNKNOWN",
   "verdict": "pass",
   "evidence": "pack carrying INVENTED_PROBE -> validate_pack refuses PROBE_UNKNOWN: True"
  },
  {
   "id": "C-HOSTED",
   "name": "hosted-matrix P2 seam: declared interface only, HOSTED_MATRIX_NOT_AVAILABLE",
   "verdict": "pass",
   "evidence": "HostedMatrixProvider.capabilities() -> {devices:[], browsers:[], evidence_class:'hosted', available:False, refusal:'HOSTED_MATRIX_NOT_AVAILABLE'}; render_cell() raises HOSTED_MATRIX_NOT_AVAILABLE (bench test initially mis-asserted capabilities must raise \u2014 corrected; seam matches spec \u00a710.4 declared-interface shape)"
  },
  {
   "id": "C-INDEP",
   "name": "signature/chain verified by recomputation with bench's own canonical-JSON sha256 + own ECDSA P-256 math (not pack_inspect alone)",
   "verdict": "pass",
   "evidence": "independent recomputation on RAW sealed pack.json (bench's own canonical-JSON sha256 per S5 + own ECDSA P-256 math, pubkey only): pack_hash recomputes=True, signature verifies=True (corona-pack-20261026T040133-12491d6dcf95). First attempt fed pack_inspect output (carries 3 extra read-time keys) into the hash \u2014 bench harness error, corrected; same independent code verified the builder's cetech.ai dogfood pack raw (hash+sig True)"
  },
  {
   "id": "C-REPRO",
   "name": "untampered pack recompute -> REPRODUCED",
   "verdict": "pass",
   "evidence": "untampered good pack recompute -> REPRODUCED differing=[]"
  },
  {
   "id": "C-HOUSE",
   "name": "house-profile probes: EMBLEM_UNPAIRED (both directions), SCOPE_WORD_INVALID (out-of-vocabulary scope), EMBLEM_OVERSIZE (Family A emblem > seal) on a house-shaped fixture",
   "verdict": "pass",
   "evidence": "house fixture (origin house.local, profile on): 14 probes/cell; EMBLEM_UNPAIRED FAIL all cells kinds=['emblem_without_text', 'text_without_emblem'] (lone seal + lone CERTIFIED text); SCOPE_WORD_INVALID FAIL reasons=['scope_not_in_closed_set'] words=['bogus-scope'] (closed S2 set); EMBLEM_OVERSIZE FAIL emblem {'h': 80, 'w': 80, 'x': 40, 'y': 704} > seal {'h': 40, 'w': 40, 'x': 0, 'y': 744}; verdict=FAIL"
  },
  {
   "id": "C-SENTINEL",
   "name": "UNSTYLED_RENDER sentinel mode on declared-sentinel fixture",
   "verdict": "pass",
   "evidence": "good-fixture pack cell: UNSTYLED_RENDER PASS measured mode='sentinel', sentinel found_in_computed_style=true actual='17px' expected='17px', stylesheet_url sealed. Heuristic mode is what the dogfood packs exercised (sentinels not yet adopted on live sites \u2014 builder-declared deviation, owner publish act outstanding)."
  },
  {
   "id": "C-SHEET",
   "name": "contact sheet on a FAIL pack: failures pinned to cells + failures index + \u00a712 honest-limit in header",
   "verdict": "pass",
   "evidence": "render_sheet on bench mime-trap pack: 'Failures index' present, ASSET_MIME_MISMATCH pinned to cells, honest-limit text present in header, no SHEET INVALID (hashes match). B3 sheet evidence covers the PASS-pack shape; B4 vector-2 covers SHEET INVALID on tamper."
  },
  {
   "id": "C-BUILDER",
   "name": "builder suite independently re-run on an isolated copy of the tree",
   "verdict": "pass",
   "evidence": "cp of eclipse-corona-mcp to /tmp/verity-corona/builder-copy; python -m unittest discover tests -> Ran 39 tests in 214.2s, OK. Builder claim 39/39 verified. Bench's own checks above ran against bench-owned env/fixtures/signer, never the builder's data (except read-only dogfood spot-check)."
  },
  {
   "id": "C-DOGFOOD",
   "name": "dogfood replication spot-check: cetech.ai served pack corona-pack-20261026T033707-79925a33bde7",
   "verdict": "pass",
   "evidence": "On a COPY of the pack (builder ledger untouched, pack.json hash identical before/after): pack_inspect grammar/signature/chain valid, verdict FAIL; bench's independent canonical-hash recompute=True and ECDSA verify=True against corona_pubkey.pem; all 9 held screenshot bytes hash-match their sealed hashes; 14 probes/cell. pack_recompute under bench's own run -> STALE_INPUT naming /products.html pinned afb802f9\u2026 vs served 20edb942\u2026 (site moved and/or this egress's known urllib truncation \u2014 builder-recorded; honest vocabulary either way, never REPRODUCED). Blocked cells: Chromium+Firefox cells sealed FAIL PAGE_UNREACHABLE reason=transport http_status=0 with remaining probes NOT_APPLICABLE page_unreachable \u2014 no cell claims served for a transport-blocked render; pack verdict FAIL and gate UNVERIFIED (latest_verdict_fail), so no 'served PASS' claim exists anywhere for blocked cells."
  },
  {
   "id": "C-BLANK73",
   "name": "\u00a77.3 blanking rule: when PAGE_UNREACHABLE FAILs, ALL other probes report NOT_APPLICABLE reason page_unreachable",
   "verdict": "fail",
   "evidence": "Dogfood cetech.ai pack, Chromium desktop-1440 cell (same shape in all 6 blocked Chromium/Firefox cells): PAGE_UNREACHABLE FAIL transport; 12 probes NOT_APPLICABLE page_unreachable, but RENDER_TIMEOUT seals PASS {timeout_s:30, elapsed_ms:1133, last_completed_stage:'navigation'} \u2014 the page never loaded, so 'load + settle completed within timeout' (\u00a77.3 PASS condition) did not hold, and \u00a77.3's blanking sentence covers all other probes. Defect D-COR-1 (LOW): no verdict impact \u2014 cell FAILs via PAGE_UNREACHABLE and the pack FAILs; the overclaim is confined to one probe's PASS inside already-failed cells."
  }
 ],
 "defects": [
  {
   "id": "D-COR-1",
   "severity": "LOW",
   "title": "RENDER_TIMEOUT seals PASS inside PAGE_UNREACHABLE cells, contra \u00a77.3 blanking rule",
   "evidence": "cetech.ai dogfood pack corona-pack-20261026T033707-79925a33bde7, all 6 transport-blocked Chromium/Firefox cells: RENDER_TIMEOUT PASS {last_completed_stage: navigation} alongside PAGE_UNREACHABLE FAIL. Engine evaluates RENDER_TIMEOUT before the unreachable blanking. No verdict/gate impact (cells and pack FAIL regardless); fix = blank RENDER_TIMEOUT with reason page_unreachable like the other 12 probes, or amend \u00a77.3 to name the exception."
  },
  {
   "id": "D-COR-2",
   "severity": "LOW",
   "title": "B4 sealed-hash tamper vector returns SIGNATURE_INVALID refusal, not the \u00a714 row's literal 'REFUTED naming the cell'",
   "evidence": "Bench good pack, screenshot_sha256 altered in pack.json: pack_inspect signature_valid=false (correct); pack_recompute refuses SIGNATURE_INVALID per \u00a74.7 step 1 (signature before rendering) and its detail does not name the altered cell. The \u00a714 B4 row's own also-clause accepts 'refuses or refutes by name', and the bytes-tamper vector returns REFUTED naming the cell \u2014 tamper-evidence holds on both vectors and REPRODUCED is unreachable. Recorded as a spec-internal tension (\u00a714 row vs \u00a74.7 order) for Silas/owner to settle in text; graded B4 partial on the literal row wording."
  },
  {
   "id": "D-COR-3",
   "severity": "LOW",
   "title": "Declared sentinel also listed in measured.undeclared_sentinels",
   "evidence": "Bench good pack: UNSTYLED_RENDER sentinel mode PASS with sentinel 'main' declared and found, yet measured.undeclared_sentinels=['main']. Substrate collects sentinel ids from stylesheet text without subtracting pin-declared ids. Evidence-field noise only; no verdict impact."
  }
 ],
 "not_covered": [
  "Real-device / hosted evidence class: P2 seam only (HOSTED_MATRIX_NOT_AVAILABLE verified); no hosted pack exists or was certified.",
  "Sentinel-mode UNSTYLED_RENDER on the live dogfood sites: sentinels not yet adopted on cetech.ai / thewhitereport.com / eclipsebazaar.com (requires owner site edits + publish); dogfood packs exercised heuristic mode only, which the spec sanctions (\u00a77.5) \u2014 sentinel absence never failed a run.",
  "Served-class rendering of Chromium/Firefox cells on GoDaddy-hosted dogfood sites from this VM: transport-blocked by the host (sealed honestly as PAGE_UNREACHABLE); only WebKit (all 3 sites) and Firefox (thewhitereport.com) served cells were rendered live. Served-class certification rests on those cells plus the loopback wall/good served shapes.",
  "Served recompute exactness from this VM's egress: engine recompute fetch is stdlib urllib, which the hosts throttle/truncate (builder-recorded in BUILD-MANIFEST); bench dogfood recompute read STALE_INPUT \u2014 the honest vocabulary \u2014 but this bench cannot distinguish site-drift from truncated-fetch on that path. On unthrottled infrastructure the path is exact per the staged REPRODUCED evidence.",
  "Full \u00a714 B9 as written (each dogfood site + full fixture corpus x5): bench ran 5x on one stable fixture (task scope) plus builder-suite shapes; dogfood-site determinism x5 not run.",
  "ENFORCE posture as a flipped production state: posture mechanics benched in both modes; the flip itself is an owner config act (D2) and has not occurred.",
  "Trademark screen for the name 'Eclipse Corona' (D1): still CONDITIONAL \u2014 Chaos Corona / Corona beer screen outstanding before any public surface; certification covers function, not the name.",
  "Herald-signed packs: bench and dogfood packs are local-signer packs (signer_type=local) verified through the PinSigner port grammar; no Herald custody was exercised.",
  "Third-party subjects, Bazaar listing, scheduled re-verification, public proof pages, CI adapters: P1/P2, not built, not certified."
 ],
 "method": "Independent bench: isolated env in /tmp/verity-corona (bench-generated ECDSA signer, bench-built \u00a714 fixtures via the shipped generator + bench-authored house fixture, temp ledger). Product exercised via server handle/stdio, engine cores, CLIs and the publish shim; signatures and pack hashes re-verified with bench-written canonical-JSON + ECDSA P-256 code. Builder suite re-run on a copied tree (39/39 OK). Builder's real ledger touched read-only (dogfood pack copied out; pack.json hash unchanged). No product code was modified by this bench."
}