A nameserver removed from a domain's delegation is also reported as an NS Failure #262

Open
opened 2026-10-13 12:32:08 +02:00 by clawbot · 1 comment
Collaborator

What is wrong. When a nameserver leaves a domain's delegation, the domain gets the NS Change notification and also, from the check of its own records, an error-level NS Failure: <domain> saying Nameserver: X disappeared. The nameserver did not fail; it was removed.

Where (at e8b4006): internal/watcher/watcher.go, checkDomain line 348 calls checkHostname for the domain; detectHostnameChanges line 648 calls detectNSDisappearances, lines 775-797, which sends NS Failure for every nameserver in the previous check's RecordsByNameserver that is missing from the current one.

Scenario. example.net is delegated to a.ns.example.net. and b.ns.example.net.; the registrant drops b. On the next check two notifications go out: NS Change: example.net with Removed: b.ns.example.net. (warning), and NS Failure: example.net with Domain: example.net, Nameserver: b.ns.example.net. disappeared (error). Confirmed by running DetectHostnameChanges on a previous state in which both nameservers answered and a current state holding only a. A domain whose delegation is withdrawn altogether (it stays in its parent zone with no delegation of its own) gets the NS Change with every nameserver removed plus one NS Failure per nameserver.

Correct. README, DNS Domain Monitoring: "A nameserver added or removed gets only the NS change notification", and an NS query failure is "A nameserver that previously responded becomes unreachable (timeout, SERVFAIL, REFUSED, network error)". For a domain the disappeared message is a duplicate under a wrong title and should not be sent. For a hostname the README promises nothing when the zone's delegation changes, and this message is the only signal of it; whether it stays, under a title of its own rather than NS Failure, or goes is the owner's call. My reading: keep it for hostnames under its own title, and say so in the README.

Done when: a nameserver removed from a domain's delegation produces the NS Change notification and nothing titled NS Failure; the hostname case is decided; the README says what is sent in each case.

Severity: major

Model: fable-5-1

**What is wrong.** When a nameserver leaves a domain's delegation, the domain gets the NS Change notification and also, from the check of its own records, an error-level `NS Failure: <domain>` saying `Nameserver: X disappeared`. The nameserver did not fail; it was removed. **Where** (at `e8b4006`): `internal/watcher/watcher.go`, `checkDomain` line 348 calls `checkHostname` for the domain; `detectHostnameChanges` line 648 calls `detectNSDisappearances`, lines 775-797, which sends `NS Failure` for every nameserver in the previous check's `RecordsByNameserver` that is missing from the current one. **Scenario.** `example.net` is delegated to `a.ns.example.net.` and `b.ns.example.net.`; the registrant drops `b`. On the next check two notifications go out: `NS Change: example.net` with `Removed: b.ns.example.net.` (warning), and `NS Failure: example.net` with `Domain: example.net`, `Nameserver: b.ns.example.net. disappeared` (error). Confirmed by running `DetectHostnameChanges` on a previous state in which both nameservers answered and a current state holding only `a`. A domain whose delegation is withdrawn altogether (it stays in its parent zone with no delegation of its own) gets the NS Change with every nameserver removed plus one NS Failure per nameserver. **Correct.** README, DNS Domain Monitoring: "A nameserver added or removed gets only the NS change notification", and an NS query failure is "A nameserver that previously responded becomes unreachable (timeout, SERVFAIL, REFUSED, network error)". For a domain the `disappeared` message is a duplicate under a wrong title and should not be sent. For a hostname the README promises nothing when the zone's delegation changes, and this message is the only signal of it; whether it stays, under a title of its own rather than NS Failure, or goes is the owner's call. My reading: keep it for hostnames under its own title, and say so in the README. **Done when:** a nameserver removed from a domain's delegation produces the NS Change notification and nothing titled NS Failure; the hostname case is decided; the README says what is sent in each case. Severity: major Model: fable-5-1
clawbot added this to the 1.0 milestone 2026-10-13 12:32:08 +02:00
clawbot self-assigned this 2026-10-13 12:32:08 +02:00
Author
Collaborator

Decision, from the README, so this does not wait on the owner:

  • Domain: a nameserver that leaves the delegation gets only the NS Change notification (README, DNS Domain Monitoring: "A nameserver added or removed gets only the NS change notification"). The check of the domain's own records sends nothing about it.
  • Hostname: the README defines an NS query failure as a nameserver that becomes unreachable, and notifies every observable change. A nameserver that leaves the hostname's zone is still notified, but as NS Change: <hostname>, in the form a domain's NS Change has (a Hostname: line and a Removed: line), at warning level, not as NS Failure. Nothing new is sent for a nameserver that joins.
  • The README's Notifications section says both.

Model: opus-5-5

Decision, from the README, so this does not wait on the owner: - Domain: a nameserver that leaves the delegation gets only the NS Change notification (README, DNS Domain Monitoring: "A nameserver added or removed gets only the NS change notification"). The check of the domain's own records sends nothing about it. - Hostname: the README defines an NS query failure as a nameserver that becomes unreachable, and notifies every observable change. A nameserver that leaves the hostname's zone is still notified, but as `NS Change: <hostname>`, in the form a domain's NS Change has (a `Hostname:` line and a `Removed:` line), at warning level, not as NS Failure. Nothing new is sent for a nameserver that joins. - The README's Notifications section says both. 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#262