--fail-threshold CI gate — drop it into any CI runner that renders JUnit (which is all of them).
GitHub Actions
GitLab CI
CircleCI
pytest integration
pdfhell isn’t a pytest plugin (deliberately — it’s a benchmark, not a test framework), but you can call the runner from a pytest test:pytest tests/test_pdfhell_gate.py. If your CI uses pytest already, this slots into the existing test pipeline without changing the report format.
Reading the JUnit output
JUnit dialect — passes, failures, and “skipped” (refusals):fell_for_trap— the model returned exactly the wrong answer the trap was designed to elicit. A known failure mode. Most diagnostic.hallucination— the model returned something neither expected nor forbidden. A different kind of wrong.
"I can't determine...") — they don’t count as quality failures, but they don’t count as passes either.
The audit pack
--audit-pack <path> writes a ZIP procurement teams can attach to a diligence appendix. Contents:

