Safeguard
Developer Tools•

Is your CI severity threshold actually doing anything?

Warn-only modes, audit levels and defaults can make a threshold a no-op. Five checks to confirm your gate really blocks, with examples from common tools.

Safeguard Security Team
3 min read

A threshold can be set and still do nothing. Warn-only switches override it, some flags change exit codes but not output, and defaults may be stricter or looser than you think. Test your gate with a known bad dependency to confirm it fails.

Ways a threshold goes quiet

CauseWhat happensEvidence
Warn-only enabledRun succeeds, findings logged as warningsThe GitHub dependency review action says warn-only overrides fail-on-severity
Wrong exit code handlingScanner fails, pipeline step continuesA shell step ignores non zero results
Threshold affects output, not exitFindings print, build passesnpm audit docs say its audit level does not filter output
Check not requiredGate fails, merge allowedBranch protection missing the check
Scan skippedNothing ranConditional or path filter

The check that proves it

Do a seeded test, at least once per repository and again after any pipeline change.

  1. Create a branch that adds a dependency with a known Critical advisory.
  2. Open a pull request.
  3. Confirm the gate reports failure.
  4. Confirm the merge button is disabled.
  5. Remove the dependency, and confirm the gate passes.

Write down the date and result. It takes ten minutes and tells you more than any dashboard.

Read the defaults

The dependency review action lists a default minimum severity of low, which means almost anything fails. That is strict and may be a nasty surprise at rollout. The npm audit docs say that by default it exits non zero if any vulnerability is found, and that the exit code depends on the audit level once set, so a run can exit 0 even with findings below that level.

Read your own tool's documentation for three facts: the default severity, how it maps findings to an exit code, and whether warn modes override thresholds.

Common misconfigurations

  • A pipeline step ends with a pipe to another command, which hides the scanner's exit code.
  • The threshold lives in a config file that is not read in CI.
  • A staging pipeline has the gate, the production one does not.
  • The gate was set to warn during rollout and never switched back.

Add an alert for silent gates

Track the share of pull requests where the gate ran and where it failed. A gate that never fails across hundreds of changes either guards a very clean codebase or does nothing. Know which.

Quick check

How often should I run the seeded test?

After every pipeline change, and at least once a quarter.

Why not just trust the green check?

A green check can mean pass or can mean the scan never ran. Only a seeded failure shows the gate works.

Safeguard's policies and gates show each decision with the rule that caused it, which makes a silent gate easier to spot. The free scan is at gold.safeguard.sh/scan.

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.