Inconsistency alert repeats on every DNS cycle while nameservers disagree #158

Open
opened 2026-09-28 19:18:07 +02:00 by clawbot · 1 comment
Collaborator

The README (DNS Hostname Monitoring) says an inconsistency alert fires when two nameservers that previously agreed now return different record sets. detectInconsistencies in internal/watcher/watcher.go instead sends one alert per disagreeing nameserver pair on every DNS cycle, for as long as the disagreement lasts. A trial run of the image against live DNS showed eeqj.de producing two alerts every cycle, to every configured endpoint.

Definition of done

  • An inconsistency alert is sent once, on the check where a pair of nameservers that agreed on the previous check starts to disagree, and not again while the disagreement persists.
  • A disagreement already present in the state loaded at startup does not alert again after a restart.
  • Tests cover a disagreement that persists across checks and one that starts on a later check.
  • The README describes the behavior.
  • No DNS mocking. make check green.

Model: opus-5-5

The README (DNS Hostname Monitoring) says an inconsistency alert fires when two nameservers that previously agreed now return different record sets. `detectInconsistencies` in `internal/watcher/watcher.go` instead sends one alert per disagreeing nameserver pair on every DNS cycle, for as long as the disagreement lasts. A trial run of the image against live DNS showed `eeqj.de` producing two alerts every cycle, to every configured endpoint. ## Definition of done - An inconsistency alert is sent once, on the check where a pair of nameservers that agreed on the previous check starts to disagree, and not again while the disagreement persists. - A disagreement already present in the state loaded at startup does not alert again after a restart. - Tests cover a disagreement that persists across checks and one that starts on a later check. - The README describes the behavior. - No DNS mocking. `make check` green. Model: opus-5-5
Author
Collaborator

Plan. detectInconsistencies in internal/watcher/watcher.go compares only the current records. Give it the previous hostname state as well (detectHostnameChanges already has it), and alert for a pair of nameservers only when both were present in the previous state with equal records and now disagree. State loaded at startup is the previous state for the first check, so a disagreement saved before a restart does not alert again.

Test the decision on record data: put the choice of which pairs to alert for in a small function of the previous state and the current records, and test that with data built in the test (a disagreement that persists across two checks alerts once, one that starts on a later check alerts on that check, one already present in the loaded state does not alert). Do not add to or use mockResolver in internal/watcher/watcher_test.go: it stubs DNS and is being removed under #159.

README: the DNS Hostname Monitoring section says the alert fires once, when nameservers that agreed start to disagree.

Model: opus-5-5

Plan. `detectInconsistencies` in `internal/watcher/watcher.go` compares only the current records. Give it the previous hostname state as well (`detectHostnameChanges` already has it), and alert for a pair of nameservers only when both were present in the previous state with equal records and now disagree. State loaded at startup is the previous state for the first check, so a disagreement saved before a restart does not alert again. Test the decision on record data: put the choice of which pairs to alert for in a small function of the previous state and the current records, and test that with data built in the test (a disagreement that persists across two checks alerts once, one that starts on a later check alerts on that check, one already present in the loaded state does not alert). Do not add to or use `mockResolver` in `internal/watcher/watcher_test.go`: it stubs DNS and is being removed under https://git.eeqj.de/sneak/dnswatcher/issues/159. README: the DNS Hostname Monitoring section says the alert fires once, when nameservers that agreed start to disagree. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/dnswatcher#158