rbl: apply flat 10% penalty for informational list hits
Some checks are pending
continuous-integration/drone/push Build is running

Informational lists previously didn't count toward the score at all.
Now any informational listing applies a flat 10% penalty regardless of
how many of them fire, with the final score clamped at 0.
This commit is contained in:
nemunaire 2026-06-13 17:54:37 +09:00
commit 9c3109c087

View file

@ -302,7 +302,9 @@ func (r *DNSListChecker) reverseIP(ipStr string) string {
}
// CalculateScore calculates the list contribution to deliverability.
// Informational lists are not counted in the score.
// Informational lists don't count proportionally; instead, if any
// informational list triggers, a flat 10% penalty is applied regardless
// of how many of them fire.
func (r *DNSListChecker) CalculateScore(results *DNSListResults, forWhitelist bool) (int, string) {
scoringListCount := len(r.Lists) - len(r.informationalSet)
@ -324,7 +326,13 @@ func (r *DNSListChecker) CalculateScore(results *DNSListResults, forWhitelist bo
return 100, "A+"
}
percentage := 100 - results.RelevantListedCount*100/scoringListCount
// A listing on any informational list applies a flat 10% penalty.
informationalPenalty := 0
if results.ListedCount > results.RelevantListedCount {
informationalPenalty = 10
}
percentage := max(0, 100-results.RelevantListedCount*100/scoringListCount-informationalPenalty)
return percentage, ScoreToGrade(percentage)
}