Why this rule
A suppression without a reason is indistinguishable from accident. When a finding re-surfaces after a security review or team rotation, there is no record of why it was acceptable or who decided. Suppressions are a legitimate tool for managing accepted risk — but only when the decision is documented. A reason-less suppression creates a silent blind spot that grows harder to audit over time.What triggers it
Charter audits every suppression that was applied during the current scan:- All entries in
.charter-suppress.yml - Every inline
# charter:ignorecomment that matched a finding
reason field is present and non-empty. Both of these fire the finding:
- A YAML entry with no
reason:key - An inline directive with no
reason="…"segment
The suppression itself still takes effect — Charter continues to suppress the underlying finding. A missing reason is a governance hygiene problem, not grounds to un-suppress. The deduction is applied to the score, not the original finding.
Examples
- Failing
- Passing
A An inline directive with no reason:
.charter-suppress.yml entry with no reason field:.charter-suppress.yml
internal/scanner.go
How to fix
Find reason-less suppressions
Run
charter explain AE-SUPPRESS-001 — Charter names the suppressed rule and its source file (YAML entry or inline comment location) in the finding evidence.Add a meaningful reason
For YAML entries, add a
reason: field. For inline comments, add reason="…" after the rule ID. Use plain language — a sentence is enough.Score impact
Medium (−4); no hard cap. One finding per reason-less suppression entry.
Edge cases
Non-matched YAML entries are still audited
Non-matched YAML entries are still audited
A suppression entry whose rule never matched any finding this scan — but which is still non-expired — is still audited for a reason field. Expired entries are inert and not evaluated.
Dangling inline directives are not audited
Dangling inline directives are not audited
An inline
# charter:ignore comment that matched no finding is not audited. Inline directives are discovered only at finding locations.Whitespace-only reason counts as missing
Whitespace-only reason counts as missing
A
reason: field containing only spaces or tabs counts as missing and fires the finding.Secret rule suppressions
Secret rule suppressions
Secrets are suppressible like any rule. A reason-less
AE-SEC-001 or AE-SEC-002 suppression is audited exactly the same way as any other rule.Related rules
AE-SUPPRESS-002
Requires an approver on permanent suppressions — the accountability companion to this rule.
AE-SUPPRESS-003
Informational — surfaces when the overall suppression rate is high.