Audit Drift Checklist
A structured pass to find what changed since your last audit, score the drift, and decide whether you need to re-audit.
This checklist structures a decision. It does not make one. Every severity 2+ item requires a named human to sign off — the template will not pretend an LLM approved anything. It is a review aid, not a security certification: completing it does not mean a protocol is safe, fully audited, or free of vulnerabilities. The artifact is the product.
What this checklist does
One pass over your protocol that produces a defensible re-audit decision instead of a vibe. You diff the audited snapshot against what is running now, classify every gap, attach evidence, and let a human make the call on the record.
| Output | What it is |
|---|---|
| Audited snapshot | The exact commit and config the auditors reviewed |
| Current snapshot | What is deployed and live right now |
| Drift register | Every gap as a numbered item (AD-001 onward) |
| Severity | 0–4 per item (None through Full re-audit) |
| Evidence | Diffs, tx hashes, and config dumps backing each item |
| Human decision | A named owner's call per item, dated |
| One-page report | The signed summary you hand to leadership or auditors |
When to use it
- It has been more than 90 days since your last audit and you have not mapped the drift. (Primary trigger.)
- Before a risky upgrade, migration, or new-chain deployment.
- After a role, multisig, or oracle change.
- Before governance executes a material proposal.
- When an auditor or counterparty asks "is this the system you were audited on?" and you cannot answer in one page.
- On a recurring cadence, so the report is cheap and boring instead of expensive and urgent.
How to use it
| Step | Action | Owner |
|---|---|---|
| 1 | Pin the audited snapshot — commit, config, and the report's stated assumptions | Security reviewer |
| 2 | Capture the current snapshot — HEAD, release branch, deployed contracts, configs | Engineering lead |
| 3 | Walk the eight drift categories; log every gap as a drift item | Engineering + security |
| 4 | Score severity, attach evidence, apply the re-audit rubric | Security reviewer |
| 5 | Route every severity-2+ item to a named human; record the decision; publish the one-page report | Release owner |
Suggested cadence
| Cadence | Pass |
|---|---|
| Weekly | Diff HEAD against the audited tag; open drift items for anything touching the report |
| Monthly | Re-read the audit's assumptions; mark which still hold |
| Per PR | Flag audit relevance on security-sensitive PRs |
| Per release | Run the full checklist before any risky upgrade ships |
| Per governance | Re-check after any role, parameter, or treasury action |
Checklist template
The full blank template is in the panel — use Copy template or Download .md and drop it in your repo. One file per audited snapshot. It captures review metadata, the audited and current snapshots, a per-category drift review, the drift register, severity, an evidence log, the human decision, and the one-page report.
Drift category taxonomy
Eight places drift hides. Walk each; a "no" you cannot back with evidence is a drift item.
- Code — New contracts deployed via factories since the audit? Storage layout changed under any proxy? Compiler or optimizer settings changed? New external libraries imported?
- Config — Fee parameters, thresholds, or caps changed? Timelock delays shortened? Pause guardians reassigned?
- Roles — Multisig signers added or removed? Threshold (m-of-n) changed? Any role moved from a contract to an EOA?
- Oracle — Price feed source or heartbeat changed? Fallback oracle added? Staleness or deviation bounds altered?
- Integrations — New protocols called or integrated? An integrated dependency upgraded or migrated? New approvals granted to external contracts?
- Governance — Voting parameters changed? Emergency powers added? Treasury controls altered?
- Deployment — Deployed to a new chain? New proxy implementation pushed? New pools or markets spun up via factory?
- Assumptions — Re-read the audit's stated assumptions. Does each still hold? This is the category that gets missed, because it lives in the report, not the code.
Re-audit decision rubric
Five severities. Score the worst applicable; when unsure, round up. Severity is always labeled by name, never by color alone.
| Severity | Label | Meaning | Typical action | Example |
|---|---|---|---|---|
| 0 | None | No security-relevant drift | Document and proceed | Comment-only change in a reviewed file |
| 1 | Review needed | Minor drift touching audited scope | Internal senior dev confirms intent | Withdrawal fee 10 to 25 bps within governance bounds |
| 2 | Senior review | Security-sensitive drift | Senior / security engineer signs off before proceeding | Fallback oracle added; guardian moved to an EOA |
| 3 | Lightweight re-audit | Material change to a subset of audited behavior | Focused external review of the changed surface | New RewardsDistributor contract; new-chain deploy |
| 4 | Full re-audit | Current system is materially different from the audited one | New audit engagement before further changes ship | Core accounting or storage-layout rewrite |
Evidence required before signoff
No item closes without evidence. Evidence types: git diff or commit range, deployed-bytecode or proxy-implementation address, on-chain tx hash, config dump, and the relevant audit-report section.
| Severity | Minimum evidence |
|---|---|
| 0–1 | Diff or commit reference |
| 2 | Diff + on-chain proof (address / tx) + audit-section reference |
| 3 | The above + a scoped change-surface description for the external reviewer |
| 4 | The above + a full re-audit scope memo |
Human decision
Tooling structures the decision; a human makes it. Every severity-2+ item needs a named person — not a role — on the record.
Fields per item: owner, decision, date, rationale, linked evidence. Decision options:
- Accept — within audited intent.
- Block — do not proceed until resolved.
- Escalate — route to external review.
- Defer — explicit deadline and owner required. No Accept is permitted on severity 4.
One-page drift report
The artifact you hand up: audited snapshot, current snapshot, item counts by severity, highest severity, blocking items, the overall re-audit decision, owner, and date. Fill in one summary sentence:
As of
[date],[protocol]has drifted from its[firm] / [date]audit (commit[audited]) by[N]tracked items ([n]at severity 2 or higher). The current system at commit[current]is [not cleared / cleared / cleared with conditions] for continued operation; required action: [full re-audit / lightweight re-audit of a named surface / senior review / none].
Filled example
A worked example on a fictional protocol — DroidVault, an ERC-4626 yield vault with upgradeable contracts, oracle-based pricing, a multisig admin, and a timelocked governance path. The audit covered commit abc1234 (Example Security Labs, 2026-03-15) on Ethereum. The current system is commit def5678 (v1.2.0) on Ethereum and Base. Six drift items came out of the pass:
| ID | Category | Drift | Severity | Recommended action |
|---|---|---|---|---|
| AD-001 | Code | RewardsDistributor added | 3 — Lightweight re-audit | Focused external review |
| AD-002 | Oracle | Fallback oracle added | 2 — Senior review | Review oracle failure modes |
| AD-003 | Roles | Guardian moved to an EOA | 2 — Senior review | Restore multisig or document the temporary risk |
| AD-004 | Config | Withdrawal fee 10 to 25 bps | 1 — Review needed | Confirm it is within audited bounds |
| AD-005 | Deployment | Base deployment added | 3 — Lightweight re-audit | Review chain-specific assumptions |
| AD-006 | Assumptions | System is now cross-chain | 3 — Lightweight re-audit | Update the threat model |
Decision: Release is blocked until AD-002 and AD-003 receive senior review. AD-001, AD-005, and AD-006 require a focused external (lightweight) re-audit before production. AD-004 may proceed after internal confirmation that the fee remains within previously reviewed bounds.
Download the full worked example from the panel (Filled DroidVault example) to see the evidence log, per-item human decisions, and the one-page report filled in end to end.
GitHub-ready usage
Download the blank checklist and drop it in your repo at /security/audit-drift/ as one file per audited snapshot, or grab the shorter GitHub issue template from the panel and add it to .github/ISSUE_TEMPLATE/ so anyone can open a drift-review issue before risky releases, governance proposals, or deployment changes. Reference drift items from security-sensitive PRs. Everything is diffable and renders in any Markdown viewer.
For teams with frequent post-audit changes, wire the same structure into PR review and release checklists.
Related resources
- Security-Sensitive PR Review Card — the per-PR companion to this checklist.
- AI Agent Permission Boundary Checklist — scope what coding and ops agents may touch in the same repo.
- Drift Was Audited. That Was Never the Point. — the why behind this checklist.
- The Release Review — senior review of the changes this checklist flags, against your audited baseline.
Version history
| Version | Date | Changes |
|---|---|---|
| v1.0 | June 4, 2026 | Initial public checklist: eight-category taxonomy, five-level re-audit rubric, evidence and human-decision sections, one-page report, and a worked DroidVault example. |