Sample report

A real Pavois report on a Debian 13 VM (data anonymized). Below: the before/after hardening campaign report, with the transition matrix.

Transition matrix

All 621 controls in the corpus, by state before and after. The table is published whole: adding up a subset does not reproduce the total, and a reader who checks is entitled to check.

BeforeAfterCountMeaning
passingpassing277already compliant, and stayed so
failingpassing243fixed by the hardening
not applicablenot applicable57not applicable to this host, either time
not applicablepassing33became applicable, and passed
not in the corpuspassing4added to the corpus between the two scans
failingfailing4not closed by hardening
failingnot applicable1stopped applying
passingnot in the corpus1removed from the corpus
passingnot applicable1stopped applying
Total621controls in the corpus

How the totals close

Two sums are worth writing out, because they are the ones a reader redoes mentally and gets wrong: the passing count after does not follow from the passing count before.

passing after  = 277 + 243 + 33 + 4 = 557
  (pass>pass, fail>pass, na>pass, absent>pass)

passing before = 277 + 1 + 1 = 279
  (pass>pass, pass>absent, pass>na)

The term a quick check misses is pass>pass: it is 277, not 279, because two controls that passed before left the passing set (one stopped applying, one was removed from the corpus).

Key results

BeforeAfter (post-reboot)
GradeEB
Passing279 / 527557 / 561

Campaign: 243 fixed, 33 newly applicable and passing, 4 still failing, 0 regression. The hardening CONVERGED (re-scan, re-plan, re-apply to a fixpoint): a single apply is not enough, it creates gaps it cannot itself see. Re-scanned after a real reboot (boot_id changed before/after), so the passes are reboot-proven. The whole thing is packaged and verifiable with pavois bundle verify (manifest SHA-256 + checksums).

Campaign report (before / after)

Open full screen ↗

The campaign report compares two scans, before and after a hardening round. It shows the grade delta and the transition matrix: every control’s state before and after (fixed, regressed, newly applicable, still failing). You reason in transitions, not a raw pass rate, because the applicable set grows when the baseline installs components (auditd, AIDE...). Regressions are surfaced first: that is what an auditor checks before anything else.