VESUVIUS CHALLENGE · SEPTEMBER 2026 PROGRESS PRIZE

zarr-pyramid-audit

Corruption detection for OME-Zarr pyramids. Don't train on lies.

Contribution URLs
Repo: github.com/Svyable/zarr-pyramid-audit (MIT fork of sgsllc-jr/zarr-pyramid-audit; all upstream credit retained)
Live data-health dashboard: svyable.github.io/zarr-pyramid-audit
Companion project: ScrolIQ — the diagnostics half of the suite (how they fit)
Official criteria: scrollprize.org/prizes · Latest awarded work: scrollprize.org/winners
957
S3 Zarr roots audited
header-only · ~5 min
956
clean
1
defective pyramid
still live (villa #1892)
0
of 18 dl defects repaired
in 20 days

The 60-second case

A valid Zarr header can still be a lie. The confirmed PHerc0814 pyramid opens normally, but all six levels have no chunks and silently read as zeros. That failure can waste training runs or invalidate downstream segmentation and ink work without throwing an error.

Find

957 S3 roots audited in about five minutes; one live structural corruption case independently re-confirmed on September 30.

Prove

A direct zarr-python read returned all zeros without error; a populated control returned 64,498 nonzero voxels.

Prevent

zpa-gate turns the finding into a publish-time CI failure: defective root exit 1, populated sibling exit 0, nonexistent path exit 1.

Post-deadline update · 2026-10-01

Added after the September 30 deadline. Everything else on this page is the submission as frozen on 2026-09-30, apart from the dated corrections marked in place. This panel lists what was added the next day; each item links to the committed evidence.

(1) Which scroll data did you work on?

The entire open-data surface, on both public stores:

(2) How does it increase the probability of reading the scrolls?

Ink detection, segmentation, registration and interactive viewing commonly consume reduced pyramid levels rather than repeatedly reading the full-resolution volume. A level whose header is valid but whose chunks are missing can return plausible all-zero voxels with no error — silent corruption that burns compute and can mislead downstream analysis. This contribution does not merely report that risk; it turns the check into a reproducible pre-publication gate:

The fix ships with the repo. zpa-gate audits roots before they publish and fails closed — the gate can block this defect class before publication when used. Proven end-to-end 2026-10-01 (artifacts/2026-10-01-gate-proof/): rejects the defective PHerc0814 root (exit 1), passes its populated sibling (exit 0), and rejects a path that does not exist (exit 1).
Correction (2026-10-01): the 2026-09-30 proof's "clean sibling" path does not exist in the bucket; the gate passed it because a missing root was only low severity. The gate now fails closed on missing roots, and the proof was re-run with a real sibling (erratum in artifacts/2026-09-30-gate-proof/).

(3) What does it enable that was not possible before?

Distinct from the August 2026 awarded scroll-data-audit work. The official winners page describes that project as defect-hunting across the open-data catalog and volume-cartographer with catalog metadata checks and VC3D fixes. This submission complements it at a different layer: Zarr pyramid structure, chunk presence/content, mirror fidelity, and a CI gate that can reject a bad published root before downstream use.

Progress Prize rubric fit

The current Progress Prize asks for a specific problem and demonstrated solution, comprehensive documentation, and modular integration using standard community formats. The submission maps directly to those criteria:

Problem + solutionSilent structural/content corruption in multiscale Zarrs; demonstrated on live data, with zpa-audit, zpa-scan-chunks, and fail-closed zpa-gate.
Significant advantageHeader-only corpus audit is fast enough for continuous use; sampled content probing closes the “chunks exist but are empty” gap; the gate converts diagnosis into prevention.
DocumentationREADME usage, machine-readable artifacts, reproducibility manifests, known-defect records, and a public dashboard generated from committed evidence.
Technical integrationAccepts Zarr v2/v3 over HTTP/S3, emits stable JSONL/CSV/summary outputs, and exposes console commands suitable for CI or orchestration with the wider Vesuvius toolchain.

(4) What evidence have you provided?

claimevidence (in repo)
957 S3 roots, 956 clean, 1 defective artifacts/2026-09-29-s3/ — full audit JSONL + summary
Defective pyramid reads silently return zeros artifacts/2026-09-29-s3/SILENT_ZEROS.md — zarr-python proof vs populated control (64,498 nonzero voxels). Re-confirmed still live 2026-09-30 ~22:25 UTC (artifacts/2026-09-30-s3-reverify/): 6 high-severity LEVEL_NO_CHUNKS findings, identical signature — unrepaired for the full September window.
Defect isolated to one pipeline run (1 of 19 copies) SILENT_ZEROS.md — 18 clean siblings named
Zero defects repaired in 20 days artifacts/2026-09-29-dl-regression/ — strict diff: 0 fixed, 0 new
Mirrors are migrations, not copies artifacts/2026-09-29-s3/MIRROR_FIDELITY.md — byte-level comparison
Present-but-empty chunks: found live artifacts/2026-09-30-dl-v2-probe/ — 128 roots / 748 levels content-probed (1,795 chunks with real data): 7 levels of other/dev/meshes/20231022170900-ome.zarr decode to all zeros while L0 holds mesh content (verified: 12/12 L1 chunks empty, downscaled counterpart of populated L0 region empty, byte-identical zero-blobs). Not observed in S3 (788/788 populated) or the 64 volcomp scroll volumes (548 decoded, 0 present-but-empty).
Gate rejects the defective root, passes clean ones bin/gate.py — demonstrated in README and in the end-to-end proof below

Novelty is claimed only for the tooling and the integration; the underlying defects (#1892, #1755–#1760) are credited to their reporters and independently confirmed here.

Reproduce the headline result

The end-to-end proof uses the same public S3 bucket: the defective root and a populated sibling render of the same segment. After installing the repo, these two commands should disagree by design:

# defect: expected exit 1 zpa-gate --base s3://vesuvius-challenge-open-data \ --root "PHerc0814/segments/20260226123353-auto_grown_20260226123353106/surface-volumes/1.129um-0.22m-59keV-volume-20260521123630-L1.zarr" \ --fail-on high # populated sibling: expected exit 0 zpa-gate --base s3://vesuvius-challenge-open-data \ --root "PHerc0814/segments/20260226123353-auto_grown_20260226123353106/surface-volumes/2.399um-0.22m-78keV-volume-20260309142202.zarr" \ --fail-on high

Why this matters for the 2027 Grand Prize pipeline

This project is infrastructure, not an unrolling claim. The 2027 Grand Prize requires a reproducible pipeline that can segment/unroll an entire scroll and then render legible ink. Those stages depend on trustworthy volumes, surfaces and multiscale reads. zarr-pyramid-audit supplies a cheap integrity boundary before expensive segmentation or ink inference and a machine-readable trail for reproducing exactly which store/root was used.

That trail is consumed downstream: ScrolIQ's scroliq-provenance gate requires a zarr_audit record for the exact eligible CT volume (tool name, audit-manifest SHA-256, and a root naming that volume), and its Grand Prize probe protocol makes this audit Stage A.

Team

Solo contributor (Sven) + Muse (AI assistant). Upstream tool by sgsllc-jr, MIT-licensed; all upstream credit retained in the fork.

How this fits with ScrolIQ

Two repos, one question: should anyone spend GPU or expert time on this volume? This submission answers whether the data is what it claims to be; ScrolIQ answers what is worth doing with it.

zarr-pyramid-audit · this submission

Don't train on lies. Integrity: header-only pyramid audit, sampled chunk-content probes, and a fail-closed publish gate. A high-severity finding means do not train, do not publish. Says nothing about scan quality.

ScrolIQ · companion

Find the bottleneck. A diagnostic layer for the Challenge's 2026 open problems: a 0–100 scan-health triage score and “label next” coverage join, plus a diagnostic passport, spatial scan map, mesh / winding / ink audits, and 2027 Grand Prize recto-coverage and provenance gates. Its score is not readability or prize readiness.

repo · live survey · its September writeup

Submission status

Frozen public snapshot. Evidence and same-day re-verification are frozen on September 30, 2026, the day of the official Progress Prize deadline (11:59 PM Pacific); submission itself is completed through the Challenge's official form. The evidence on this page stays frozen at that date — the live dashboard carries the current evidence. Additions made after the deadline are confined to dated corrections and the clearly marked 2026-10-01 update.