Safeguard
Developer Tools•

Should a security check say what it did not scan?

Yes. A green check without a coverage line can mislead. State languages, manifests and paths skipped, so a pass is not read as more than it is.

Safeguard Security Team
3 min read

Yes. A pass only means something relative to what was scanned. Put a short coverage line in the check output: what was scanned, what was skipped and why. Without it, reviewers read a green check as "this change is safe", which is a much bigger claim than the tool made.

The gap between green and safe

A security check reports on the things it can see. If it does not parse a language, cannot resolve a lockfile, skips a path by filter, or times out, the result can still be green. The reviewer sees green and moves on.

Protected branch rules make this easy to miss. GitHub accepts required checks that are successful, skipped or neutral, so a skipped job can let a change merge. The status alone does not tell the reader which of those happened.

What a coverage line contains

Scanned: 2 manifests (package-lock.json, requirements.txt), 14 changed source files (Python, JavaScript)
Skipped: docs/ (excluded path), infra/*.tf (language not enabled)
Rule set: 2026-10-19
Duration: 48 seconds

Four facts, short enough to read at a glance and complete enough to audit.

What to list

ItemWhy it helps
Manifests and lockfiles readShows dependency coverage
Languages analysedShows code coverage
Paths excluded and reasonExposes silent gaps
Rule or database versionExplains differences between runs
Time and any limit reachedFlags partial scans

Where to put it

Not in a comment on every pull request. Keep it in the check run output or job summary, and in the status description when coverage is partial. GitHub combines step summaries into a single page per workflow run, which is a natural home. Raise a comment only when coverage is notably incomplete, such as a lockfile that failed to parse.

Make partial coverage loud

Treat three cases as louder than a normal pass: a manifest the scanner could not read, a language present in the diff that no rule covers, and a timeout. For each, either fail the check for sensitive repositories or change the status text to "passed with gaps" so it is not mistaken for a full scan.

Tie it to inventory

A coverage line is a per pull request version of a bigger question: does your scanner cover all your repositories and ecosystems? See checking every repository is scanned for the program level view.

Try it yourself

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

Look at what the monitoring view says it covers, and compare that with what you would want in a coverage line.

Safeguard asset discovery and SBOM generation help you see what is in scope before you trust a pass. A free scan lists what was found.

Quick check

Will a coverage line make the output too long?

Keep it to four short lines in the check output. The detail is for people who look, and it stays out of the comment thread.

Should partial coverage fail the check?

For sensitive code paths, often yes. For others, a clear "passed with gaps" status may be enough. It is a policy choice.

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.