Safeguard
Developer Tools•

How do I stop duplicate security tickets from repeated scans?

Stop duplicate security tickets by giving each finding a stable fingerprint and updating the existing ticket instead of creating a new one on every scan.

Safeguard Security Team
3 min read

Stop duplicate tickets by giving every finding a stable fingerprint, storing it on the ticket, and checking for an open ticket with that fingerprint before creating a new one. If it exists, update it. If it was closed and the finding returns, reopen it.

Why duplicates happen

A scanner runs daily or on every commit. Each run sees the same vulnerable package. An automation that only knows "a finding exists" files a ticket every time. Within a week, a team has seven copies of one problem and stops trusting the queue.

The fix is idempotence: running the same automation twice should leave the same result as running it once.

What goes into a fingerprint

A fingerprint is a short string built from fields that identify the problem and do not change between scans.

FieldInclude?Reason
Advisory or CVE idYesNames the flaw
Package name and ecosystemYesNames the component
Repository and manifest pathYesNames where it lives
Installed versionUsually noChanges when someone upgrades, and the finding should then close
Scan timestampNoChanges on every run
Severity scoreNoCan be revised without being a new problem

Hash the chosen fields together, or join them with a separator, and keep the result in a custom field or a ticket label.

Steps

  1. Define the fingerprint fields and write them down.
  2. Add a searchable field to the ticket for the fingerprint.
  3. On each scan result, search for an open ticket with that fingerprint.
  4. If found, add a comment only when something changed, such as a new fix version or a changed score. Do not comment on every run.
  5. If none is open but a closed one exists, check why it was closed. Fixed and regressed means reopen. Accepted risk means leave it closed until the acceptance expires.
  6. If nothing exists, create the ticket.

Handle the awkward cases

Two scanners can report the same flaw with different ids. Normalize on the advisory identifier where you can, and map aliases such as a CVE and a GitHub advisory to one key.

A race can create duplicates if two automation runs execute at the same moment. Use a lock, a unique constraint in your own store, or a single queue worker.

If you already have duplicates, merge them once, keep the oldest ticket, and link the rest to it.

Try it yourself

In the demo, watch how one vulnerable component appears across the dependency inventory. That single row is what your fingerprint should represent.

Click through it at your own pace, or open it full screen.

Quick check

Should the installed version be part of the fingerprint?

Usually not. When the version changes, the old finding should resolve. Keeping the version out lets the same ticket close on its own.

What should happen when a closed finding comes back?

Reopen it if it was fixed. If it was an accepted risk, leave it closed until the acceptance date passes.

Safeguard includes SBOM and dependency scanning, and a free scan is available at gold.safeguard.sh/scan.

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.