The Pre-Audit Readiness Checklist
What to fix before you pay for an audit
By the Verified by Humans team
Most of the money teams waste on audits is spent before the audit starts.
We read every line of the code we are given. So when a codebase arrives with a moving scope, no tests, and no written assumptions, a meaningful part of the engagement goes into reconstructing what the system is supposed to do — work you are paying senior auditors to do, and work you could have done yourself for free.
This is the list we walk through before quoting. Teams that clear it get tighter quotes, shorter engagements, and a report where the findings are about their protocol instead of their process.
What this covers
- 24 checks across 6 areas — scope, build, tests, docs, deployment, and the operational assumptions auditors cannot infer from code
- The freeze rule and why a scope that moves mid-audit costs more than it looks
- What to write down before day one — the short document that removes the most expensive category of back-and-forth
- The three findings we report on almost every unprepared codebase
How to use this
Work top to bottom. Anything you cannot tick is either something to fix before the audit, or something to tell your auditors explicitly. Both outcomes are fine. Silence is the expensive one.
1. Scope
The freeze rule. Every commit that lands mid-audit invalidates review already done. Auditors either re-read the changed paths or note that their review no longer covers them — the first costs you days, the second costs you coverage. Branch your fixes and merge after the report.
2. Build and reproducibility
If your auditors cannot build it on day one, you have paid for a day.
3. Tests
Coverage is not a security metric. It is a comprehension metric: it tells your auditors which paths you have reasoned about, and where to look harder.
4. Documentation
You do not need polished docs. You need the things that are not in the code:
Invariants are the highest-leverage thing on this list. “Total shares never exceed total deposits” is checkable. “The vault is safe” is not. Write five invariants and you have given your auditors the shape of every bug that matters.
5. Deployment and operations
Auditors read code, but the majority of real losses involve keys, upgrades, and operations. If the only place your deployment process exists is one engineer’s memory, that is a finding.
6. Assumptions auditors cannot infer
The three findings we report on almost every unprepared codebase
- Undocumented privileged capability. A role can do something the team did not realize it could — usually via an upgrade path or an unbounded setter.
- Unstated integration assumption. The code assumes an external contract behaves a certain way, and nothing enforces or checks it.
- Initialization gap. The deployed state depends on a sequence that is not enforced on-chain and not written down.
All three are cheap to find and cheap to fix — before an audit. During one, they consume review time that could have gone to your actual protocol logic.
Before you send the repo
A short readiness note beats a polished wiki. Send your auditors:
- the commit hash and file scope
- build and test commands
- five invariants
- the roles table
- your known-issues list
That is usually one page. It is the highest-return page you will write all quarter.