Audit Labs / audit-report

Turn raw evidence into
an audit-ready report.

A command-line tool that reads an audit-tools evidence package, applies declarative rulesets, and maps every finding to SOC 2, ISO 27001, and NIST controls — rendered as Markdown, self-contained HTML, or JSON. Diff and trend modes track drift over time.

# Report on an evidence package
$ audit-report ./aws_audit_prod_2026-08 --format md,html --out report/
  wrote report/report.md
  wrote report/report.html
  aws/prod: 3 failing, 4 passing, 1 n/a
──────────────────────────────
# Gate CI on high-severity findings
$ audit-report ./aws_audit_prod_2026-08 --fail-on high
  ✗ high-severity control unsupported (exit 1)
Three modes

Report, diff, and trend.

One ruleset, three lenses — a point-in-time report, the drift between two runs, or a control’s history across many.

01 · REPORT

Point in time

Evaluate a package against a ruleset and render a control-coverage matrix plus per-finding evidence — each with a plain-language rationale and remediation. --format md,html,json.

02 · DIFF

What changed

Compare a package to an earlier one with --baseline. Every control is classified regressed, fixed, drifted, or unchanged, showing the exact evidence rows that moved. Gate CI on regressions only.

03 · TREND

Over time

Point --trend at a folder of dated packages for a heatmap of every control across every run, plus a failing-count trendline — compliance drift at a glance.

What you get

Built for the auditor on the other side.

A report presents evidence, not a verdict — a failing row means a setting doesn’t support a control; the judgment stays with you and your auditor.

Control coverage
Every cited control, its framework, a worst-wins status, and which rules checked it — the matrix an auditor scans first.
Findings
Failures first, then by severity — each with the result, why it matters, remediation, and the exact evidence rows that failed.
Rulesets
Declarative YAML mapping signals to controls. Bundled for AWS, GitHub, and GitLab — or write your own.
CI gating
--fail-on low|medium|high exits non-zero when a finding — or, in diff mode, a regression — crosses the line.
Maps signals to controls for
SOC 2 ISO 27001 NIST 800-53 · AWS GitHub GitLab
Get started

Install & quickstart.

# Install from PyPI
pip install audit-report

# Report on an audit-tools package
audit-report ./output/aws_audit_prod_2026-08 \
  --format md,html,json --out report/
Python 3.10+ GPL-3.0 PyYAML only SOC 2 · ISO 27001 · NIST

The exit-code contract, at a glance:

0Ran clean — no --fail-on threshold was crossed.
1A finding — or a regression, in diff mode — met the severity threshold.
2Usage error, e.g. a missing package or unknown format.

Pairs with evidence-seal — seal a package for integrity, then report on it for compliance.