Treat unreachable resolvers as unknown, not warnings

An unreachable resolver tells us nothing about propagation: it's neither
a disagreement nor an error in the zone. Surface it as a distinct
Unreachable state so it stops polluting warning counts and the
Disagreeing/Errored buckets.
This commit is contained in:
nemunaire 2026-05-25 16:21:41 +08:00
commit d4c44e879b
5 changed files with 28 additions and 17 deletions

View file

@ -91,8 +91,8 @@ func (r *authoritativeMatchRule) Evaluate(ctx context.Context, obs sdk.Observati
anyExpected = true
switch {
case v.ConsensusSig == "":
states = append(states, critState("resolver_propagation.matches_authoritative.no_consensus", key,
fmt.Sprintf("no public resolver returned a usable answer for %s (authoritative answer is known)", key)))
states = append(states, unknownState("resolver_propagation.matches_authoritative.no_consensus", key,
fmt.Sprintf("no public resolver returned a usable answer for %s (authoritative answer is known); resolvers unreachable from the checker", key)))
case !v.MatchesExpected:
states = append(states, critState(CodeAnswerDrift, key,
fmt.Sprintf("consensus of public resolvers for %s differs from the authoritative answer, wait for TTL expiry or force a flush", key)))