A model can clear a finding without fixing its cause. The lint hit goes away and the defect stays.
Finding | Symptom fix | Cause fix |
|---|---|---|
Unused signal | Delete the signal | Wire it to the logic that needs it, or remove the dead logic. |
Width mismatch | Slice silently to fit | Check which width the protocol requires, then resize at the source. |
Unreachable branch | Remove the branch | Check the condition upstream; the branch may guard a real case. |
The suite sometimes catches symptom fixes, and sometimes it does not. A passing suite after a symptom fix is luck, not proof.
The cheapest way to clear a finding is to disable the check. Waivers and inline disables are sometimes correct and often abused.
Silencer | Legitimate use | Abuse signal |
|---|---|---|
Waiver file entry | A reviewed exception with reason and expiry. | A blanket waiver with no reason attached. |
Inline disable comment | A narrow, documented suppression on one line. | Disables copied across files to make the count drop. |
Rule downgrade | Retuning a noisy rule with team agreement. | Downgrading a rule mid-loop to manufacture progress. |
Treat every new suppression as a patch: it needs the same acceptance rule and human review. A loop allowed to add suppressions can end up using them to manufacture progress.
Some patches undo each other across rounds. The hit count bounces without converging, and each round still costs budget.
The stall limit exists for this case. Consecutive rounds with no kept patch stop the loop and hand the leftovers to a human.
stated example parameters: each flagged issue is fixed independently with probability 0.7 per pass
three independent issues, one pass each
P(all three fixed) = 0.7 x 0.7 x 0.7 = 0.343
P(at least one survives) = 1 - 0.343 = 0.657
check: 0.343 + 0.657 = 1.0000.343. It is 0.7 x 0.7 x 0.7, so about one run in three clears everything in one pass each.
Stop on stall and report. The count oscillates instead of converging, so further rounds spend budget without gain.