Safeguard
Security Guides•

False positive, accepted risk or won't fix: what is the difference?

A false positive is wrong, accepted risk is real but tolerated, and won't fix is real but not worth fixing. Use distinct statuses so reports stay honest.

Safeguard Security Team
4 min read

A false positive means the scanner is wrong: the issue does not exist. Accepted risk means the issue is real but someone with authority agreed to live with it. Won't fix usually means the issue is real and low value to fix, such as test only code. Track them separately.

Why three statuses beat one

Many teams dump everything into "ignored". Then a report says 400 ignored findings and nobody can tell whether the scanner is noisy or the team is taking on risk. Splitting the statuses answers two different questions: how good is the tool, and how much risk did we choose to hold.

Definitions

StatusIs the issue realWho decidesWhat should be recorded
True positive, openYesTriagerSeverity, owner, due date
False positiveNoDeveloper, confirmed by a second person for high severityWhy the scanner is wrong, evidence
Accepted riskYesA named risk ownerImpact, compensating control, expiry date
Won't fixYes, but low valueTeam leadReason, such as test only code or end of life component
FixedWas realDeveloperLink to the change

How code hosts and standards treat it

Dismissal workflows in common code scanning products give a reason list and an optional free text comment. One major code host's documentation says that when an alert is dismissed the reason is recorded, an optional comment appears in the alert timeline, and the alert no longer counts toward current alerts. It gives two example situations: an error in test only code, and a fix whose effort outweighs its benefit.

The SARIF standard separately models whether a suppression request is accepted, under review or rejected, which is a useful reminder that a suppression is a decision with a state, not a switch.

Rules that keep the statuses meaningful

  1. Require a reason for every status other than open and fixed.
  2. Give accepted risk an expiry date. It is a loan, not a gift.
  3. Send false positive counts back to whoever tunes the rules. A rule with many false positives needs a threshold change, not endless dismissals. See why SAST false positives happen and how to cut them.
  4. Let a different person confirm any false positive on a high severity finding.
  5. Report the three counts separately to leadership.

A short worked example

A scanner flags a hard coded password in a file under a test fixtures folder. If the value is a dummy used only in unit tests, that is a real pattern in the wrong place for the rule: mark it won't fix or exclude the folder, and note why. If it is a real credential, it is a true positive and also an incident, because it needs rotating regardless of where it sits. Misclassifying the second case as a false positive is how credentials stay live.

One factual note on Safeguard

Safeguard can enforce policies and gates and keep evidence records for compliance. If you want a quick look at your own code, the free scan at gold.safeguard.sh/scan is a no-account place to start.

Quick check

Should accepted risk ever be permanent?

Avoid it. Circumstances change, so give each acceptance an expiry date and a named owner who renews it deliberately.

Is test only code always safe to ignore?

Usually the flaws do not ship, but secrets in test files can be real credentials. Check before dismissing.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.