Tooling for measuring what apps/sim/lib/file-parsers hands to the chunker, and for comparing two checkouts on the same corpus. See PLAN.md for the design (modelled on olmOCR-bench unit tests and OmniDocBench scoring), FINDINGS.md for the audit that motivated PR #7709, and BENCHMARK.md for the before/after results.
bun(run every.tsscript fromapps/simso@/and the pinnedxlsxresolve; setDATABASE_URL=postgres://x:y@localhost:1/nonebecause the module graph touches@sim/dbat import time)pandoc3.x and atypstexecutable onPATH(the PyPItypstpackage is a library; wrap it in a script namedtypstthat runstypst.compile(input, output=output))- A Python 3.12 environment with
pymupdf pdfplumber python-docx python-pptx openpyxl pandas xlrd pyxlsb odfpy chardet rapidfuzz; pointPARSER_EVAL_PYTHONat its interpreter gh(authenticated) andcurlfor the corpus fetchers; macOStextutilfor.docreferences
python generate-corpus.py <corpus-dir> <path-to-typst>
bun scripts/parser-eval/generate-spreadsheets.ts <corpus-dir>
./fetch-real-world.sh <corpus-dir>
DATABASE_URL=postgres://x:y@localhost:1/none bun scripts/parser-eval/run-parsers.ts <corpus-dir>
python reference-extract.py <corpus-dir>
python score.py <corpus-dir> # writes report.md and scores.jsonbench/manifest.json pins 961 files by URL and SHA-256. bench/build.sh rebuilds the corpus (fetch re-downloads only what is missing and manifest verifies hashes; sources that drifted are listed in bench/NOTES.md), then writes reference extractions and a per-format report.
PARSER_EVAL_PYTHON=/path/to/python bench/build.sh
DATABASE_URL=postgres://x:y@localhost:1/none bun scripts/parser-eval/bench-run.ts <bench-dir> <bench-dir>/out-<label>
python bench-compare.py <bench-dir> <bench-dir>/out-before <bench-dir>/out-after <bench-dir>/compare.mdbench-compare.py scores each file against independent extractors and applies the regression gate described at the top of its report: line recall and vocabulary recall may not drop by more than 0.02, noise may not rise by more than 0.02, no new glued tokens, no new degraded output, no unintended ok→error flips, plus CHECK flags for count-aware word depletion and for reference words present before and absent after. Every flag must be explained before a change is called an improvement.