Safeguard
Developer Tools•

Signed commits and required checks: what they prove, and what they don't

Signed commits show who pushed, and required checks show tests passed. Neither proves the code is safe. Here is what each control does and misses.

Safeguard Security Team
4 min read

Signed commits show that a commit was signed by a verified key, and required status checks show that named checks passed. Neither shows that the code is safe or the change is intended. Treat them as evidence about process and identity, and pair them with human review.

Myth versus fact

ClaimReality
Signed commits mean the code is safeThey show a signature verified, not that the content is correct or benign
Required checks mean the change is reviewedChecks are automated. They do not replace a person reading the diff
Anyone can bypass checks, so they are pointlessSettings can restrict the source of a check and who bypasses rules
One approval from the author is fineApprovals should come from someone else

What signed commits do

GitHub's rules reference says that when required commit signing is enabled on a branch, every commit that contributors and bots push must be signed and verified. That helps with attribution: it is harder for someone to push a commit pretending to be a colleague.

What it does not do is judge the commit. A legitimate engineer with a verified key can sign a bad change. A compromised laptop with the signing key can sign a malicious one. The signature is a statement about who, not about what.

What required status checks do

GitHub states that required status checks ensure all required CI tests pass before collaborators can change the branch. They can be checks or statuses, and the commit status API lets external services set statuses.

The reference also includes a point that is easy to miss. Any person or integration with write permission to a repository can set the state of any status check, but you can choose to accept a check from one specific GitHub App. With that option, a status set by any other person or integration will not allow merging. If you leave the source as any source, you can still verify the author of each status in the merge box.

So a check is as trustworthy as its source and the people who can write to the repository.

Strict or loose checks

GitHub describes two kinds. Strict checks require the branch to be up to date with the base branch before merging, which is the default behavior, and may mean more builds. Loose checks do not require this. For a payments repository the stricter choice reduces the chance that two individually passing changes break each other after merging, at the price of more rebuilds. Decide deliberately.

Where each control sits in a release story

  1. Identity: signed commits, and multifactor authentication on accounts.
  2. Review: required approvals and code owner review.
  3. Automation: required status checks from a named app.
  4. Safety: force pushes blocked, so approved history stays approved.
  5. Approval to deploy: environment reviewers.

No single item carries the argument. The combination does.

What to say to a reviewer

Be precise. "All commits to the release branch are signed and verified, checks must pass from our CI app, and changes need approval from the owning team" is accurate. "Our code is verified secure" is not supported by any of these controls.

Practical setup tips

  • Document how engineers set up signing and what happens when a key is lost or an engineer leaves.
  • Pin the source of required checks to your CI app where your plan allows it.
  • Review the list of people with write access regularly.
  • Remember that signing does not scan for vulnerable dependencies, so add a dependency review check separately.

Where Safeguard fits

Safeguard adds vulnerability and dependency checks as policies and gates on pull requests, so a signed commit that adds a flawed library still gets flagged. A free scan is available at gold.safeguard.sh/scan.

Try it yourself

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

Click through the gate and see how signing, checks and approvals each appear as separate conditions.

Quick check

Do signed commits stop malicious code?

No. They help attribute a commit to a verified key. The content still needs review and checks.

Can a status check be faked?

Anyone with write permission can set a status, but you can restrict a required check to a specific GitHub App as its source.

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.