Solution for the 8090 MIB Doc Challenge: three complementary open-source pipelines (see ATTRIBUTION.md) run over one shared render/OCR substrate; a frozen learned referee merges their full evidence — votes, confidences, decision paths, field candidates, injection and completeness signals — and decides by expected value under the official scoring asymmetry.
- Train, 5-fold cross-validated (all learned components out-of-fold): 142.59 / 150
- One-shot sealed 200-case holdout (pre-registered, spent once): 142.15 / 150 (CV→holdout gap 0.44)
- Runtime at contest limits (4 vCPU / 8 GiB,
--network none, official Docker contract): 3.70 s/PDF average (budget 6.0), byte-identical across repeated runs - No network, no LLMs/VLMs, no cloud APIs at runtime; all deps version-pinned
- Substrate (once per PDF): 300-DPI grayscale render, a 13-configuration Tesseract union, visible/hidden glyph classification over the text layer (white-ink / tiny-font / off-crop detection), and CropBox→MediaBox widening. OCR is lazy behind a text-layer length gate.
- Three vendored pipelines (adapted at their I/O seams only, decision logic unmodified): @thegoleffect, @tylergibbs1, and @zubalr — including zubalr's two-phase corpus aggregation, preserved by the adapter.
- Note evidence: an original dual-pass adjudicator-note reader plus two damage-specialist probes. A corroborated note finding is guardrail-grade and locks the decision (277/277 on train); a disqualifying-flag consensus of ≥3 pipelines locks DENIED (58/58).
- Referee (frozen artifacts in
artifacts/): anchor-relative backoff posterior tables give a base posterior; decisions maximize expected value under the +8/+2/−4 asymmetry. Three gated heads sit on top (decision, confidence, field-level candidates), each adopted only where nested out-of-fold evaluation showed non-negative payoff.
Full details, failure modes, and honest-numbers discussion are in the
submission memo (submissions/speculator19/MEMO.md in the challenge PR).
docker build -t mib-submission .
mkdir -p /tmp/out
docker run --rm --cpus=4 --memory=8g --network none \
-v /path/to/pdfs:/input:ro -v /tmp/out:/output \
mib-submission /input /output/predictions.jsonlengine/— substrate, pipeline adapters, note reader, referee runtime, entrypoint (predict.py); vendored pipeline sources underengine/deps_*/with licenses preservedartifacts/— frozen learned artifacts:referee.json(posterior tables, gates, per-field strategies) andmodels.joblib(gated heads); aggregate statistics only, no per-case datarun.sh— the two-argument contract entrypointATTRIBUTION.md— exact provenance and local patches for every vendored component