Every assistant-written change runs the same stages in the same order. A fixed order keeps cheap checks first and stops weak changes early.
Compilation rejects syntax and type mistakes. Lint rejects suspicious but legal code, simulation and assertions check behavior, and comparison against a reference checks intent.
Stage | What it rejects | Example |
|---|---|---|
Compile | Syntax and type mistakes | Undeclared signal, width mismatch, missing semicolon. |
Lint | Suspicious but legal code | Inferred latch, unintentional truncation, unread reset. |
Simulate | Wrong behavior on driven inputs | State machine skips a state under reset release. |
Assert | Broken invariants during the run | One-hot enable with two bits set. |
Test | Failures in the existing suite | A regression in an untouched block. |
Compare | Disagreement with a reference | Generated RTL differs from a trusted model. |
Assume 100 defects reach an assistant-written change. The calc block below is a stated example parameter, not a measured rate.
assume 100 defects in one assistant-written change (stated example parameter)
compile rejects 40, leaving 100 - 40 = 60
lint rejects one half of the remainder: 60 / 2 = 30, leaving 60 - 30 = 30
simulation rejects nine tenths of the remainder: 30 x 9 / 10 = 27, leaving 30 - 27 = 3
caught 40 + 30 + 27 = 97, escaped 3
shares: 40% + 30% + 27% + 3% = 100%A checklist that depends on memory is skipped under pressure. Encode the order in one script or command so every change runs every stage.
Record which stages passed with each change. A change that skipped simulation is still unreviewed, whatever the reason.
Behavior, invariants, regressions, and intent. Simulation, assertions, tests, and comparison against a reference are still owed.
30 instead of 3. Lint leaves 30, and all 30 reach the design untested.