Safeguard
Developer Tools•

What is a good definition of done for a dependency upgrade ticket?

A done upgrade is merged, deployed, verified and recorded. Use this seven-point checklist so tickets stop closing before the work reaches production.

Safeguard Security Team
4 min read

An upgrade ticket is done when the new version is merged, deployed to production, verified there, and recorded, with the old version gone from every place it ran. Closing at "pull request merged" is the common mistake, because a merged change that never shipped fixes nothing.

Why the definition matters

Upgrade tickets are unusually easy to close early. The diff is small, the tests pass, the reviewer approves. Then the image is not rebuilt, the service is not restarted, or a second lockfile still pins the old version. Months later a scan shows the vulnerable version in production, and the ticket says Done.

A written definition of done makes the end state explicit. It also makes quarterly reporting honest.

The seven-point checklist

  1. Merged. The change is on the main branch with a reviewed pull request.
  2. Built. A new artifact or image exists that contains the new version. For container images, confirm the base image tag or digest changed.
  3. Deployed. The new build is running in production, not just staging.
  4. Verified. Someone confirmed the running version, using a version endpoint, a software inventory or a rescan, and a smoke test passed. Our guide to what counts as patched walks through this.
  5. Old version gone. No other manifest, lockfile, vendored copy, or image layer still carries the previous version.
  6. Recorded. The ticket links the pull request, the deploy and the verification. If the upgrade closes a vulnerability, the advisory record is updated.
  7. Communicated. If behaviour changed for users or other teams, there is a release note or a message in the right channel.

Adjust by type

Not every item applies to every ticket. A table keeps it practical.

Upgrade typeAdd or stress
Patch bump of a leaf libraryItems 1 to 4 are usually enough
Major framework upgradeAdd rollback plan and a staged rollout
Base image or runtimeRebuild every dependent image, verify each
Security fixItem 4 with evidence, and update exception records
Shared internal libraryTrack consumer adoption, not just the release

Put it in the ticket template

A checklist nobody sees is not a definition. Add the seven points to the issue template for upgrade tickets, with checkboxes. Reviewers can then ask which boxes are unticked, instead of debating whether the work feels finished.

Common ways tickets close too early

  • The pull request merged but the deploy waited behind a freeze.
  • Staging updated, production did not.
  • A monorepo package was bumped, but a sibling package kept its own copy of the old version.
  • The scanner still flags the package because of a cached layer. See why a scanner can flag a package you already upgraded.

What to measure

Count tickets closed per quarter, and also tickets reopened because verification failed. A rising reopen rate means the definition is not being applied. A cycle time measured to production, not to merge, tells you how long exposure really lasted.

Where Safeguard fits

Safeguard's dependency scanning can rescan after a deploy to confirm the old version is gone, and its evidence automation keeps the record for audits. A free scan is at gold.safeguard.sh/scan.

Quick check

Is a merged pull request ever enough?

Only for changes that deploy automatically and are verified by a pipeline step. Otherwise, wait for deploy and verification before closing.

Who verifies?

Preferably someone other than the author, or an automated rescan. The point is a second check on the running system.

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.