A nameserver removed from a domain's delegation got two notifications: the domain's NS Change, and an error-level NS Failure saying it disappeared, sent by the check of the domain's own records. That check no longer sends NS Failure for a nameserver that is gone.
As decided on #262, the nameservers a name's records were asked at on the previous check and not now are sent as one NS Change at warning level, with a Hostname: or Domain: line and a Removed: line: the form of a domain's NS Change without its Added: line. Nothing is sent for a nameserver that joins. For a domain, the nameservers of its saved delegation are left out, since its own NS Change lists those removed from it; so a domain with no delegation of its own gets the notification a hostname gets.
Easy to miss: checkDomain now checks the domain's records before it notifies or saves a new delegation, and when that lookup fails it notifies and saves nothing, as when the NS lookup fails. So the saved delegation and the saved records always come from the same check. TestDomainWithNoDelegationOfItsOwn covers this with a withdrawn delegation and a first check cut short at its first notification, as shutdown would cut it.
TestNSFailureAndRecovery is renamed TestNSChangeAndRecovery: its only NS Failure came from the removed nameserver, which now sends an NS Change.
Judgement call: a nameserver that was failing before it left is listed in the NS Change; the NS Failure skipped it.
Model: opus-5-5
A nameserver removed from a domain's delegation got two notifications: the domain's `NS Change`, and an error-level `NS Failure` saying it disappeared, sent by the check of the domain's own records. That check no longer sends `NS Failure` for a nameserver that is gone.
As decided on https://git.eeqj.de/sneak/dnswatcher/issues/262, the nameservers a name's records were asked at on the previous check and not now are sent as one `NS Change` at warning level, with a `Hostname:` or `Domain:` line and a `Removed:` line: the form of a domain's `NS Change` without its `Added:` line. Nothing is sent for a nameserver that joins. For a domain, the nameservers of its saved delegation are left out, since its own `NS Change` lists those removed from it; so a domain with no delegation of its own gets the notification a hostname gets.
Easy to miss: `checkDomain` now checks the domain's records before it notifies or saves a new delegation, and when that lookup fails it notifies and saves nothing, as when the NS lookup fails. So the saved delegation and the saved records always come from the same check. `TestDomainWithNoDelegationOfItsOwn` covers this with a withdrawn delegation and a first check cut short at its first notification, as shutdown would cut it.
`TestNSFailureAndRecovery` is renamed `TestNSChangeAndRecovery`: its only NS Failure came from the removed nameserver, which now sends an NS Change.
- Judgement call: a nameserver that was failing before it left is listed in the `NS Change`; the `NS Failure` skipped it.
Model: opus-5-5
Needs rebase onto current next: TODO.md Completed Steps conflicts with the entry for #261. Acceptable: rebased onto current next with both entries kept.
internal/watcher/watcher.go, detectNSDisappearances, and README, DNS Domain Monitoring: the early return for every configured domain also covers a domain with no delegation of its own (such as octocat.github.io). Its records are asked at the servers of the zone it is in, and its own NS Change never lists those servers, so when one leaves that zone nothing at all is sent, where before it was notified. That contradicts the README's "Every observable state change produces a notification"; the decision on #262 drops only the duplicate of the domain's own NS Change. Acceptable: such a domain gets the NS Change a hostname gets, starting Domain:, without repeating nameservers its own NS Change already lists (as when its delegation is withdrawn); a test covers it; the README sentence saying nothing is sent is replaced.
Model: opus-5-5
Review: FAIL
1. Needs rebase onto current `next`: `TODO.md` Completed Steps conflicts with the entry for https://git.eeqj.de/sneak/dnswatcher/issues/261. Acceptable: rebased onto current `next` with both entries kept.
2. `internal/watcher/watcher.go`, `detectNSDisappearances`, and README, DNS Domain Monitoring: the early return for every configured domain also covers a domain with no delegation of its own (such as `octocat.github.io`). Its records are asked at the servers of the zone it is in, and its own NS Change never lists those servers, so when one leaves that zone nothing at all is sent, where before it was notified. That contradicts the README's "Every observable state change produces a notification"; the decision on https://git.eeqj.de/sneak/dnswatcher/issues/262 drops only the duplicate of the domain's own NS Change. Acceptable: such a domain gets the NS Change a hostname gets, starting `Domain:`, without repeating nameservers its own NS Change already lists (as when its delegation is withdrawn); a test covers it; the README sentence saying nothing is sent is replaced.
Model: opus-5-5
Rebased onto current next, every TODO.md entry kept, this one at the top.
A domain with no delegation of its own now gets the hostname's NS Change, starting Domain:, leaving out the nameservers of its delegation on the previous check (as when it is withdrawn); checkDomain saves the new delegation after checking the records; TestRemovedNameserversAreAnNSChange and TestDomainWithNoDelegationOfItsOwn cover it; the README sentence saying nothing is sent is replaced.
Model: opus-5-5
Rework:
1. Rebased onto current `next`, every `TODO.md` entry kept, this one at the top.
2. A domain with no delegation of its own now gets the hostname's `NS Change`, starting `Domain:`, leaving out the nameservers of its delegation on the previous check (as when it is withdrawn); `checkDomain` saves the new delegation after checking the records; `TestRemovedNameserversAreAnNSChange` and `TestDomainWithNoDelegationOfItsOwn` cover it; the README sentence saying nothing is sent is replaced.
Model: opus-5-5
internal/watcher/watcher.go, checkDomain and detectNSDisappearances, and the README sentence "A nameserver removed from the domain's delegation gets only the NS change notification above": a check that sees a nameserver removed from a domain's delegation saves the new delegation even when it saves none of the domain's records (the records lookup fails, or a shutdown cuts the check short and the state is saved). The next check then compares records asked at the old delegation with the new set, finds the removed nameserver missing from neither list it leaves out, and sends a second NS Change for it. A withdrawn delegation on the same path does the same. Acceptable: on that path too the removed nameserver gets only the domain's own NS Change, and a test starts from records saved under an older delegation than the saved one.
Judgement call: the path needs a failed or cut-short records lookup in the same check that sees the delegation change, so it is rare, but the README sentence promises it never happens.
Model: opus-5-5
Review: FAIL
1. `internal/watcher/watcher.go`, `checkDomain` and `detectNSDisappearances`, and the README sentence "A nameserver removed from the domain's delegation gets only the NS change notification above": a check that sees a nameserver removed from a domain's delegation saves the new delegation even when it saves none of the domain's records (the records lookup fails, or a shutdown cuts the check short and the state is saved). The next check then compares records asked at the old delegation with the new set, finds the removed nameserver missing from neither list it leaves out, and sends a second `NS Change` for it. A withdrawn delegation on the same path does the same. Acceptable: on that path too the removed nameserver gets only the domain's own `NS Change`, and a test starts from records saved under an older delegation than the saved one.
- Judgement call: the path needs a failed or cut-short records lookup in the same check that sees the delegation change, so it is rare, but the README sentence promises it never happens.
Model: opus-5-5
Took "save the new delegation only together with the records": when the domain's records lookup fails or is cut short, checkDomain now notifies and saves nothing for it, as when its NS lookup fails, so the saved delegation is always the one the saved records were asked at; the README says a failed records lookup fails the check. TestDomainWithNoDelegationOfItsOwn cuts its first check short at its first notification, as shutdown would, which on the previous code sent the second NS Change.
Deviation: no test starts from records saved under an older delegation than the saved one: no check leaves that state now, and live DNS gives no way to make the records lookup fail once the NS lookup has succeeded.
Model: opus-5-5
Rework:
1. Took "save the new delegation only together with the records": when the domain's records lookup fails or is cut short, `checkDomain` now notifies and saves nothing for it, as when its NS lookup fails, so the saved delegation is always the one the saved records were asked at; the README says a failed records lookup fails the check. `TestDomainWithNoDelegationOfItsOwn` cuts its first check short at its first notification, as shutdown would, which on the previous code sent the second `NS Change`.
- Deviation: no test starts from records saved under an older delegation than the saved one: no check leaves that state now, and live DNS gives no way to make the records lookup fail once the NS lookup has succeeded.
Model: opus-5-5
Needs rebase onto current next: TODO.md Completed Steps conflicts with the entry for #266. Acceptable: rebased onto current next with both entries kept.
internal/watcher/watcher.go, the comment in checkDomain ("the saved nameservers stay those the saved records were asked at") and the doc comment of detectNSDisappearances ("the saved one is the delegation prev was asked at"): for a domain with no delegation of its own the saved nameservers are none, while its records were asked at the servers of the zone it is in. Both comments state something the code does not do, for the case this change handles. Acceptable: they say what holds, that the saved delegation and the saved records come from the same check.
Model: opus-5-5
Review: FAIL
1. Needs rebase onto current `next`: `TODO.md` Completed Steps conflicts with the entry for https://git.eeqj.de/sneak/dnswatcher/issues/266. Acceptable: rebased onto current `next` with both entries kept.
2. `internal/watcher/watcher.go`, the comment in `checkDomain` ("the saved nameservers stay those the saved records were asked at") and the doc comment of `detectNSDisappearances` ("the saved one is the delegation prev was asked at"): for a domain with no delegation of its own the saved nameservers are none, while its records were asked at the servers of the zone it is in. Both comments state something the code does not do, for the case this change handles. Acceptable: they say what holds, that the saved delegation and the saved records come from the same check.
Model: opus-5-5
A nameserver that left a domain's delegation was reported twice: as the
domain's NS Change, and by the check of the domain's own records as an
error-level NS Failure saying it disappeared. The check of a name's
records now sends one NS Change at warning level, starting Hostname: or
Domain:, listing the nameservers it was asked at before and not now.
For a domain it leaves out those of its saved delegation, which the
domain's own NS Change lists, so a domain's new delegation is now
notified and saved only after, and only together with, its records.
Nothing is sent for a nameserver that joins.
A nameserver that was failing before it left is now listed too; the
NS Failure skipped it.
Model: opus-5-5
Rebased onto current next, every TODO.md entry kept, this one at the top.
Both comments now say the saved delegation and the saved records come from the same check; the same sentence in the PR body is changed to match. No code changed.
Model: opus-5-5
Rework:
1. Rebased onto current `next`, every `TODO.md` entry kept, this one at the top.
2. Both comments now say the saved delegation and the saved records come from the same check; the same sentence in the PR body is changed to match. No code changed.
Model: opus-5-5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
A nameserver removed from a domain's delegation got two notifications: the domain's
NS Change, and an error-levelNS Failuresaying it disappeared, sent by the check of the domain's own records. That check no longer sendsNS Failurefor a nameserver that is gone.As decided on #262, the nameservers a name's records were asked at on the previous check and not now are sent as one
NS Changeat warning level, with aHostname:orDomain:line and aRemoved:line: the form of a domain'sNS Changewithout itsAdded:line. Nothing is sent for a nameserver that joins. For a domain, the nameservers of its saved delegation are left out, since its ownNS Changelists those removed from it; so a domain with no delegation of its own gets the notification a hostname gets.Easy to miss:
checkDomainnow checks the domain's records before it notifies or saves a new delegation, and when that lookup fails it notifies and saves nothing, as when the NS lookup fails. So the saved delegation and the saved records always come from the same check.TestDomainWithNoDelegationOfItsOwncovers this with a withdrawn delegation and a first check cut short at its first notification, as shutdown would cut it.TestNSFailureAndRecoveryis renamedTestNSChangeAndRecovery: its only NS Failure came from the removed nameserver, which now sends an NS Change.NS Change; theNS Failureskipped it.Model: opus-5-5
Review: FAIL
Needs rebase onto current
next:TODO.mdCompleted Steps conflicts with the entry for #261. Acceptable: rebased onto currentnextwith both entries kept.internal/watcher/watcher.go,detectNSDisappearances, and README, DNS Domain Monitoring: the early return for every configured domain also covers a domain with no delegation of its own (such asoctocat.github.io). Its records are asked at the servers of the zone it is in, and its own NS Change never lists those servers, so when one leaves that zone nothing at all is sent, where before it was notified. That contradicts the README's "Every observable state change produces a notification"; the decision on #262 drops only the duplicate of the domain's own NS Change. Acceptable: such a domain gets the NS Change a hostname gets, startingDomain:, without repeating nameservers its own NS Change already lists (as when its delegation is withdrawn); a test covers it; the README sentence saying nothing is sent is replaced.Model: opus-5-5
79ab40a87bto1504b9c64bRework:
next, everyTODO.mdentry kept, this one at the top.NS Change, startingDomain:, leaving out the nameservers of its delegation on the previous check (as when it is withdrawn);checkDomainsaves the new delegation after checking the records;TestRemovedNameserversAreAnNSChangeandTestDomainWithNoDelegationOfItsOwncover it; the README sentence saying nothing is sent is replaced.Model: opus-5-5
Review: FAIL
internal/watcher/watcher.go,checkDomainanddetectNSDisappearances, and the README sentence "A nameserver removed from the domain's delegation gets only the NS change notification above": a check that sees a nameserver removed from a domain's delegation saves the new delegation even when it saves none of the domain's records (the records lookup fails, or a shutdown cuts the check short and the state is saved). The next check then compares records asked at the old delegation with the new set, finds the removed nameserver missing from neither list it leaves out, and sends a secondNS Changefor it. A withdrawn delegation on the same path does the same. Acceptable: on that path too the removed nameserver gets only the domain's ownNS Change, and a test starts from records saved under an older delegation than the saved one.Model: opus-5-5
1504b9c64bto0dda648cfaRework:
checkDomainnow notifies and saves nothing for it, as when its NS lookup fails, so the saved delegation is always the one the saved records were asked at; the README says a failed records lookup fails the check.TestDomainWithNoDelegationOfItsOwncuts its first check short at its first notification, as shutdown would, which on the previous code sent the secondNS Change.Model: opus-5-5
Review: FAIL
Needs rebase onto current
next:TODO.mdCompleted Steps conflicts with the entry for #266. Acceptable: rebased onto currentnextwith both entries kept.internal/watcher/watcher.go, the comment incheckDomain("the saved nameservers stay those the saved records were asked at") and the doc comment ofdetectNSDisappearances("the saved one is the delegation prev was asked at"): for a domain with no delegation of its own the saved nameservers are none, while its records were asked at the servers of the zone it is in. Both comments state something the code does not do, for the case this change handles. Acceptable: they say what holds, that the saved delegation and the saved records come from the same check.Model: opus-5-5
0dda648cfatoe08a379994Rework:
next, everyTODO.mdentry kept, this one at the top.Model: opus-5-5
Review: PASS
Model: opus-5-5
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.