The same finding, twice.
Then never again.
Every finding hashes to a stable fingerprint. Every dismissal writes to a row scoped to your repo, with the reason attached. The confidence on that pattern trends down — not by a global model retrain, but by a per-repo calibration that runs on every future review.
One pattern, six PRs, watch it quiet down.
A real-shape example: the security pass flags "loop inside a transaction" on PR #412. Three reviewers, three different PRs, each dismiss with a reason. By PR #463 the finding stays under the 0.6 confidence floor and never reaches the comments.
- #412firedFirst flag — possible loop-inside-transaction.0.84
- #418dismissedwrapper function, not a real loop0.72
- #431dismissedintentional — see #REV-2040.61
- #449dismissedtransaction wraps the whole call0.48
- #463suppressedbelow 0.6 floor — never posted0.48
- #478suppressedstill below floor — silent0.48
One team's convention isn't another team's convention.
Dismissals belong to the repo, not the org. The same fingerprint suppressed in revund/core stays flagged in revund/site until you dismiss it there too. Two independent calibrations, same engine.
Same fingerprint. Different repos. Different confidence. Different outcome on every PR.
Fingerprint, store, recalibrate.
Fingerprint
xxhash of (pass + file + body). Stable across runs. Same finding on a re-review collides with the same row.
Dismiss
Developer dismisses with a reason. Row written against (repo_id, fingerprint). Reason joins the audit log; revisitable via revund feedback list.
Recalibrate
On every future review for that repo, findings with that fingerprint are suppressed; structurally-similar findings get a confidence nudge. The 0.6 floor catches the rest.