Skip to main content
Suppression is how you keep accepted exceptions visible without letting them disappear. Charter treats suppressions as governance artifacts — they are audited on every scan, not silently honored.

When to suppress

Confirmed false positive

The finding doesn’t reflect a real problem in your repo — Charter’s detection doesn’t apply to your specific setup.

Accepted risk with justification

The risk is real but intentionally accepted, documented, and has an owner and a time horizon.

Genuine issue not yet addressed

Don’t suppress findings you just haven’t gotten around to fixing. Fix them, or leave them in the active findings list until you do.

Score inflation

Don’t suppress to hit a threshold. A suppressed finding still represents real repo state — suppressions don’t make problems go away.
If you can fix the underlying problem cleanly, do that first.
1

Run the suppression command

The standard suppression path is a time-bounded waiver:
2

Review what was written

charter suppress appends an entry to .charter-suppress.yml:
Commit this file — it is part of your repo’s governance record, not a local override.
3

Re-scan to confirm

AE-CC-001 should no longer appear in the active findings list. It will appear in the “suppressed” section of the scan output instead, so it’s still visible.

Expiry values

Permanent suppressions require --approver. Without it, AE-SUPPRESS-002 fires as a High finding on every scan — which costs you points and makes the suppression effectively ungoverned.
A permanent suppression with an approver looks like this in .charter-suppress.yml:

Inline suppression

For single-line, line-anchored findings in source files, you can suppress inline instead of writing to .charter-suppress.yml:
Place the directive on the same line as the triggering content, using the file’s native comment syntax:
Supported comment forms: #, //, <!-- -->
Inline suppression does not work for:
  • file-level findings (no single line to anchor to)
  • strict JSON configs like .mcp.json (no comment syntax)
  • multi-line findings
For those cases, use .charter-suppress.yml as the primary suppression path.

Governance rules Charter enforces

Charter audits every suppression on each scan: A high suppression rate (AE-SUPPRESS-003) is informational — it tells you the repo may be muting more than it’s fixing. For why suppressions are governed this way and how they affect the score, see Suppression Governance.

Good suppression hygiene

  • Prefer a real fix when the repo state is genuinely wrong
  • Use finite --expires windows rather than permanent
  • Write reasons that explain the decision, not just "false positive"
  • Add --approver for any long-lived accepted risk
  • Review .charter-suppress.yml periodically — don’t let it grow silently

Next steps

Suppression Governance

Why suppressions are audited and how they change the score.

AE-SUPPRESS-002

The approver requirement for permanent waivers.

charter suppress

Every flag the suppress command accepts.

Use charter fix Safely

Prefer a real fix over a suppression when one is available.