Why this rule
A permanent suppression with no expiry and no approver is an unbounded waiver. It silently removes a finding from the score indefinitely with no human accountability attached. Unlike a time-bounded suppression — which expires and forces a re-evaluation — a permanent waiver with no approver can survive security reviews, team rotations, and architectural changes without ever being questioned. Charter refuses to honor it until a named approver accepts the risk.What triggers it
Charter audits every active suppression — non-expired entries in.charter-suppress.yml and inline # charter:ignore directives matched to a finding — and flags any entry that is an explicit permanent waiver without a named approver.
A suppression is a permanent waiver when its expires field is set to the literal value permanent. If that entry has no approver: field (or the approver is blank), Charter:
- Flags the entry at High severity
- Does not honor the suppression — the underlying finding remains active and is included in scoring
expires date, or with no expires at all (which applies a default TTL), are not permanent waivers and do not require an approver.
Examples
- Failing
- Passing
Permanent waiver with no approver — flagged High, suppression not honored:An entry that fires both AE-SUPPRESS-001 and AE-SUPPRESS-002:
.charter-suppress.yml
.charter-suppress.yml
How to fix
Identify unapproved permanent waivers
Run
charter explain AE-SUPPRESS-002 — Charter lists every permanent waiver missing an approver, including the file location and the rule being suppressed.Add an approver or convert to time-bounded
Choose one of two paths:Option A — Add an approver (keep the permanent waiver, add accountability):Option B — Convert to time-bounded (eliminate the permanent waiver):
Score impact
High (−10); no hard cap. The underlying finding also remains active and contributes its own deduction, since the unapproved permanent waiver is not honored.
Edge cases
Malformed expires field
Malformed expires field
An
expires value that is not YYYY-MM-DD or permanent fails closed — the engine treats the entry as inert, suppresses nothing, and the finding stays active. The malformed entry is not audited by AE-SUPPRESS-002 (only non-expired file entries and matched inline directives are audited).Blank approver counts as missing
Blank approver counts as missing
A
approver: field containing only whitespace counts as missing and fires the finding.Secret rule suppressions
Secret rule suppressions
Secrets are suppressible like any rule. An unapproved permanent
AE-SEC-001 or AE-SEC-002 suppression fires this rule and is not honored — the ≤ 49 score cap for secrets remains in effect. An approved permanent secret suppression lifts the cap.Both AE-SUPPRESS-001 and AE-SUPPRESS-002 can fire together
Both AE-SUPPRESS-001 and AE-SUPPRESS-002 can fire together
An entry that is both reason-less and a permanent waiver without an approver fires both AE-SUPPRESS-001 (Medium, −4) and AE-SUPPRESS-002 (High, −10) independently.
Related rules
AE-SUPPRESS-001
Requires a reason on every suppression — the documentation companion to this rule.
AE-SUPPRESS-003
Informational — surfaces when the overall suppression rate across the repo is high.