lcert_verify.report
Report emitters: one verification result, several output formats.
This module exists so that every consumer — the CLI, the MCP server, a CI job, a future HTTP service — renders the same result object rather than each re-deriving what a verdict means. Adding a format means adding one function here, not touching every call site.
Every emitter preserves the abstention discipline: UNVERIFIED must never be
rendered as a pass in any format. Where a format has only pass/fail (JUnit), an
abstention is a failure with the reason attached, never a success.
Full result as JSON. The canonical machine format.
One line per certificate — convenient for streaming into a log pipeline.
SARIF 2.1.0 — renders in GitHub code scanning and most IDE problem panes.
An abstention is emitted at warning level with the reason, never suppressed:
a reader scanning the Security tab must see that no assertion was made.
JUnit XML — appears in the test report of essentially every CI system.
JUnit has no 'abstained' state. An abstention is therefore a failure with the reason attached: reporting it as a pass would be exactly the confident wrong answer this project exists to avoid.