Safeguard
Security Guides•

Should a security scan fail open or closed when the vendor is down?

When your AppSec vendor has an outage, should CI block merges or let them through? A decision guide on fail open versus fail closed, with a contract angle.

Safeguard Security Team
4 min read

Fail closed for code that can reach production unreviewed, fail open for low risk repos, and write the choice down before you sign. A scanner outage should never silently turn into a green check. Decide the behaviour per repository tier, then ask the vendor what it promises when its service is unavailable.

Definitions

Fail closed means a merge is blocked when the security check cannot run. Fail open means the merge proceeds without a result. Neither is free. Closed stops developers during an outage. Open leaves a window where unscanned code ships.

The quiet failure to watch for

The dangerous case is not a deliberate fail open. It is a check that reports success because it never ran. GitHub's documentation states that a skipped job reports its status as success and will not block a pull request, even when the job is a required check. Its protected branch page lists successful, skipped and neutral as the statuses that satisfy a required check. If your scanner step is skipped because an API call timed out and the job is conditional, the branch rule may treat that as a pass.

So test it. Break the scanner on purpose in a sandbox repo and see what the merge button does.

A simple decision table

Repo tierExamplesOutage behaviourWhy
HighPayments, auth, infrastructure codeFail closed, with a named break glass approverUnscanned changes are the risk you bought the tool to remove
MediumInternal servicesFail closed for a short window, then manual reviewKeeps work moving without losing the record
LowDocs, prototypesFail open, rescan afterwardsCost of blocking exceeds the risk

Steps to set it up

  1. Tier your repositories, even roughly. Three tiers is enough.
  2. For each tier, decide the outage rule and who can override it.
  3. Make the override leave a record: a labelled pull request or a ticket reference.
  4. Schedule a catch up scan for anything merged during an outage window.
  5. Rehearse once a quarter by disabling the scanner token in a test repo.

What to ask the vendor

Ask what status the integration reports when the service is unreachable, and whether you can choose it. Ask how outages are announced and whether a status history is public. Ask for the retry and timeout behaviour of the CI step, because a long timeout can stall every pipeline at once. Put your chosen behaviour into the pilot success criteria so you test it before purchase.

Try it yourself

Open the demo and look at how a gate decides between pass and block on a pull request. Then consider what would happen at that point if the scan result were missing.

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

Safeguard supports policies and gates on pull requests, and you can try a free scan at gold.safeguard.sh/scan.

Quick check

Does a skipped scan job count as passing in GitHub?

According to GitHub's documentation, a skipped job reports success and does not block a pull request, even when it is a required check. Test your own setup to confirm.

Is fail closed always safer?

It is safer for high risk code, but a blanket rule invites workarounds such as disabling the check. Tiering with a logged override tends to hold up better.

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.