Two suppression mechanisms
- File suppression (.charter-suppress.yml)
- Inline directive (charter:ignore)
.charter-suppress.yml is the repo-level governance file. It is the right choice when the finding has no precise line location, the target file cannot carry inline comments, or the team wants a central, reviewable suppression ledger.Generate an entry using charter suppress:.charter-suppress.yml:expires field is stored as an absolute YYYY-MM-DD date. The CLI default is 90 days from today. Permanent waivers require expires: permanent and a mandatory approver field.Optional path field scopes the suppression to a specific file or glob, reducing the blast radius.Three governance rules
Every scan audits suppressions through three dedicated rules:AE-SUPPRESS-001 is the simplest rule in the model. Every suppression must explain itself. “False positive” alone is usually not enough. “Vendored test fixture” or “lives in a separate infra repo” is much better — it gives a future reviewer the context they would otherwise have to rediscover.
AE-SUPPRESS-002 draws a hard line: permanent waivers require accountability. Without an approver, the underlying finding stays active and the accepted risk is treated as undocumented — regardless of how well-reasoned the suppression may be.
What suppression does to the score
Suppressed findings are excluded from the base score calculation entirely. They are listed separately in
charter doctor output under a “Suppressed” section and appear in the HTML report with full detail. In SARIF output, suppressed findings carry a suppressed: true annotation so downstream security tooling can distinguish them from active findings.Expiry behavior
What happens when a suppression expires
What happens when a suppression expires
When a suppression’s
expires date passes, the finding re-surfaces as active on the next scan. The suppression entry itself remains in .charter-suppress.yml but is ignored — Charter treats expired dates as if the suppression were never there.The expired entry stays in the file deliberately. It provides an audit trail: this finding was suppressed, it expired on this date, and it was not re-suppressed. That history is valuable for security reviews.To re-suppress, either update the expires field to a new future date or add expires: permanent (with a required approver field). Do not delete the old entry; amend it.When to suppress vs fix
Use suppression when the finding is a confirmed false positive in this specific repo, or when the risk is real but explicitly accepted with documented justification and a finite window. Do not use suppression as a substitute for fixing the issue when:- Charter can fix it safely → run
charter fix - The fix is straightforward and low-risk → fix it manually
- The finding is new and not yet understood → investigate first
AE-SUPPRESS-001 and AE-SUPPRESS-002 then keep the ledger honest on every scan — they are not optional. For the exact commands, see Suppress a Finding.
Next steps
Suppress a Finding
The recipe for recording a governed suppression with a reason and expiry.
AE-SUPPRESS-001
The reason-required rule, in full detail.
AE-SUPPRESS-002
Why permanent waivers must name an approver.
Scoring and Caps
How suppressed findings drop out of the base score.