> ## Documentation Index
> Fetch the complete documentation index at: https://tashfiq.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# AE-SUPPRESS-003

> High suppression rate — surfaces when suppressions account for more than 30% of total findings, prompting a review without penalising the score.

**Rule ID:** AE-SUPPRESS-003 · **Severity:** <Badge color="gray">Informational</Badge> · **Category:** Governance · **Auto-fixable:** No

<Info>
  AE-SUPPRESS-003 is **informational only**. It carries no point deduction, does not engage any score cap, and cannot itself be suppressed. It surfaces so the pattern is visible during reviews — it does not change your score.
</Info>

## Why this rule

A high suppression rate is a signal that either the tool is misconfigured for this repo or the team is systematically bypassing its controls. Both patterns are worth surfacing explicitly so teams self-correct rather than silently diverge from the score. See [Suppression governance](/docs/concepts/suppression-governance) for how the rate fits the wider model.

A suppression rate above 30% doesn't automatically mean something is wrong — a freshly migrated repo may legitimately carry many accepted findings during initial calibration. The point is intentional suppression, not the absence of it.

## What triggers it

Charter computes the suppression rate after scoring:

```
rate = suppressed findings / (active findings + suppressed findings)
```

Governance findings like AE-SUPPRESS-003 itself are excluded from the denominator to prevent a feedback loop. The finding fires when the rate exceeds **30%** and at least one suppression exists.

## Examples

<Tabs>
  <Tab title="Failing">
    ```text theme={null}
    3 active findings + 6 suppressions
    rate = 6 / (3 + 6) = 67%  → exceeds 30% threshold → fires Informational
    ```

    The score is unchanged. The 3 active findings still deduct normally; the 6 suppressions are already excluded from the base score.
  </Tab>

  <Tab title="Passing">
    ```text theme={null}
    10 active findings + 1 suppression
    rate = 1 / (10 + 1) = 9%  → below 30% threshold → no finding

    any active findings + 0 suppressions
    rate = 0 / N = 0%         → zero denominator contribution → never fires
    ```
  </Tab>
</Tabs>

## How to fix

This finding is a prompt to review, not a defect to silence.

<Steps>
  <Step title="Audit each suppression">
    Open `.charter-suppress.yml` and review each entry. Ask: was this suppressed because the risk was genuinely evaluated and accepted — or to avoid noise?
  </Step>

  <Step title="Fix what can be fixed">
    If a suppression was added to avoid fixing a real issue, address the underlying finding and remove the suppression entry.
  </Step>

  <Step title="Confirm governance fields are complete">
    Every remaining suppression should have `reason:`. Permanent suppressions require `approver:`. Missing fields will trigger AE-SUPPRESS-001 or AE-SUPPRESS-002 independently.
  </Step>

  <Step title="Let the rate drop naturally">
    As findings are fixed and suppressions are lifted, the rate falls. No special action is needed once the denominator balance is restored.
  </Step>
</Steps>

## Score impact

Informational (0 points deducted). AE-SUPPRESS-003 is excluded from the severity tally and all caps. It appears in output and in the HTML report as an informational notice, but does not affect the numeric [score](/docs/concepts/scoring-and-caps) or gate result.

## Edge cases

<AccordionGroup>
  <Accordion title="Freshly migrated repos">
    A repo that has just adopted Charter may have many accepted findings under suppression during the initial calibration period. AE-SUPPRESS-003 fires as intended — it's the prompt to review those suppressions and decide which ones to lift as the codebase improves. This is advisory, not blocking.
  </Accordion>

  <Accordion title="Can AE-SUPPRESS-003 be suppressed?">
    No. It is never counted in its own denominator and cannot be suppressed. This prevents the feedback loop where suppressing the governance finding further increases the suppression rate.
  </Accordion>
</AccordionGroup>

## Related rules

<CardGroup cols={2}>
  <Card title="AE-SUPPRESS-001" icon="file-pencil" href="/rules/AE-SUPPRESS-001">
    Suppression missing a `reason:` field.
  </Card>

  <Card title="AE-SUPPRESS-002" icon="shield-lock" href="/rules/AE-SUPPRESS-002">
    Permanent suppression missing an `approver:` field.
  </Card>
</CardGroup>

## CLI

```bash theme={null}
charter explain AE-SUPPRESS-003
```
