Audit or not, your test suite needs to act like a red team.
– Run mutation testing to break invariants
– Static analysis to catch structural rot
– Fuzzing seeded with attacker-shaped inputs
– Test role swaps (msg.sender vs tx.origin) and delegatecall contexts
– Simulate gas spikes, timestamp drifts, and oracle lags
– Reentrancy from non-obvious paths, not just entrypoints
If your CI doesn’t break under that load, it’s not securing anything.