Safeguard
Compliance•

How do you dry run dependency controls before your SOC 2 audit?

A 45 minute self-test: pick five samples, trace each control end to end, and fix the weakest link before an auditor asks. Includes a scoring table.

Safeguard Security Team
4 min read

Pick five samples from your own records, trace each through detection, decision, change and verification, and score what is missing. In about 45 minutes you will find the weak link in your dependency controls. Fix that before the auditor samples it, and repeat monthly.

Why a mini dry run

Full mock audits take days. A narrow rehearsal on one control family is cheap and catches the common failure: the process exists, but the records do not connect. You do it as an internal check, so go in expecting to find gaps.

Before you start

Gather access to your scanner or alert list, your ticket tracker, the repository settings and the policy. Put someone in the room who did not run the process, to play skeptic.

The 45 minutes

Minutes 0 to 10: population. Export all dependency findings for the last 90 days. Count them. Confirm the export includes closed items. If you cannot produce a complete list in ten minutes, that is finding one.

Minutes 10 to 20: sample and trace. Pick five items at random, mixing severities. For each, find the alert, the ticket, the pull request, the deploy and the rescan. Time yourself. Anything over five minutes per item signals weak linking.

Minutes 20 to 30: policy check. For each sample, compare the dates with your policy timeline. Mark met or missed. For misses, look for an exception record made at the time.

Minutes 30 to 40: configuration. Open repository settings. Confirm the default branch requires review and status checks, which GitHub documents as available protected branch settings. Confirm alerts are on for every in-scope repository, and check that the coverage list matches.

Minutes 40 to 45: score and assign. Fill the table.

CheckPassPartialFail
Complete population export
Alert to ticket link
Ticket to PR link
Fix within policy or excepted
Rescan or closure evidence
Branch protection as written
Coverage matches repo list

Common results

Teams usually find that closed alerts have no ticket, that pull requests do not reference tickets, and that two or three repositories were never scanned. All are cheap to fix: add a ticket field to the PR template, turn on alerts for the missed repos, and require a closing note.

What to do with the output

Write each gap as a ticket with an owner and a date. Retest the same check next month with five new samples. A trend of fewer gaps is itself evidence that you monitor your controls.

Do not game it

Choose samples randomly. If you cherry pick clean items, you learn nothing and the auditor will find the rest. Also avoid fixing a record after the fact and presenting it as original. Add a dated note instead.

Where Safeguard fits

Safeguard's dependency scanning and compliance and evidence automation keep alerts, decisions and closures linked, which shortens the trace step. Free scan: https://gold.safeguard.sh/scan.

Quick check

Should I tell my auditor about gaps I found?

You do not need to report every internal finding, but never hide or backdate records. Fix the process and keep dated notes of what changed.

How many samples is enough for a dry run?

Five is enough to find process gaps. The auditor's sample size is theirs to decide.

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.