Skip to content

Commit bdd66cf

Browse files
committed
remove 0-hit rules
1 parent a026acb commit bdd66cf

2 files changed

Lines changed: 8 additions & 11 deletions

File tree

src/mail_sovereignty/classifier.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ class _Rule(NamedTuple):
7474
_Rule("ad_spf_tenant", frozenset({_S.AUTODISCOVER, _S.SPF, _S.TENANT}), False, 0.95),
7575
_Rule("mx_spf", frozenset({_S.MX, _S.SPF}), False, 0.90),
7676
_Rule("spf_tenant_gw", frozenset({_S.SPF, _S.TENANT}), True, 0.90),
77-
_Rule("ad_spf", frozenset({_S.AUTODISCOVER, _S.SPF}), False, 0.90),
7877
_Rule("mx_tenant", frozenset({_S.MX, _S.TENANT}), False, 0.85),
79-
_Rule("mx_ad", frozenset({_S.MX, _S.AUTODISCOVER}), False, 0.85),
8078
_Rule("spf_tenant", frozenset({_S.SPF, _S.TENANT}), False, 0.80),
8179
_Rule("spf_gw", frozenset({_S.SPF}), True, 0.70),
8280
_Rule("mx_only", frozenset({_S.MX}), False, 0.80),
@@ -96,9 +94,8 @@ class _Rule(NamedTuple):
9694
)
9795
# fmt: on
9896

99-
_ALL_RULE_NAMES: tuple[str, ...] = (
100-
tuple(r.name for r in _PROVIDER_RULES)
101-
+ tuple(name for name, _ in _INDEPENDENT_RULES)
97+
_ALL_RULE_NAMES: tuple[str, ...] = tuple(r.name for r in _PROVIDER_RULES) + tuple(
98+
name for name, _ in _INDEPENDENT_RULES
10299
)
103100

104101

tests/test_classifier.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -414,34 +414,34 @@ def test_autodiscover_spf_tenant(self):
414414
assert result.confidence == pytest.approx(0.95)
415415

416416
def test_autodiscover_spf(self):
417-
"""R6: AD + SPF → 0.90 (gateway hides MX but SPF+AD confirm)."""
417+
"""AD + SPF → falls to spf_only (0.50) + AD boost."""
418418
evidence = [
419419
_ev(SignalKind.AUTODISCOVER, Provider.MS365),
420420
_ev(SignalKind.SPF, Provider.MS365),
421421
]
422422
result, _ = _aggregate(evidence)
423423
assert result.provider == Provider.MS365
424-
assert result.confidence == pytest.approx(0.90)
424+
assert result.confidence == pytest.approx(0.52)
425425

426426
def test_mx_autodiscover(self):
427-
"""R8: MX + AD → 0.85."""
427+
"""MX + AD → falls to mx_only (0.80) + AD boost."""
428428
evidence = [
429429
_ev(SignalKind.MX, Provider.MS365),
430430
_ev(SignalKind.AUTODISCOVER, Provider.MS365),
431431
]
432432
result, _ = _aggregate(evidence)
433433
assert result.provider == Provider.MS365
434-
assert result.confidence == pytest.approx(0.85)
434+
assert result.confidence == pytest.approx(0.82)
435435

436436
def test_autodiscover_spf_gateway(self):
437-
"""AD + SPF + GW → 0.90 (matches R6, gateway doesn't boost)."""
437+
"""AD + SPF + GW → falls to spf_gw (0.70) + AD boost."""
438438
evidence = [
439439
_ev(SignalKind.AUTODISCOVER, Provider.MS365),
440440
_ev(SignalKind.SPF, Provider.MS365),
441441
]
442442
result, _ = _aggregate(evidence, gateway="barracuda")
443443
assert result.provider == Provider.MS365
444-
assert result.confidence == pytest.approx(0.90)
444+
assert result.confidence == pytest.approx(0.72)
445445

446446
def test_independent_with_mx_and_spf_full_confidence(self):
447447
"""Independent domain with MX + SPF → 90% base confidence."""

0 commit comments

Comments
 (0)