Reproducible scan-health triage and diagnostic provenance. Measure the bottleneck first.
ScrolIQ was run on the public scroll-volume corpus rather than a hand-picked showcase:
volumes.txt, decoded from the public
dl.ash2txt.org store with the real volcomp decoder. The frozen September campaign uses
24 requested L0 chunks per volume from a 5×5×5 candidate grid.label_next.vesuvius-challenge-open-data
bucket), read at level 0 alongside the masked CT.transform.json.The scarce resources in virtual unwrapping are expert attention, annotation time, and compute. ScrolIQ makes the scan-quality part of that allocation decision measurable instead of implicit. It does not claim to know which scroll contains the easiest text; it tells the team what the CT data actually supports before expensive downstream work begins.
label_next candidates, turning an invisible allocation gap into
an inspectable queue.scroliq-scan-map retains the L0
voxel bounding box of each observation, while scroliq-passport can attach exact-volume
winding, native TIFXYZ mesh, and ink-validation evidence without upgrading still-unmeasured surface,
fiber, or spiral stages from unknown.scrollq-health combines this
triage layer with zarr-pyramid-audit,
so structurally defective data can be rejected before a quality score is trusted.scrollq-grand-prize compares all 13 target
volumes on a weight-free Pareto frontier over scan-health score and existing segment count, while
pinning the exact eligible volume and recording prohibited same-scroll higher-resolution alternatives.scrollq-grand-prize --prize first-letters
qualifies all 22 First Letters scans. Each prize manifest declares its own required bootstrap assets, so
the 9 eligible scrolls without a lasagna prediction are not silently dropped. Run on both disjoint
resample runs, it shows which frontier members are robust and which are sampling noise.scroliq-support measures how much of a
released surface prediction lies on real CT material (prediction voxel > 127 where masked CT is exactly
0 counts as phantom), on the exact eligible scan, with a bootstrap 95% interval. A prediction made on a
different scan of the same scroll fails closed. External surveys are now imported by a script pinned to
the source commit instead of by hand.scroliq-chunk-audit, which checks every stored chunk object against the size
its .zarray declares without downloading chunks.scroliq-pairs asks whether
intensity-invariant metrics rate the documented-better scan protocol higher on registered rescans. The
hypothesis and decision rule were committed before any real-data metric was computed.scroliq-manifest derives the Grand Prize
and First Letters target lists from the pinned official eligibility list and bucket index, and tests fail
if the hand-entered manifests drift from them.scroliq-fiber lists trace-break candidates in ordered
fiber traces (gaps relative to each trace's median step, sharp turns), records the input's SHA-256, and
fails on any parse error. It does not prove fiber or sheet identity, so the passport's fiber stage stays
unknown.scroliq-passport
organizes data, scan, label, winding, native TIFXYZ mesh, and ink-validation evidence around the
Challenge bottlenecks and leaves unmeasured stages unknown.scroliq-provenance checks exact-volume lineage,
training/prediction separation, public dataset/checkpoint provenance, stochastic seeds, experiment
runs, mesh/render traceability, scale-bar declarations, banner coverage, and public held-out validation
against known ground truth; same-volume training/validation overlap fails closed.scroliq-winding audits PointCollections v1 inputs,
SHA-256 provenance, role semantics, numeric sanity, volume binding, and axial annotation coverage
before winding constraints are trusted as geometry evidence.scroliq-mesh audits TIFXYZ structure and hashes, mask-aware
connectivity and enclosed gaps, bbox/scale consistency, local edge jumps, severe normal reversals,
symmetric quad-area distortion, and per-triangle Jacobian singular-value isometry (which catches
area-preserving anisotropic stretch that an area check misses). It can also validate an official VC3D
vc_tifxyz_selfcross census and a Villa vesuvius.surface_preflight CT-support
report against the exact surface and volume being audited, failing closed on stale or mismatched
evidence. None of these local checks proves sheet identity.scroliq-ink-audit checks exact-volume experiment
binding, checkpoint identity, train/evaluation separation, held-out declarations, run provenance,
and controls including normal offsets, adjacent winding, geometry perturbation, and an independent
checkpoint. Missing controls remain visibly partial rather than being inferred.scroliq-ink-validate scores a prediction and its
falsification controls (normal offsets, adjacent winding) against the same known ink labels and
validation mask, and emits a hash-pinnable report for the provenance graph. It measures ink-signal
recovery, not reading. See ink-validation.md. Provenance schema v4
binds each held-out validation to its exact report: checkpoint digest, evaluated-array digest, model
window and named falsification controls must match, or the gate fails closed.scrollq-geometry-probe freezes a blind
fit/held-out regional split for the Grand Prize probe and certifies a predeclared minimum spatial gap
between fit and held-out boxes, so held-out spiral-fit residuals cannot quietly leak from nearby fit
inputs. See the blind probe protocol.| claim | evidence (in repo) |
|---|---|
| 64 / 64 listed volumes scored; mean 22.9 decoded chunks / volume | artifacts/2026-09-30-scrollq-n24-dense/ —
volumes.json, campaign log, generated leaderboard, coverage join, and campaign README. |
| Resample: ρ = 0.7944, mean |Δ| = 4.195, top-10 overlap 7 / 10; documented gate fails. Per-chunk provenance proves only 2/64 volumes were truly disjoint (mean 63% chunk re-read) — ρ is inflated by re-reading | artifacts/2026-09-30-resampling-stability/stability-n24-dense-prov.json —
rotate 0 vs 13, 64 volumes, 24 samples, spread 5, per-volume Jaccard overlap. |
14 top-quartile campaign entries flagged label_next (corrected 2026-10-01 from 16; see below) |
artifacts/2026-09-30-scrollq-n24-dense/coverage.json —
exact-volume label/segment join used by the published leaderboard. The first published version of this
file was joined against an empty inventory, so every volume showed zero labels and PHercParis4 (70 ink labels)
was wrongly flagged. It was rebuilt from the same 2026-09-30 inventory recorded in the n=4 and n=12 campaigns,
and scrollq-coverage now refuses an empty inventory. |
| Known-success control does not justify calling ordinary target metric values failures | artifacts/2026-09-30-pherc1667-scan-control/ —
PHerc1667 control comparison for spatial scan metrics. |
| All 13 Grand Prize targets matched by exact eligible volume; primary frontier contains PHerc0813 and PHerc1447 under the two declared axes | artifacts/2026-09-30-grand-prize-qualifier-n24-dense/targets.json —
manifest dated 2026-09-30; PHerc1203 higher-resolution substitute explicitly excluded. |
| First Letters: only PHerc0800 is on the quality × segments frontier in both resample runs (run0: PHerc0800, PHerc0813; run1: PHerc0800, PHerc1545). Across the 22 scans the runs agree at ρ = 0.7211 (mean |Δ| 7.15), below our gate, so quality leaders are reported as a band | artifacts/2026-09-30-first-letters-qualifier-n24-dense/ —
targets.json, targets_run0.json, targets_run1.json,
stability.json (bin/subset_stability.py). |
| Native CT support reproduces an independent survey: on 18 scans with exact-scan evidence from both, 15 / 18 external values fall inside the native 95% interval; mean |difference| 0.043, max 0.111, ρ = 0.78. The three disagreements are listed, not dropped | artifacts/2026-09-30-first-letters-support/ —
support_native.json (256 chunks × 22 scans), support_external.json
(pinned commit, blob SHAs), agreement.json. |
| First exact-scan support numbers for PHerc0846A, PHerc1203, PHerc1218, PHerc0125. For PHerc1203 the higher-resolution scan's survey (0.698) overstated eligible-scan support (0.454) by about 0.24. With support as a third axis, PHerc0175B, PHerc0306B, PHerc0490A, PHerc0800 are on the frontier in both runs | artifacts/2026-09-30-first-letters-support/README.md,
targets_with_native_support.json, targets_run1_with_native_support.json;
tests in tests/test_support.py. |
| Open-bucket chunk audit: 1 declared-vs-stored mismatch across 65 volumes / 390 levels (942,696 sampled objects). PHerc0343P 8.64 µm level 0 stores 555 of 8,543 chunk objects at a size other than declared. The 23 prize-eligible volumes, checked exhaustively (4,228,772 objects), have none. Reported as an observed mismatch; cause unknown; not filed upstream | artifacts/2026-10-01-bucket-chunk-audit/ —
chunk-audit.json, prize-volumes-full.json,
pherc0343p-8.64um-full.json, and an unfiled issue draft. |
Pre-registered protocol-pair test is negative: on 4 registered rescan pairs, the
documented-better protocol is rated lower by otsu_eta in 3/4 pairs and by
edge_sharpness in 2/4. So ScrolIQ scores must not be compared across different scans of the
same scroll |
artifacts/2026-10-01-protocol-pairs/ —
protocol-pairs.json (verdict from decide()), run logs, deviation log;
protocol: docs/protocol-pairs-protocol.md. |
| Hand-entered prize manifests match pinned official sources: Grand Prize 13 / 13, First Letters 22 / 22 (volume ID, voxel size, energy, segments, released predictions, same-scroll higher-resolution scans) | artifacts/2026-10-01-prize-targets/;
regression tests in tests/test_prize_manifest.py. |
| Combined integrity + quality verdict path proven on live data | artifacts/2026-09-30-health-verdicts/ —
healthy TRAIN case and defective-data DO NOT TRAIN case. |
| Native TIFXYZ mesh checks, ink falsification controls, held-out ink validation, fiber trace continuity, and the fit/held-out geometry gap certificate are implemented and tested (synthetic fixtures; not yet run on real community segments or traces) | scroliq-mesh,
scroliq-ink-audit,
scroliq-ink-validate,
scroliq-fiber, and
scrollq-geometry-probe,
with deterministic coverage in tests/test_tifxyz_audit.py, tests/test_ink_audit.py,
tests/test_ink_validation.py, tests/test_fiber_audit.py, and
tests/test_geometry_probe.py. |
Grand Prize provenance requires public held-out validation per trained model, and (schema v4)
binds each one to its exact scroliq-ink-validate report; the published example manifest
validates with zero errors under v4 |
docs/grand-prize-provenance.md —
schema v2 requires public input + known ground truth, numeric metrics, a public evaluation run, a hashed
result artifact, code-commit binding, and same-volume training/validation exclusion proof; schema v4 adds
checkpoint, evaluated-array and falsification-control binding (tests/test_provenance.py). |
| Challenge bottlenecks are represented without inventing downstream confidence | docs/open-problems-alignment.md,
docs/grand-prize-provenance.md,
and the tested CLIs in src/scrollq/. |
ScrolIQ is not an unrolling or ink-detection submission by itself. Its role is to make the path to a qualifying full-scroll submission harder to fool: choose exact eligible data, preserve spatial evidence, expose missing constraints, bind artifacts to the correct CT root, and make provenance fail closed before a result is packaged.
The current Grand Prize tooling therefore favors auditability over a single winner score.
The primary target qualifier publishes a Pareto frontier instead of hiding trade-offs inside arbitrary
weights; scroliq-recto-coverage requires every declared main/attached/detached component
to be unrolled and enforces the strict <10% disconnected-outer-patch exception; provenance schema
v3 additionally requires the ledger's mesh-ID set to match the submitted mesh set exactly; passports
keep unmeasured stages unknown; provenance validation rejects wrong-volume lineage, training/prediction
overlap, and training/held-out overlap while requiring public known-ground-truth validation; mesh and
ink evidence remain explicitly partial unless their own direct diagnostics pass.
The 0–100 ScrolIQ score is scan-health triage only. It is not readability, surface quality,
ink quality, or Grand Prize readiness. It does not infer text from CT texture. A high score does not
mean a scroll will read; a low score does not prove it will not. The score weights are visible in
src/scrollq/score.py, and the September stability gate is published as failed.
Surface-prediction CT support is likewise a geometry-prior sanity check: it says how much of a released
prediction sits on scanned material, not whether that surface carries ink or text. And because the
pre-registered protocol-pair test came out negative, scores from different scans of the same scroll are
not comparable.
This distinction is part of the contribution: every later ScrolIQ layer is designed to keep
measured, partial, and unknown states separate instead of converting
missing evidence into confidence.
Don't train on lies. Structural integrity, publish-time gating, and chunk-content probes for the Vesuvius open data.
Train on the best evidence first. Real-voxel scan-health triage, explicit sampling provenance, coverage joins, stability tests, and the live evaluator leaderboard.
Find the bottleneck. Spatial scan maps, diagnostic passports, Grand Prize provenance, winding-input auditing, native TIFXYZ Mesh IQ, Ink IQ falsification controls, and a path toward surface / fiber / spiral / label diagnostics.
Solo human contributor: Sven. Muse (AI assistant) was used for implementation, analysis, documentation, and review support. Code is MIT licensed; campaign outputs and the exact evidence behind the published claims are committed in the repository.