Skip to content

Dependency Updates

Dependency changes alter compiled behavior, licenses, reproducibility, and the release supply chain. Atlas therefore separates graph review from lockfile generation and requires the resulting pull request to carry ordinary product evidence.

flowchart LR
    Trigger[Manifest change or scheduled refresh] --> Resolve[Resolve dependency graph]
    Resolve --> Review[Dependency and license policy]
    Resolve --> Lock[Cargo.lock delta]
    Review --> Product[Owning product validation]
    Lock --> Product
    Product --> PR[Reviewable pull request]

Checked-In Authorities

Authority Responsibility Important limit
.github/workflows/dependency-review.yml runs GitHub dependency review on pull requests reviews the submitted graph delta; it does not generate a lockfile or run product behavior tests
.github/workflows/dependency-lock.yml scheduled or manually dispatched lockfile refresh runs cargo generate-lockfile, verifies the result, and opens a pull request on automation/dependency-lock-refresh
configs/sources/release/dependency-policy.json declares forbidden licenses, duplicate threshold, and cargo-deny policy cargo_deny.required is currently false; its presence must not be reported as a mandatory gate
Cargo.toml and Cargo.lock declare requested and resolved Rust dependencies neither file explains runtime or release impact by itself

The lock workflow is the only checked-in automated path that refreshes Cargo.lock. Its pull request is still a proposal: automation does not waive review, compatibility analysis, or the tests appropriate to the affected crate.

Evidence by Change Type

  • A development-only dependency needs graph review and the maintainer checks that exercise its command or generator.
  • A runtime dependency needs graph review plus focused behavior and compatibility evidence from its owning crate.
  • A security-sensitive change needs the relevant advisory or policy result and proof that the patched path was exercised.
  • A release, packaging, or toolchain dependency needs reproducibility and publication-path evidence in addition to compilation.

Review the manifest and lockfile together. Unexpected package additions, feature activation, duplicate versions, or source changes are part of the change even when the direct dependency line looks small. Record what was run and distinguish checks executed on the pull request from policies that are merely declared in configuration.

Resolve the Complete Change

A direct version edit can alter more than one package. Review the resolved graph by ownership and effect:

Graph change Risk to investigate Focused evidence
new package source, license, maintainer, feature, build script, and transitive graph dependency review plus owning crate behavior
source change registry, Git revision, checksum, or local path trust boundary exact source identity and reproducible resolution
feature change newly compiled code, native dependency, platform behavior, or default policy feature graph and affected target tests
duplicate version larger attack and maintenance surface or incompatible types justification, convergence plan, and binary impact
build dependency code execution during compilation builder isolation, toolchain, and generated-output review
native or system dependency ABI, architecture, packaging, and runtime availability supported-target build and deployment evidence

Do not evaluate only the package named in the manifest diff. The lockfile is the resolved build input, and activated features determine which parts of that graph can affect produced bytes.

Dependency Trust Receipt

flowchart LR
    Intent[Requested dependency change] --> Resolve[Resolved lock graph]
    Resolve --> Policy[Source, license, advisory, and feature policy]
    Policy --> Build[Affected target build]
    Build --> Behavior[Owner-focused behavior evidence]
    Behavior --> Artifact[SBOM and release identity]

Retain the manifest and lockfile hashes, resolver and Rust toolchain versions, changed source and checksum identities, activated features, advisory database identity, policy revision, affected package set, focused test results, and resulting SBOM identity. An advisory scan without its database timestamp and policy cannot be reproduced later.

Update Decision

Accept an update only when:

  • the resolved change matches the requested scope;
  • source and checksum changes are understood;
  • license, advisory, and exception decisions are attributable;
  • changed features and target support are exercised;
  • public API, serialization, output, and operational behavior remain inside their compatibility contracts; and
  • release evidence can bind the new graph to produced artifacts.

Hold the update when a required scanner is unavailable, the graph contains an unreviewed source, native target evidence is missing, or the lockfile includes unexplained movement. A successful lockfile generation proves resolution, not acceptance.

Use Compatibility Matrix when the dependency changes an observed surface and the operations Supply Chain and Artifact Trust guide for consumer verification.