Skip to content

maat verify ​

Verify, dismiss, or reopen a probabilistic finding that was flagged with [Verify].

bash
maat verify --fingerprint <fingerprint>
maat verify --fingerprint <fingerprint> --revoke
maat verify --fingerprint <fingerprint> --reopen
maat verify --fingerprint <fingerprint> --reason "Confirmed by architecture review"
maat --config ./path/to/maat.config.ts verify --fingerprint <fingerprint>

What it does ​

maat verify is the human-in-the-loop step for probabilistic findings. It moves a finding between lifecycle states in the ledger:

  • verify (default): promotes a finding.unverified record to finding.observed, converting a probabilistic finding into a trusted, deterministic one.
  • --revoke: dismisses an unverified finding as a false positive, recording finding.revoked.
  • --reopen: brings a previously revoked finding back to unverified for re-review.

When the kernel produces a finding that depends on enriched facts, it marks the finding with requiresVerification: true. When maat check --ledger runs, these findings are written to the ledger as finding.unverified. They:

  • Display a [Verify] badge in CLI output
  • Never break strict builds

After maat verify, the finding is treated as deterministic on subsequent runs.

Verification lifecycle ​

Kernel produces finding from enriched fact
    ↓
CLI shows [Verify] badge
    ↓
maat check --ledger writes finding.unverified to ledger
    ↓
Human reviews the finding:

    maat verify --fingerprint <fp>            → finding.observed  (trusted; treated as deterministic)
    maat verify --fingerprint <fp> --revoke   → finding.revoked   (dismissed; hidden on later runs)

A revoked finding is not a dead end:

    maat verify --fingerprint <fp> --reopen   → finding.unverified (back for re-review)

A reopened finding returns to unverified, so it shows the [Verify] badge again and can be verified or revoked as usual.

Dismissal ​

If a finding is a false positive, dismiss it:

bash
maat verify --fingerprint <fingerprint> --revoke

This appends a finding.revoked event. The finding is hidden from output on subsequent runs. Dismissal only applies to findings currently in the unverified state.

Reopening a dismissal ​

If a finding was revoked by mistake — or you want to reconsider it — reopen it:

bash
maat verify --fingerprint <fingerprint> --reopen

This appends a finding.unverified event (restoring requiresVerification), so the finding re-enters the verification flow. Reopening only applies to findings currently in the revoked state.

Options ​

OptionPurpose
--fingerprint <fp>Required. The fingerprint of the finding to verify, dismiss, or reopen.
--revokeDismiss the finding instead of verifying it. Only valid for unverified findings.
--reopenMove a revoked finding back to unverified. Only valid for revoked findings.
--reason <text>Optional human-readable reason, persisted on the resulting verify, revoke, or reopen event.

--revoke and --reopen are mutually exclusive; passing both exits with an error.

Validation and exit behavior ​

maat verify exits non-zero when:

  • no ledger is configured;
  • --fingerprint is missing, or the fingerprint is not found in the ledger;
  • --revoke and --reopen are passed together;
  • --reopen targets a finding that is not revoked;
  • the finding is already observed (already verified);
  • without --reopen, the finding is not in the unverified state (for example baselined or resolved).

Why this exists ​

Enrichers produce probabilistic facts. Rules consuming those facts produce findings that carry uncertainty. The system does not auto-approve these findings because:

  • A probabilistic model may hallucinate or misinterpret.
  • The same code run twice through an LLM may produce different enriched facts.
  • Build-breaking findings must be trustworthy.

Human verification is the explicit trust boundary. A verified finding is a decision that a human has reviewed the probabilistic output and accepted it as valid for this codebase. Revocation and reopening keep that decision reversible: a dismissal is never permanent and can always be brought back for review.