Safeguard
Security Guides•

What should an agency check in dependencies before delivering to a client?

A pre-delivery dependency audit for agencies: lockfile, known advisories, abandoned packages, licenses, and an evidence file the client can keep.

Safeguard Security Team
4 min read

Before delivery, audit the dependency tree for known vulnerabilities, abandoned or unexpected packages, license problems and unpinned installs, then save the results as dated evidence for the client. Fix what you can, document what you accept, and make sure the numbers in your report match the build you ship.

Why do it at the end, not only during the project

Dependencies drift during a project. A package added in week two for a prototype may still be there at launch. Advisories published after you installed it will not show up unless you check again. A final audit is the last point where the agency can fix things for free in the client's eyes.

The checklist

  1. Freeze the build. Confirm lockfiles are committed and that CI installs from them, as described in our post on why agencies should commit lockfiles.
  2. Run an advisory check on the locked versions. For npm, the audit command sends a description of your dependencies to the registry and reports known vulnerabilities with impact and remediation.
  3. Separate production from development. A flaw in a test-only tool is not the same as one in code that serves customers. The npm audit command can limit fixes to production dependencies.
  4. Look for abandoned packages. Check the last release date and whether the repository is archived.
  5. Check for packages you do not recognize. Unfamiliar names in the tree are worth a look, especially direct ones.
  6. Review licenses. List them, and flag any the client's policy may not allow. This is an inventory task. Ask the client's counsel about meaning.
  7. Verify signatures where available. npm can verify registry signatures and provenance attestations for downloaded packages.
  8. Remove what you do not use. Every unused package is attack surface and maintenance.
  9. Save the evidence: date, tool, version, and result.

Triage, not panic

A raw audit report can list dozens of findings. Sort them.

FindingTypical action
Fix available, low risk of breakingUpdate and test
Fix available, major version jumpSchedule, test, explain to client
No fix, package reachable in your codeMitigate or replace
No fix, package not used in a vulnerable wayRecord the reasoning and a review date
Abandoned packagePlan a replacement

Reachability, meaning whether your code actually calls the vulnerable function, can move a finding up or down this table. Say how you decided.

What goes in the report

Keep it to a page: scope, date, tools, counts by severity, what was fixed, what remains and why, and who owns the remainder. Attach the raw output. A client who reads an honest list of open items trusts the rest of the delivery more than one who is told everything is clean.

Try it yourself

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

Open a finding and look at how severity, fix availability and status are tracked together. That is the shape your delivery report should have.

Quick check

Do I have to fix every finding before delivery?

No. You need a decision on each one, written down, with an owner. Some will be accepted with a review date.

Is a clean audit proof the code is secure?

No. It shows no known advisories at that moment for the packages the tool recognized. It does not cover your own code or later disclosures.

Safeguard

Safeguard's dependency scanning with reachability analysis can help sort findings by whether the vulnerable code is used. A free scan is at gold.safeguard.sh/scan.

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.