Corruption detection for OME-Zarr pyramids. Don't train on lies.
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.
957 S3 roots audited in about five minutes; one live structural corruption case independently re-confirmed on September 30.
A direct zarr-python read returned all zeros without error; a populated control returned 64,498 nonzero voxels.
zpa-gate turns the finding into a publish-time CI failure: defective root exit 1, populated sibling exit 0, nonexistent path exit 1.
Evidence is committed and reproducible; the page links every headline claim to a repo artifact below.
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.
zpa-tifxyz checks Volume Cartographer surface
patches (meta.json + x/y/z.tif) with strict range reads. All 1,539 surfaces in the
S3 bucket are integrity PASS; the content tier ran on 1,391 (148 over the 32 MiB cap are reported as a coverage gap).
It found 161 surfaces with points at negative coordinates, outside any CT volume, and 30 whose
meta.json bbox disagrees with the stored coordinates, all low review findings
(artifacts/2026-10-01-s3-tifxyz/).
Triangular meshes are not audited here.artifacts/2026-10-01-baseline-comparison/).artifacts/2026-10-01-s3-conformance/).scrollq-health takes integrity from this repo's versioned report: an unreadable level or an absent
root is DO NOT TRAIN instead of falling through to the quality score. Live negative control: an absent
root reads DO NOT TRAIN
(ScrolIQ evidence).schema_version 1.2.0,
with published schemas, a recommended verdict mapping (FAIL / UNKNOWN → DO NOT TRAIN, WARN → CAUTION), and
committed golden outputs for 67 fixture cases
(docs/INTEGRATION.md,
CHANGELOG.md).Reviewer map, criterion by criterion:
docs/SUBMISSION.md ·
live dashboard
The entire open-data surface, on both public stores:
s3://vesuvius-challenge-open-data):
957 Zarr pyramid roots discovered by full bucket crawl, spanning
PHerc0814, PHercParis4, PHerc186 and community uploads.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:
other/dev/meshes/20231022170900-ome.zarr decode to all zeros
while L0 holds real mesh data.zpa-gate
is a publish-time metadata gate that fails closed on structural defects
(high severity by default), with GitHub Actions annotations for CI.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).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/).zpa-scan-chunks):
closes the next silent-corruption class — chunks that exist but decode to all
fill_value — via sampled decode (v2/v3, raw/Blosc/sharded, and now
volcomp: all 64 scroll volumes on dl.ash2txt.org decoded
with a vendored libvolcomp, 384 levels probed, 0 present-but-empty).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.
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 + solution | Silent structural/content corruption in multiscale Zarrs; demonstrated on live data, with zpa-audit, zpa-scan-chunks, and fail-closed zpa-gate. |
| Significant advantage | Header-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. |
| Documentation | README usage, machine-readable artifacts, reproducibility manifests, known-defect records, and a public dashboard generated from committed evidence. |
| Technical integration | Accepts 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. |
Criteria source: Vesuvius Challenge open prizes (September 30, 2026 snapshot).
Update (2026-10-01): technical integration now also covers tifxyz surfaces and a versioned JSON report contract; see the post-deadline update.
| claim | evidence (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.
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:
Correction (2026-10-01): this block originally named
…-20260521123630.zarr as the clean sibling. That path does not exist, and the gate
now rejects it (exit 1, GATE_ROOT_ABSENT) instead of passing it.
Committed logs and README → · original 2026-09-30 proof + erratum → · same-day re-verification →
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.
2027 Grand Prize requirements → · how this fits with ScrolIQ →
Solo contributor (Sven) + Muse (AI assistant). Upstream tool by sgsllc-jr, MIT-licensed; all upstream credit retained in the fork.
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.
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.
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.
scrollq-health runs this audit alongside ScrolIQ's score:
a high-severity integrity finding is DO NOT TRAIN; a medium finding, or a pass with quality
unscorable or below 40, is CAUTION; otherwise TRAIN. Verified on live data: DO NOT TRAIN on the
defective PHerc0814 pyramid (its quality is unscorable, so the verdict comes from this audit alone), TRAIN on a
healthy PHerc0813 dl volume, CAUTION on the v2 dev mesh
(ScrolIQ evidence;
rules from its health.py, checked 2026-09-30).libvolcomp decoder, and declares zarr-pyramid-audit as a dependency. The dependency runs
one way: this repo never imports ScrolIQ.discover_zarr.roots.jsonl that zpa-discover produces for the S3 bucket.ScrolIQ is spelled with a capital I (as in Mesh IQ) and was previously ScrollQ; its package and
scrollq-* commands keep the old name for compatibility. ·
Full breakdown with the verdict table →