Safeguard
Developer Tools•

How do you set up a false positive feedback loop for custom rules?

Make reporting easy, route each report to the rule owner, set a response time, fix the rule with a new test, and tell the reporter. Six steps that work.

Safeguard Security Team
4 min read

A false positive feedback loop has six parts: an easy way to report, a route to the rule owner, a response target, a fix that includes a new test, a release, and a reply to the reporter. Without the last step, developers learn that reporting changes nothing and go back to suppressing.

Why loops fail

Most teams have a way to dismiss a finding and no way to say that the rule is wrong. The dismissal fixes one instance for one person. The rule stays wrong for everyone else, who each dismiss it again. A loop turns individual dismissals into rule fixes.

The six steps

  1. Make reporting one click or one line. Put a link in the rule message that opens a prefilled issue with the rule id and the file location. The less typing, the more reports.
  2. Route by rule id. Each rule has a named owner, so a report lands with a person, not a shared inbox.
  3. Set a response target. For example, acknowledge within two working days and decide within a week. Publish it.
  4. Triage into one of four outcomes.
    • Rule bug: fix the rule.
    • Rule too broad by design: narrow it or change its scope.
    • Real finding: explain why and help fix the code.
    • Code is safe and the rule cannot know: document the suppression pattern.
  5. Fix with a test. Add the reduced sample to the rule's test suite before changing the logic, so the fix is proven and the bug cannot return.
  6. Close the loop. Reply to the reporter with the outcome, and note the change in a rule changelog.

What to record per report

FieldWhy
Rule idRoutes it and feeds per rule counts
Link to code at that commitReproduces it
Outcome categoryShows patterns across reports
Time to first responseShows whether the loop is working
Test case idLinks the report to the regression test

Signals the loop works

  • Suppression comments for a rule fall after a fix.
  • Repeat reports of the same cause become rare.
  • Reporters get replies, and say so.
  • Rules at warn level are promoted, because trust grew.

When the maker is someone else

If the rule comes from an external tool or vendor, the same loop applies, with an extra step: send a minimal reproduction to the maintainers and keep a local exception, with an expiry, until they respond. Local exceptions with no expiry tend to become permanent.

Pitfalls

  • Treating every report as developer error. Some reports are real, but if you assume so, the loop dies.
  • Fixing the instance, not the rule.
  • Letting the issue queue grow with no owner. A queue nobody reads is a polite way of saying no.
  • Tuning a rule to silence one loud team and creating false negatives elsewhere. This is why each fix needs a sibling test that should still be flagged.

Quick check

Who should own a custom rule?

A named person or team, recorded next to the rule. Owners answer reports, review the ledger and decide when to retire the rule.

Should every report lead to a rule change?

No. Some reports are real findings and some are cases where the code is safe but the rule cannot tell. The point is that every report gets a decision and a reply.

Safeguard's scanning covers dependencies and SBOMs, and its reachability analysis helps show which findings your code can actually call. You can run a free scan on a repository.

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.