Safeguard
Developer Tools•

Can SBOM history help you find which dependency broke a release?

When a release misbehaves and the code diff is quiet, a diff of stored SBOMs shows which dependency changed. Here is how to bisect with SBOM history.

Safeguard Security Team
3 min read

Yes, if you stored an SBOM for each release. Diff the SBOM of the last good release against the first bad one, list the added, removed and upgraded components, and test them in halves until one change reproduces the problem. It works best when your application code did not change much.

When this helps

Some regressions have no matching code change. The application diff is tiny, but behaviour shifted: a date format, a timeout, a serialised field. A transitive dependency moved because a range allowed it. Nobody reviewed it, because nobody chose it.

An SBOM per release is a record of what each build contained. Comparing two of them is far faster than reading lockfile diffs by eye, and it covers OS packages in images too.

Steps

  1. Pick the boundaries. The last known good release and the first known bad one.
  2. Retrieve both SBOMs. If you keep only the latest, you cannot do this. See keeping SBOM history.
  3. Diff them. List components added, removed, and changed in version. Our guide to diffing two SBOMs covers what to compare.
  4. Rank suspects. Start with components that touch the failing behaviour: serialisation, HTTP clients, date and time, database drivers.
  5. Bisect. Revert half of the changed versions in a test branch, build, and run the failing case. Narrow down until one change reproduces it.
  6. Confirm and pin. Pin the good version, or fix forward. Add a test that would have caught it.

An example log

StepComponents revertedResult
1Half of the changed listStill fails
2Other halfPasses
3Half of that halfPasses
4One componentFails, culprit found

With ten changed components you need roughly four builds, which beats trying all ten.

Pitfalls

  • Different build environments. If the base image changed, the diff includes OS packages. That is useful, but it widens the suspect list.
  • Unstable SBOM output. If the same source gives different SBOMs, the diff is noisy. Check that generation is repeatable.
  • Interaction effects. Two changes may fail only together. If bisecting contradicts itself, test pairs.
  • No SBOM for the bad build. Rebuild from the commit with the same settings, then generate one.

What to keep afterwards

Write the finding into the release notes or incident record: the component, the version change, and why it broke. That turns a one off scramble into guidance. For example, you might decide to pin a library that has a history of behaviour changes in minor releases. Read write release notes from an SBOM diff for a way to publish the changes.

Try it yourself

Click through it at your own pace, or open it full screen. Look at how a change to dependencies is surfaced during review, before it ships.

Safeguard's SBOM and dependency scanning, plus pull request gates, help surface dependency changes at review time. You can try the free scan.

Quick check

What if I only kept the latest SBOM?

Rebuild the older commit with the same settings and generate a fresh one, then keep one per release from now on.

Does this replace normal debugging?

No. It narrows the suspects when the code diff does not explain the change.

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.