Skip to content

Submission v4: arthurmichel00 — 129.14 official train / 130.57 holdout (supersedes #68) - #83

Open
arthurmichel00 wants to merge 3 commits into
8090-inc:mainfrom
arthurmichel00:submission-v4/arthurmichel00
Open

Submission v4: arthurmichel00 — 129.14 official train / 130.57 holdout (supersedes #68)#83
arthurmichel00 wants to merge 3 commits into
8090-inc:mainfrom
arthurmichel00:submission-v4/arthurmichel00

Conversation

@arthurmichel00

@arthurmichel00 arthurmichel00 commented Aug 4, 2026

Copy link
Copy Markdown

MIB Doc Challenge Submission (v4 — supersedes #68)

Per the organizers' guidance that updated submissions are filed as a new PR: this replaces #68 (same author), which replaced #58, which replaced #51. Delta vs #68: three new reading mechanisms, all flag-gated, all baked into the image's ENV and measured as one arm on the full official train set. (1) A generator-inversion reader for the four closed-menu fields — every legal candidate is rendered through a degradation kernel recovered from the damaged row itself and picked by pixel correlation against a census-calibrated margin — which reads rows where no decoder gets usable frames; it is a port of another entrant's MIT-licensed module, corrected and re-gated, and labelled as a port in ATTRIBUTION.md. (2) Cross-view likelihood fusion, in-house: each candidate's log-likelihood is averaged across preprocessing views and across pages so the channel decides once on the fused evidence instead of once per view, with no new inference. (3) A strip-scoped fine-tuned Tesseract LSTM (third-party MIT artifact, credited with its sha in THIRD_PARTY_NOTICES.md) at the escalation tier only; the page-level variant measured 10× over the time budget and was rejected in design, and this pass's individual yield is unproven — it was measured inside the shipped flag-set, never alone, and we say so rather than claim it.

Measured out in the same sprint and documented at the same resolution: a per-field candidate margin floor was rejected on measurement in composition (its synthetic census forecast a cost of 0.6 correct fills; the corpus charged 8 — in-container flag toggles isolated it, and dropping it is what took the arm from 129.11 to 129.14 train and 9 wrong fields to 3); a cross-channel veto was killed on evidence at 0 fires across the real 31-slot fill population; fee-row geometry turned out to have a reachable population of zero (the generator prints the value away); candidate scoring for arrival dates decodes the year below chance (42% against 50%) and is CFA-negative even if perfect; and two-rail band registration ships dormant with a hand-verified 2/2 detector because the shipped need-filter fires 0/255. Kill receipts for all five are in LEVERS.md and APPENDIX.md.

Field-level audit vs #68: 19 right, 3 wrong, 3 neutral, and 0 adjudication flips — classification and calibration are unchanged, so no verdict moved in either direction. The 3 losses are itemized rather than left for a reviewer to find: two are previously-correct fills the new acceptance layers no longer accept (the field falls back to its corpus-mode default), one is a new value landing where the default happened to match gold. Two of the gains are cases a human review round had marked as unreadable walls. Runtime moved from 5.81 to 5.87 s/PDF against the 6.0 budget — the two new reading channels cost ~0.06 s/PDF between them — and that cost is disclosed alongside the points.

Links

Summary

Official Docker-contract train score: 129.14 / 150 · fixed 200-case holdout: 130.57 (holdout ≥ train at all 10 measured milestones) · exactly 1 catastrophic false approval (the documented designed trap) · 0 fallback rows · 5.87 s/PDF vs 6.0 budget · 0.36 GiB image. predictions.jsonl generated by the frozen image over all 5,000 validation PDFs under the offline contract, with every shipped lever baked into ENV so the documented docker run reproduces the submission with no -e overrides; passes validate_submission.py (5,000 valid, 0 missing). Approved-side consistency enforced structurally at emission and separately re-audited: 0 violations. No answer-key ingestion — the planted key is adversarial and never read as evidence. Built by AI agents in gated autonomous loops (40+ levers A/B-measured, 17 shipped; receipts in the repo's LEVERS.md and APPENDIX.md, including the full flip audit, the arm-by-arm A/B table, and the timing ladder for this build).

Checklist

  • I filled out the submission form linked above
  • This PR only adds submissions/arthurmichel00/predictions.jsonl, MEMO.md, and SUBMISSION.md
  • predictions.jsonl passes scripts/validate_submission.py against data/validation_manifest.csv
  • My solution repository is public and includes a Dockerfile
  • My Docker image runs offline (--network none) and accepts <input_pdf_dir> <output_predictions_path>
  • My submitted runtime uses no LLMs, VLMs, cloud OCR, or network services
  • Model artifacts fit the size limits in DOCKER_SUBMISSION.md
  • No hardcoded validation answers and no manual per-case edits
  • My memo describes my approach, failure modes, and what I would improve with another week

🤖 Generated with Claude Code

…t Apache-2.0 (matches THIRD_PARTY_NOTICES.md); 15MB artifact is included in the 0.36 GiB, not additive; drop channel-cost split that misrounded against the 0.06 total; page-level variant cost stated per-page (0.371 s) instead of ambiguous shorthand; 'never read' scoped to runtime; two ported modules not one; milestone claim made count-free (record shows 12, memo said 10 - understated). No numbers, predictions, or claims changed otherwise.
…et raise (record: LEDGER census fix commit), not deskew alone
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant