Safeguard
Supply Chain•

What does resolvedDependencies in provenance tell you, and what not?

resolvedDependencies lists what a build fetched, but SLSA treats its completeness as best effort. Learn how to use it next to an SBOM and dependency scan.

Safeguard Security Team
3 min read

resolvedDependencies is the field in SLSA provenance that lists artifacts fetched during a build. The spec says completeness is best effort, especially at Build L3. Use it as a useful lead, not as a full inventory, and cross check it with an SBOM and a dependency scan.

Readers sometimes treat provenance as a complete parts list. The specification does not make that promise.

What the field is

In the v1.1 provenance format, buildDefinition has a resolvedDependencies entry for artifacts the build fetched. Each item can carry a URI and a digest. The format records what the platform observed and could describe.

The same page says that completeness is best effort. That is deliberate. A build can fetch from places the platform cannot fully see, such as a script that downloads a tool at run time.

What you can reasonably use it for

  • A quick check that expected inputs, such as a base image, appear with the digest you pinned.
  • A lead when investigating a bad component: did this build touch it?
  • Input to deeper verification. The verification page says you may check resolvedDependencies as available and as far as you want, and that SLSA v1.0 does not require them to be complete.

What it cannot promise

ExpectationReality from the spec
Lists every file the build touchedCompleteness is best effort
Lets you verify every transitive dependencyRecursive checks need a trimming heuristic, because some are L0
Replaces an SBOMNo, it describes build inputs, not shipped components

Notice the last row. An SBOM answers "what is in this software." Provenance answers "how was it made." Dependencies fetched during a build and components shipped inside the artifact overlap but are not the same set. Build tools, for instance, are fetched but never ship.

A working method

  1. Read resolvedDependencies for the items that matter most, such as base images and the toolchain.
  2. Confirm each has a digest, and compare with your pinned values.
  3. Generate an SBOM for the shipped artifact separately.
  4. Compare the two lists and look at differences. A component in the SBOM but absent from provenance means the provenance is incomplete, which is allowed, but you should know.
  5. Scan the SBOM for known vulnerabilities and license problems.

When you find a gap, decide whether to close it by pinning that input or accept it with a note.

Recursive verification

The verification page describes an optional step: check dependencies recursively. It warns that some transitive dependencies are at L0, so you need an exception mechanism. It also mentions that a verification summary attestation can record the results of prior verifications, which makes repeat checks cheaper. Start small. Verify direct inputs you control, then widen.

Try it yourself

Click through it at your own pace, or open it full screen. Look at how direct and transitive components appear in one inventory, then imagine comparing that list with a provenance record.

Safeguard generates SBOMs and scans dependencies, and the free scan at https://gold.safeguard.sh/scan gives you a first inventory.

Quick check

Is resolvedDependencies required to be complete?

No. SLSA says completeness is best effort.

Can provenance replace my SBOM?

No. Provenance records how the build ran. An SBOM lists what the artifact contains.

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.