2025-10-15 - 2026-10-15

Overview

116 Active Pull Requests
160 Active Issues
Excluding merges, 3 authors have pushed 21 commits to main and 150 commits to all branches. On main, 71 files have changed and there have been 12068 additions and 2191 deletions.

2 Releases published by 1 user

Published v1.0.0-rc2 2026-10-14 00:31:43 +02:00

Published v1.0.0-rc1 2026-10-13 22:31:59 +02:00

114 Pull requests merged by 2 users

Merged #290 watcher: a hostname whose zone's nameservers all stop answering gets NS Failure (closes #284) 2026-10-14 00:27:31 +02:00

Merged #282 watcher: an IPv6 address is written in brackets before its port (closes #270) 2026-10-13 22:27:35 +02:00

Merged #283 docs: TODO.md names only open issues as next steps (closes #281) 2026-10-13 22:00:05 +02:00

Merged #280 watcher: a port check that finds 443 closed removes its certificate entries (closes #265) 2026-10-13 21:27:35 +02:00

Merged #278 state: a state file without a section loads it empty (closes #267) 2026-10-13 20:27:27 +02:00

Merged #279 watcher: a stop during the first scan sends no startup notification (closes #271) 2026-10-13 20:00:01 +02:00

Merged #273 watcher: a removed nameserver is an NS Change, not an NS Failure (closes #262) 2026-10-13 19:27:37 +02:00

Merged #277 config: a metrics username without a password stops startup (closes #268) 2026-10-13 19:10:59 +02:00

Merged #276 state: Save syncs the state file before renaming it into place (closes #264) 2026-10-13 18:27:31 +02:00

Merged #275 server: a port that cannot be bound stops startup (closes #266) 2026-10-13 18:00:01 +02:00

Merged #274 config: a bad number or true/false setting stops startup (closes #269) 2026-10-13 15:27:34 +02:00

Merged #272 state: GetSnapshot copies the state's maps (closes #261) 2026-10-13 13:44:32 +02:00

Merged #259 build: re-vendor canonical files from prompts dd4027b (closes #257) 2026-10-06 04:29:50 +02:00

Merged #258 watcher, config: no Record Change or Inconsistency for listed names (closes #255) 2026-10-06 03:01:47 +02:00

Merged #254 resolver: a nameserver with a failed record type is not nodata (closes #253) 2026-10-02 13:16:43 +02:00

Merged #250 resolver, watcher: a domain's nameservers are only its own delegation (closes #222) 2026-10-02 12:38:45 +02:00

Merged #252 resolver: the refused-query test asks several operators, one query each (closes #251) 2026-10-02 12:00:49 +02:00

Merged #246 watcher: a name removed from the targets leaves the state (closes #223) 2026-10-02 11:17:59 +02:00

Merged #234 resolver, watcher: a record type whose query fails keeps its previous records (closes #231) 2026-10-02 10:51:24 +02:00

Merged #249 watcher: Port Change notifications list domains apart from hostnames (closes #248) 2026-10-02 10:42:07 +02:00

Merged #247 dashboard and status API list a port's domains apart from its hostnames (closes #245) 2026-10-02 10:31:07 +02:00

Merged #242 resolver: ask a referral's nameservers that come without addresses (closes #221) 2026-10-02 10:12:09 +02:00

Merged #244 dashboard, status API and notifications tell apex domains from hostnames (closes #224) 2026-10-02 10:08:33 +02:00

Merged #243 dashboard: list record types in the README's order (closes #226) 2026-10-02 09:55:07 +02:00

Merged #235 dashboard and status API show why a check failed (closes #225) 2026-10-02 09:14:28 +02:00

Merged #236 resolver: store a name's CNAME once per nameserver (closes #220) 2026-10-02 09:09:52 +02:00

Merged #237 watcher: a lookup cut short by shutdown is not logged as an error (closes #229) 2026-10-02 08:56:53 +02:00

Merged #238 watcher: change messages name only the record types that differ (closes #219) 2026-10-02 08:46:57 +02:00

Merged #241 watcher: startup notification no longer says every endpoint works (closes #230) 2026-10-02 08:42:35 +02:00

Merged #240 notify: a failed Mattermost delivery's error names Mattermost 2026-10-02 08:40:20 +02:00

Merged #239 log: write durations as text, not nanoseconds (closes #228) 2026-10-02 08:37:48 +02:00

Merged #209 watcher: follow a watched name's CNAME for port and TLS checks (closes #203) 2026-10-02 08:26:27 +02:00

Merged #232 resolver tests: retry an answer missing the record type read (closes #218) 2026-10-02 07:52:45 +02:00

Merged #213 docker: a plain docker build . stamps the git version (closes #210) 2026-10-02 06:27:47 +02:00

Merged #212 resolver: never resend a refused query asking for recursion (closes #206) 2026-10-02 06:10:55 +02:00

Merged #217 ci: a push cancels its branch's older run, checkout keeps no token (closes #216) 2026-10-02 06:07:53 +02:00

Merged #215 watcher tests: far fewer live queries, longer live attempts (closes #214) 2026-10-02 06:04:32 +02:00

Merged #199 resolver: try servers in a random order on each resolution (closes #138) 2026-10-02 03:26:07 +02:00

Merged #205 README: correct claims the code does not bear out (closes #108) 2026-10-02 03:14:27 +02:00

Merged #211 config: watch a target listed twice only once (closes #207) 2026-10-02 02:56:12 +02:00

Merged #208 watcher: warn of an expiring certificate on every TLS check (closes #204) 2026-10-02 01:58:28 +02:00

Merged #202 resolver: take a domain's NS set from its delegation (closes #200) 2026-10-02 01:48:55 +02:00

Merged #198 docs: add the README sections policy requires (closes #173) 2026-10-02 01:25:14 +02:00

Merged #201 resolver: pass over a server that answers SERVFAIL or refers no closer (closes #197) 2026-10-02 01:17:39 +02:00

Merged #195 watcher: keep port state when no nameserver of a name answered (closes #193) 2026-10-02 00:44:50 +02:00

Merged #194 resolver: error from ResolveIPAddresses when no nameserver answered (closes #190) 2026-10-02 00:28:54 +02:00

Merged #196 fmt: format and check Markdown with prettier in a container (closes #119) 2026-10-02 00:19:30 +02:00

Merged #192 fmt: check goimports in fmt-check, run it at its pinned commit (#119) 2026-10-01 23:51:22 +02:00

Merged #191 resolver: query a hostname at its own zone's servers (closes #189) 2026-10-01 23:34:36 +02:00

Merged #187 watcher: notify nameserver address changes (closes #105) 2026-10-01 23:23:27 +02:00

Merged #186 watcher: save state when it stops and wait for that save (closes #114) 2026-10-01 23:14:18 +02:00

Merged #184 server: report HTTP handler panics to Sentry (closes #107) 2026-10-01 23:09:39 +02:00

Merged #188 watcher: save and notify nothing for a cut-short port or TLS check (closes #185) 2026-10-01 22:49:45 +02:00

Merged #183 middleware: take the client address from the right of X-Forwarded-For (closes #181) 2026-10-01 22:35:18 +02:00

Merged #175 watcher: notify NS query failure and recovery (closes #104) 2026-10-01 22:23:33 +02:00

Merged #178 config: stop startup on an invalid DNS or TLS interval 2026-10-01 22:19:05 +02:00

Merged #180 metrics: rate limit /metrics per client address before Basic Auth (closes #101) 2026-10-01 22:09:15 +02:00

Merged #182 docker: report the real version in the image (closes #109) 2026-10-01 22:01:44 +02:00

Merged #179 notify: release held deliveries so shutdown tests fail, not hang (closes #176) 2026-10-01 21:58:59 +02:00

Merged #170 script/install-precommit: work where .git is a file (closes #129) 2026-10-01 21:45:58 +02:00

Merged #171 docs: bring TODO.md up to date (closes #146) 2026-10-01 21:32:50 +02:00

Merged #167 docker: set up the data directory in an entrypoint (closes #166) 2026-10-01 21:15:03 +02:00

Merged #172 server: limit wildcard CORS to the public routes (closes #100) 2026-10-01 21:05:43 +02:00

Merged #169 Move the test-only constructors into export_test.go (closes #111) 2026-10-01 21:03:04 +02:00

Merged #174 notify: make the shutdown tests fail with the right message (closes #116) 2026-10-01 20:42:22 +02:00

Merged #165 tests: rename internal/livedns to livednstest and deny it outside tests 2026-10-01 19:52:49 +02:00

Merged #163 golangci: re-vendor the org config with gomodguard_v2 2026-09-29 10:27:08 +02:00

Merged #162 tests: remove the DNS stand-ins from the watcher and resolver tests 2026-09-29 08:44:08 +02:00

Merged #161 watcher: send the inconsistency alert once per disagreement 2026-09-29 02:29:54 +02:00

Merged #160 resolver: lower-case DNS names in record values (closes #157) 2026-09-29 00:30:30 +02:00

Merged #155 script: force lint and test to run in cibuild and docker 2026-09-28 23:13:39 +02:00

Merged #153 server: assert timeouts on the served http.Server, not just the constructor 2026-09-28 22:01:36 +02:00

Merged #156 docker: run as non-root, add health check, document upaas 2026-09-28 20:13:38 +02:00

Merged #112 feat: add security response headers middleware (closes #98) 2026-09-22 00:52:48 +02:00

Merged #154 Add tests for globals, healthcheck, and logger packages 2026-09-21 10:05:39 +02:00

Merged #150 gomod: drop stale golang.org/x/sync indirect line 2026-09-21 09:44:50 +02:00

Merged #151 Merge main into next to restore ancestry (resolve TODO.md) 2026-09-21 09:44:28 +02:00

Merged #118 server: set ReadTimeout, WriteTimeout, and IdleTimeout (closes #99) 2026-09-09 15:17:44 +02:00

Merged #136 next 2026-09-09 14:57:56 +02:00

Merged #113 notify: drain in-flight deliveries at shutdown (closes #106) 2026-09-09 14:26:54 +02:00

Merged #96 build: update golangci-lint to v2.12.2 with org-standard v2 config 2026-08-07 23:15:48 +02:00

Merged #95 docs: document the no-DNS-mocking policy in README (closes #94) 2026-08-07 22:31:48 +02:00

Merged #92 scripts-to-rule-them-all 2026-07-07 02:14:32 +02:00

Merged #91 TODO 2026-07-06 21:20:44 +02:00

Merged #87 feat: add retry with exponential backoff for notification delivery 2026-03-22 07:14:59 +01:00

Merged #89 config: use /var/lib/dnswatcher as default data directory 2026-03-20 06:56:10 +01:00

Merged #86 feat: enhance /api/v1/status endpoint with full monitoring data 2026-03-10 12:20:12 +01:00

Merged #85 feat: add DNSWATCHER_SEND_TEST_NOTIFICATION env var 2026-03-04 21:41:55 +01:00

Merged #83 feat: add unauthenticated web dashboard showing monitoring state and recent alerts 2026-03-04 13:03:38 +01:00

Merged #79 test(notify): add comprehensive tests for notification delivery 2026-03-04 11:26:32 +01:00

Merged #80 test(state): add comprehensive test coverage for internal/state package 2026-03-04 11:26:05 +01:00

Merged #81 test(config): add comprehensive tests for config loading path 2026-03-04 11:23:25 +01:00

Merged #74 docs: fix README inaccuracies found during QA audit 2026-03-02 08:40:43 +01:00

Merged #75 feat: fail fast when no monitoring targets configured 2026-03-02 01:26:56 +01:00

Merged #63 fix: use context.Background() for watcher goroutine lifetime 2026-03-02 00:39:09 +01:00

Merged #65 fix: track multiple hostnames per IP:port in port state 2026-03-02 00:32:28 +01:00

Merged #64 fix: enforce DNS-first ordering for port and TLS checks 2026-03-02 00:10:49 +01:00

Merged #40 REPO_POLICIES compliance audit 2026-03-01 21:11:50 +01:00

Merged #28 fix: 700ms query timeout, proper iterative resolution (closes #24) 2026-03-01 21:10:39 +01:00

Merged #38 Simplify CI: docker build instead of manual toolchain setup 2026-02-28 13:04:31 +01:00

Merged #37 fix: distinguish timeout from negative DNS responses (closes #35) 2026-02-28 12:38:18 +01:00

Merged #23 fix: remove ErrNotImplemented stub — all checks fully implemented (closes #16) 2026-02-28 12:26:27 +01:00

Merged #21 fix: look up A/AAAA records for apex domains to enable port/TLS checks (closes #19) 2026-02-28 12:09:04 +01:00

Merged #22 fix: deduplicate TLS expiry warnings to prevent notification spam (closes #18) 2026-02-28 12:08:46 +01:00

Merged #30 Reduce DNS query timeout and limit root server fan-out (closes #29) 2026-02-28 12:07:21 +01:00

Merged #34 doc: add TESTING.md — real DNS only, no mocks 2026-02-28 12:06:58 +01:00

Merged #20 fix: use full Lock in State.Save() to prevent data race (closes #17) 2026-02-21 11:22:47 +01:00

Merged #6 feat: implement TCP port connectivity checker (closes #3) 2026-02-20 19:38:37 +01:00

Merged #9 feat: implement iterative DNS resolver (closes #1) 2026-02-20 19:37:59 +01:00

Merged #7 feat: implement TLS certificate inspector (closes #4) 2026-02-20 19:36:40 +01:00

Merged #13 fix: suppress gosec G704 SSRF false positive on webhook URLs 2026-02-20 14:56:21 +01:00

Merged #14 ci: add Gitea Actions workflow for make check 2026-02-20 14:55:08 +01:00

Merged #8 feat: implement watcher monitoring orchestrator (closes #2) 2026-02-20 09:06:42 +01:00

Merged #11 feat: unify DOMAINS/HOSTNAMES into single TARGETS config (closes #10) 2026-02-20 09:05:00 +01:00

2 Pull requests proposed by 1 user

Proposed #152 next 2026-09-21 09:44:48 +02:00

Proposed #291 A nameserver is asked at each of its addresses in turn 2026-10-15 12:25:54 +02:00

152 Issues closed from 2 users

Closed #284 A hostname whose zone's nameservers all stop answering gets no NS Failure notification 2026-10-14 00:27:32 +02:00

Closed #270 An IPv6 address joined with its port, as in a Port Change notification, cannot be told from the port 2026-10-13 22:27:36 +02:00

Closed #281 TODO.md names closed issues as its next and future steps 2026-10-13 22:00:06 +02:00

Closed #265 A certificate entry stays ok after its port 443 closes 2026-10-13 21:27:35 +02:00

Closed #267 A state file holding {} crashes the watcher on its first check 2026-10-13 20:27:28 +02:00

Closed #271 The startup notification says the initial scan completed when shutdown cut it short 2026-10-13 20:00:02 +02:00

Closed #262 A nameserver removed from a domain's delegation is also reported as an NS Failure 2026-10-13 19:27:38 +02:00

Closed #268 /metrics is served with an empty password when only DNSWATCHER_METRICS_USERNAME is set 2026-10-13 19:10:59 +02:00

Closed #264 The state file is renamed into place without being synced, so a crash can leave it empty and stop the next start 2026-10-13 18:27:32 +02:00

Closed #266 dnswatcher keeps running without its HTTP server when the listen port is in use 2026-10-13 18:00:01 +02:00

Closed #269 A setting that is not a valid number or true/false is read as 0 or false instead of stopping startup 2026-10-13 15:27:34 +02:00

Closed #261 The dashboard and /api/v1/status iterate the state's live maps without the lock, which can crash the process 2026-10-13 13:44:32 +02:00

Closed #260 Defect hunt before the release candidate: a trial run of next and a read of its code paths 2026-10-13 12:53:25 +02:00

Closed #263 A non-numeric DNSWATCHER_TLS_EXPIRY_WARNING or PORT is silently read as 0 2026-10-13 12:51:04 +02:00

Closed #257 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 04:29:50 +02:00

Closed #255 Let an admin turn off Record Change and Inconsistency notifications for one name 2026-10-06 03:01:47 +02:00

Closed #256 Let an admin turn off the record-change notification for one host 2026-10-03 14:26:31 +02:00

Closed #233 OWNER: names whose nameservers rotate their answers notify on every check 2026-10-03 14:22:59 +02:00

Closed #144 Review toward 1.0: identify and file all next steps 2026-10-02 13:18:58 +02:00

Closed #253 A nameserver whose A query got no reply is reported nodata when its other answers were empty 2026-10-02 13:16:43 +02:00

Closed #222 A name gets a parent zone's nameservers when finding its own fails: a domain that does not exist shows the .com servers 2026-10-02 12:38:45 +02:00

Closed #251 Red next: the Quad9 refusal test needs all eight of its queries answered at once 2026-10-02 12:00:49 +02:00

Closed #223 Targets removed from DNSWATCHER_TARGETS stay on the dashboard, in /api/v1/status and in the startup counts 2026-10-02 11:17:59 +02:00

Closed #231 One lost query saves a nameserver's records with that type missing, and notifies a change 2026-10-02 10:51:24 +02:00

Closed #248 Port Change notifications list apex domains as hosts 2026-10-02 10:42:08 +02:00

Closed #245 The dashboard Ports table lists an apex domain as a hostname 2026-10-02 10:31:07 +02:00

Closed #221 Nameservers that a referral names without addresses are not looked up, so pool.ntp.org cannot be watched 2026-10-02 10:12:10 +02:00

Closed #224 Apex domains are counted, listed and notified as hostnames 2026-10-02 10:08:33 +02:00

Closed #226 The dashboard lists each nameserver's records in a random order of record type 2026-10-02 09:55:07 +02:00

Closed #225 The dashboard and /api/v1/status do not say why a nameserver or certificate check failed 2026-10-02 09:14:28 +02:00

Closed #220 A hostname's CNAME is stored once for every record type asked for, eight copies in all 2026-10-02 09:09:52 +02:00

Closed #229 A DNS lookup cut short by shutdown is logged as an error 2026-10-02 08:56:54 +02:00

Closed #219 Record Change and Inconsistency notifications print every record type in Go map syntax instead of what changed 2026-10-02 08:46:57 +02:00

Closed #230 The startup notification says all notification channels are working before any delivery is known 2026-10-02 08:42:35 +02:00

Closed #227 A failed Mattermost delivery is logged as "slack notification failed" 2026-10-02 08:40:20 +02:00

Closed #228 Durations in the log are bare nanosecond counts 2026-10-02 08:37:48 +02:00

Closed #203 A watched name whose CNAME points into another zone gets no port or TLS checks 2026-10-02 08:26:27 +02:00

Closed #218 Resolver tests for AAAA and MX records fail when one query is lost 2026-10-02 07:52:45 +02:00

Closed #149 Trial run of the finished image against real targets before tagging 1.0 2026-10-02 07:36:51 +02:00

Closed #210 docker build . stamps dev, not the git tag or short commit 2026-10-02 06:27:48 +02:00

Closed #206 A query a server refuses is resent asking for recursion, so answers can come from a recursive resolver 2026-10-02 06:10:55 +02:00

Closed #216 CI runs every pushed head, even after a newer push to the same branch has replaced it 2026-10-02 06:07:53 +02:00

Closed #214 next is red in CI: watcher tests time out since nameserver addresses are looked up on each domain check 2026-10-02 06:04:32 +02:00

Closed #138 queryServers always tries servers in fixed order, so every resolution starts at a.root-servers.net 2026-10-02 03:26:08 +02:00

Closed #108 README accuracy sweep: architecture omissions, undocumented state field, overclaimed MAINTENANCE_MODE and /metrics 2026-10-02 03:14:27 +02:00

Closed #207 A target listed twice in DNSWATCHER_TARGETS is checked twice 2026-10-02 02:56:12 +02:00

Closed #204 TLS expiry warning is skipped on some checks, at random 2026-10-02 01:58:29 +02:00

Closed #200 A domain's NS set comes from whichever server answers first, so it can change between checks when servers disagree 2026-10-02 01:48:56 +02:00

Closed #173 README lacks the Getting Started, Rationale, Design and TODO sections that REPO_POLICIES.md requires 2026-10-02 01:25:14 +02:00

Closed #197 Finding a zone's servers gives up after the first server answers SERVFAIL or refers onward 2026-10-02 01:17:39 +02:00

Closed #193 Saved port state is removed when every nameserver of a hostname fails 2026-10-02 00:44:51 +02:00

Closed #190 ResolveIPAddresses returns no addresses and no error when every nameserver fails 2026-10-02 00:28:54 +02:00

Closed #119 fmt tooling is incomplete: fmt-check does not verify goimports, and no formatter covers Markdown 2026-10-02 00:19:30 +02:00

Closed #189 Hostname records are queried at the servers of the name's last two labels, the wrong zone under co.uk-style suffixes and delegated subdomains 2026-10-01 23:34:36 +02:00

Closed #105 Nameserver glue/IP changes are never detected — README claims they trigger a notification 2026-10-01 23:23:27 +02:00

Closed #114 Final state persistence at shutdown depends on implicit fx hook ordering and is untested 2026-10-01 23:14:18 +02:00

Closed #107 DNSWATCHER_SENTRY_DSN is documented and accepted but does nothing: port the Sentry integration from gohttpserver 2026-10-01 23:09:39 +02:00

Closed #185 A check cut short by shutdown saves every port as closed and every certificate as failed 2026-10-01 22:49:45 +02:00

Closed #181 The client address taken from X-Forwarded-For is the first entry, which the client itself can set 2026-10-01 22:35:18 +02:00

Closed #104 Per-nameserver query status is discarded: NS failure and NS recovery notifications never fire 2026-10-01 22:23:33 +02:00

Closed #177 An invalid DNSWATCHER_DNS_INTERVAL or DNSWATCHER_TLS_INTERVAL is silently replaced by the default 2026-10-01 22:19:05 +02:00

Closed #101 No rate limiting on the Basic-Auth-protected /metrics endpoint 2026-10-01 22:09:15 +02:00

Closed #109 Dockerfile does not implement the mandated fail-fast lint stage, and does not pass VERSION as a build ARG 2026-10-01 22:01:44 +02:00

Closed #176 notify shutdown tests hang until the 90-second timeout instead of failing when a drain returns early 2026-10-01 21:58:59 +02:00

Closed #129 script/install-precommit fails in a linked worktree: .git is a file, not a directory 2026-10-01 21:45:58 +02:00

Closed #146 TODO.md is stale: lists shipped work as future steps and tells the reader to keep DNS tests mocked 2026-10-01 21:32:50 +02:00

Closed #166 The container sets its data directory permissions itself before startup 2026-10-01 21:15:03 +02:00

Closed #100 CORS wildcard applies to the authenticated /metrics route, and advertises methods that do not exist 2026-10-01 21:05:44 +02:00

Closed #111 internal/state ships test-only constructors in the production build 2026-10-01 21:03:05 +02:00

Closed #116 internal/notify shutdown tests: misleading failure diagnostic and an overloaded timing constant 2026-10-01 20:42:22 +02:00

Closed #164 Test-only package internal/livedns can be compiled into the binary: rename it and name it in the test-support lint rule 2026-10-01 19:52:52 +02:00

Closed #123 DECISION NEEDED: gomodguard linter is deprecated, and .golangci.yml can only be changed by you 2026-10-01 19:52:13 +02:00

Closed #159 Watcher tests stub DNS with a mock resolver, against the no-DNS-mocking rule 2026-10-01 19:52:13 +02:00

Closed #147 Deploy readiness for upaas: non-root image, healthcheck, trial run, README deploy section 2026-10-01 19:52:12 +02:00

Closed #158 Inconsistency alert repeats on every DNS cycle while nameservers disagree 2026-10-01 19:52:12 +02:00

Closed #168 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:12:16 +02:00

Closed #157 Record values are compared with letter case, so nameservers that agree are reported as inconsistent 2026-09-29 00:30:30 +02:00

Closed #115 script/cibuild can report a green it did not earn: RUN make check is served from the Docker layer cache 2026-09-28 23:13:39 +02:00

Closed #120 Server timeout tests protect the constructor but not the call site, and carry an inverted rationale comment 2026-09-28 22:01:36 +02:00

Closed #126 DECISION/ACCESS NEEDED: the CI job log Gitea returns for a commit does not correspond to that commit 2026-09-25 01:27:10 +02:00

Closed #98 Add security response headers middleware (HSTS, CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy) 2026-09-22 00:52:49 +02:00

Closed #110 internal/globals, internal/healthcheck, and internal/logger have no tests at all 2026-09-21 10:05:39 +02:00

Closed #132 go.mod is untidy: golang.org/x/sync listed both direct and indirect, so script/bootstrap mutates a tracked file 2026-09-21 09:44:50 +02:00

Closed #145 next cannot be merged into main: TODO.md conflicts after the squash of the last milestone 2026-09-21 09:44:28 +02:00

Closed #124 script/docker has the same layer-cache hole as script/cibuild, so make docker can hand a developer an unearned green 2026-09-21 09:19:08 +02:00

Closed #125 CHECK_EPOCH freshness is host-conditional: busybox date silently drops %N 2026-09-21 09:19:08 +02:00

Closed #133 script/lint and script/fmt invoke golangci-lint and goimports by bare name, so a PATH shadow still overrides the pin 2026-09-21 09:19:08 +02:00

Closed #103 script/test always runs with -v instead of the conditional verbose rerun pattern 2026-09-21 09:19:07 +02:00

Closed #117 script/bootstrap installs pinned tools only when missing, so the golangci-lint pin is inert on any machine that already has one 2026-09-21 09:19:07 +02:00

Closed #121 script/lint shares one golangci-lint cache and lock across concurrent worktrees, so results can come from another codebase 2026-09-21 09:19:07 +02:00

Closed #130 Lint cache follow-ups: same-checkout runs abort instead of queueing, and make clean leaves .lint-cache/ 2026-09-21 09:19:07 +02:00

Closed #99 http.Server is missing ReadTimeout, WriteTimeout, and IdleTimeout 2026-09-09 15:17:44 +02:00

Closed #93 internal/resolver tests query live nameservers and fail nondeterministically 2026-09-09 14:57:56 +02:00

Closed #102 Add the MIT LICENSE file and README licence statement (1.0 blocker) 2026-09-09 14:57:56 +02:00

Closed #134 Run all linting in Docker via Dockerfile.lint + script/lint 2026-09-09 14:57:56 +02:00

Closed #137 Stale/incorrect comment text in script/bootstrap and script/cibuild, and record the config-verify tradeoff 2026-09-09 14:57:56 +02:00

Closed #139 make test is served from Go's test cache, so a repeat green proves no DNS was queried 2026-09-09 14:57:56 +02:00

Closed #106 In-flight notification goroutines are not awaited at shutdown, so alerts are lost 2026-09-09 14:26:54 +02:00

Closed #140 TODO.md collides on every single PR, and its Workflow section still says to branch from main 2026-09-05 11:32:51 +02:00

Closed #141 tryExchange discards a prior attempt's timeout error on context cancellation, downgrading StatusTimeout to StatusNoData 2026-09-05 11:32:51 +02:00

Closed #142 internal/server has no tests: deleting the SecurityHeaders router registration fails nothing 2026-09-05 11:32:51 +02:00

Closed #143 Live-DNS test harness never retries an answer that is missing the record type under test, so TestQueryNameserver_TXT flakes 2026-09-05 11:32:51 +02:00

Closed #135 TOP PRIORITY: consolidate all open PRs onto one next branch, one PR 2026-09-03 18:16:36 +02:00

Closed #94 Document the no-DNS-mocking policy in the README 2026-08-07 22:31:48 +02:00

Closed #90 Move schema_migrations table creation into 000.sql with INTEGER version column 2026-03-26 14:32:15 +01:00

Closed #62 Notification delivery: fire-and-forget with no retry 2026-03-22 07:15:00 +01:00

Closed #88 datadir should not be relative 2026-03-20 09:40:22 +01:00

Closed #73 /api/v1/status endpoint returns minimal data 2026-03-10 12:20:13 +01:00

Closed #82 Simple unauthenticated web UI showing test results and recent alerts 2026-03-10 11:58:05 +01:00

Closed #84 add env var SEND_TEST_NOTIFICATION 2026-03-04 21:41:55 +01:00

Closed #72 Config package has only 23% test coverage 2026-03-04 11:29:21 +01:00

Closed #71 Notify package has only 11.1% test coverage 2026-03-04 11:29:20 +01:00

Closed #70 State package has 0% test coverage 2026-03-04 11:26:05 +01:00

Closed #78 µPaaS deployment setup 2026-03-02 09:29:20 +01:00

Closed #67 README documents API endpoints that do not exist 2026-03-02 08:40:43 +01:00

Closed #68 README documents features not implemented: inconsistency-resolved detection and nxdomain/nodata status values 2026-03-02 08:40:43 +01:00

Closed #69 No validation or warning when DNSWATCHER_TARGETS is empty 2026-03-02 01:26:58 +01:00

Closed #53 Watcher startup context bug: startCtx expires after fx startup 2026-03-02 00:39:09 +01:00

Closed #55 Port check IP↔hostname association is lossy (single hostname per IP:port) 2026-03-02 00:32:28 +01:00

Closed #58 Race between DNS and port/TLS checks (stale IPs) 2026-03-02 00:10:51 +01:00

Closed #57 No backoff on persistent NS failures (24 notifications/day) 2026-03-01 23:53:50 +01:00

Closed #60 State file format migration: no logic for version changes 2026-03-01 23:53:22 +01:00

Closed #56 TLS cert key collision: duplicate checks for shared IP + SNI targets 2026-03-01 23:28:33 +01:00

Closed #61 CNAME chain + per-NS storage interaction: incomplete IP resolution 2026-03-01 23:28:09 +01:00

Closed #54 Per-nameserver state creates unbounded growth (no pruning) 2026-03-01 23:26:45 +01:00

Closed #52 Notification delivery is fire-and-forget with no retry 2026-03-01 23:24:17 +01:00

Closed #51 CNAME chain + per-NS storage interaction needs clarification 2026-03-01 23:24:16 +01:00

Closed #49 No DNSSEC validation in iterative resolution 2026-03-01 23:24:15 +01:00

Closed #50 State file format migration logic missing 2026-03-01 23:24:15 +01:00

Closed #48 Race between DNS and port/TLS checks on stale IPs 2026-03-01 23:24:14 +01:00

Closed #47 No backoff on persistent nameserver failures 2026-03-01 23:24:13 +01:00

Closed #46 TLS cert key collision for shared IP + SNI targets 2026-03-01 23:24:12 +01:00

Closed #45 Port check IP↔hostname association is lossy for shared IPs 2026-03-01 23:24:11 +01:00

Closed #43 Bug: Watcher startup context expires immediately 2026-03-01 23:24:10 +01:00

Closed #44 Per-nameserver state creates unbounded growth 2026-03-01 23:24:10 +01:00

Closed #5 Spec review: design issues and edge cases in README 2026-03-01 23:23:30 +01:00

Closed #15 Add branch protection to main branch 2026-03-01 21:15:38 +01:00

Closed #39 REPO_POLICIES compliance audit 2026-03-01 21:15:29 +01:00

Closed #24 CRITICAL: make check hangs on main — resolver tests do real DNS lookups 2026-03-01 21:10:39 +01:00

Closed #35 Resolver should distinguish timeout from authoritative negative responses and retry on timeout 2026-02-28 12:38:18 +01:00

Closed #16 CRITICAL: Resolver, PortCheck, and TLSCheck are unimplemented stubs 2026-02-28 12:26:27 +01:00

Closed #19 CRITICAL: Port and TLS checks for apex domains silently do nothing 2026-02-28 12:09:04 +01:00

Closed #18 CRITICAL: TLS expiry warning fires on every check cycle with no deduplication 2026-02-28 12:08:46 +01:00

Closed #29 Reduce DNS query timeout and limit root server fan-out 2026-02-28 12:07:21 +01:00

Closed #32 Resolver tests hit real DNS, causing slow/flaky/racy test suite 2026-02-22 13:26:04 +01:00

Closed #17 CRITICAL: Data race in State.Save() — mutates snapshot under RLock 2026-02-21 11:22:47 +01:00

Closed #3 feat: implement TCP port connectivity checker 2026-02-20 19:38:37 +01:00

Closed #12 CRITICAL: resolver tests hit real DNS, test suite exceeds 30s 2026-02-20 19:38:00 +01:00

Closed #1 Implement iterative DNS resolver 2026-02-20 19:37:59 +01:00

Closed #4 feat: implement TLS certificate inspector 2026-02-20 19:36:40 +01:00

Closed #2 feat: implement watcher monitoring orchestrator 2026-02-20 09:06:42 +01:00

Closed #10 Unify DOMAINS and HOSTNAMES into a single TARGETS config 2026-02-20 09:05:00 +01:00

160 Issues created by 2 users

Opened #1 Implement iterative DNS resolver 2026-02-19 22:42:18 +01:00

Opened #2 feat: implement watcher monitoring orchestrator 2026-02-19 22:42:28 +01:00

Opened #3 feat: implement TCP port connectivity checker 2026-02-19 22:42:34 +01:00

Opened #4 feat: implement TLS certificate inspector 2026-02-19 22:42:35 +01:00

Opened #5 Spec review: design issues and edge cases in README 2026-02-19 22:42:53 +01:00

Opened #10 Unify DOMAINS and HOSTNAMES into a single TARGETS config 2026-02-20 05:04:45 +01:00

Opened #12 CRITICAL: resolver tests hit real DNS, test suite exceeds 30s 2026-02-20 09:02:16 +01:00

Opened #15 Add branch protection to main branch 2026-02-20 11:59:56 +01:00

Opened #16 CRITICAL: Resolver, PortCheck, and TLSCheck are unimplemented stubs 2026-02-20 13:49:40 +01:00

Opened #17 CRITICAL: Data race in State.Save() — mutates snapshot under RLock 2026-02-20 13:49:41 +01:00

Opened #18 CRITICAL: TLS expiry warning fires on every check cycle with no deduplication 2026-02-20 13:49:42 +01:00

Opened #19 CRITICAL: Port and TLS checks for apex domains silently do nothing 2026-02-20 13:49:42 +01:00

Opened #24 CRITICAL: make check hangs on main — resolver tests do real DNS lookups 2026-02-21 11:37:51 +01:00

Opened #29 Reduce DNS query timeout and limit root server fan-out 2026-02-22 12:33:45 +01:00

Opened #32 Resolver tests hit real DNS, causing slow/flaky/racy test suite 2026-02-22 13:19:26 +01:00

Opened #35 Resolver should distinguish timeout from authoritative negative responses and retry on timeout 2026-02-28 12:20:11 +01:00

Opened #39 REPO_POLICIES compliance audit 2026-03-01 16:47:14 +01:00

Opened #43 Bug: Watcher startup context expires immediately 2026-03-01 23:23:15 +01:00

Opened #44 Per-nameserver state creates unbounded growth 2026-03-01 23:23:16 +01:00

Opened #45 Port check IP↔hostname association is lossy for shared IPs 2026-03-01 23:23:17 +01:00

Opened #46 TLS cert key collision for shared IP + SNI targets 2026-03-01 23:23:17 +01:00

Opened #47 No backoff on persistent nameserver failures 2026-03-01 23:23:18 +01:00

Opened #48 Race between DNS and port/TLS checks on stale IPs 2026-03-01 23:23:19 +01:00

Opened #49 No DNSSEC validation in iterative resolution 2026-03-01 23:23:19 +01:00

Opened #50 State file format migration logic missing 2026-03-01 23:23:20 +01:00

Opened #51 CNAME chain + per-NS storage interaction needs clarification 2026-03-01 23:23:21 +01:00

Opened #52 Notification delivery is fire-and-forget with no retry 2026-03-01 23:23:21 +01:00

Opened #53 Watcher startup context bug: startCtx expires after fx startup 2026-03-01 23:23:50 +01:00

Opened #54 Per-nameserver state creates unbounded growth (no pruning) 2026-03-01 23:23:51 +01:00

Opened #55 Port check IP↔hostname association is lossy (single hostname per IP:port) 2026-03-01 23:23:52 +01:00

Opened #56 TLS cert key collision: duplicate checks for shared IP + SNI targets 2026-03-01 23:23:52 +01:00

Opened #57 No backoff on persistent NS failures (24 notifications/day) 2026-03-01 23:24:09 +01:00

Opened #58 Race between DNS and port/TLS checks (stale IPs) 2026-03-01 23:24:09 +01:00

Opened #59 No DNSSEC validation in iterative resolution 2026-03-01 23:24:10 +01:00

Opened #60 State file format migration: no logic for version changes 2026-03-01 23:24:11 +01:00

Opened #61 CNAME chain + per-NS storage interaction: incomplete IP resolution 2026-03-01 23:24:22 +01:00

Opened #62 Notification delivery: fire-and-forget with no retry 2026-03-01 23:24:22 +01:00

Opened #66 1.0/mvp 2026-03-02 00:40:59 +01:00

Opened #67 README documents API endpoints that do not exist 2026-03-02 00:50:20 +01:00

Opened #68 README documents features not implemented: inconsistency-resolved detection and nxdomain/nodata status values 2026-03-02 00:50:36 +01:00

Opened #69 No validation or warning when DNSWATCHER_TARGETS is empty 2026-03-02 00:50:46 +01:00

Opened #70 State package has 0% test coverage 2026-03-02 00:51:01 +01:00

Opened #71 Notify package has only 11.1% test coverage 2026-03-02 00:51:14 +01:00

Opened #72 Config package has only 23% test coverage 2026-03-02 00:51:27 +01:00

Opened #73 /api/v1/status endpoint returns minimal data 2026-03-02 00:51:37 +01:00

Opened #78 µPaaS deployment setup 2026-03-02 08:47:29 +01:00

Opened #82 Simple unauthenticated web UI showing test results and recent alerts 2026-03-04 11:57:33 +01:00

Opened #84 add env var SEND_TEST_NOTIFICATION 2026-03-04 13:18:28 +01:00

Opened #88 datadir should not be relative 2026-03-17 13:04:52 +01:00

Opened #90 Move schema_migrations table creation into 000.sql with INTEGER version column 2026-03-25 02:22:02 +01:00

Opened #93 internal/resolver tests query live nameservers and fail nondeterministically 2026-08-04 02:28:02 +02:00

Opened #94 Document the no-DNS-mocking policy in the README 2026-08-07 18:25:13 +02:00

Opened #98 Add security response headers middleware (HSTS, CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy) 2026-08-09 03:35:55 +02:00

Opened #99 http.Server is missing ReadTimeout, WriteTimeout, and IdleTimeout 2026-08-09 03:36:09 +02:00

Opened #100 CORS wildcard applies to the authenticated /metrics route, and advertises methods that do not exist 2026-08-09 03:36:27 +02:00

Opened #101 No rate limiting on the Basic-Auth-protected /metrics endpoint 2026-08-09 03:36:47 +02:00

Opened #102 Add the MIT LICENSE file and README licence statement (1.0 blocker) 2026-08-09 03:37:20 +02:00

Opened #103 script/test always runs with -v instead of the conditional verbose rerun pattern 2026-08-09 03:37:37 +02:00

Opened #104 Per-nameserver query status is discarded: NS failure and NS recovery notifications never fire 2026-08-09 03:38:35 +02:00

Opened #105 Nameserver glue/IP changes are never detected — README claims they trigger a notification 2026-08-09 03:38:55 +02:00

Opened #106 In-flight notification goroutines are not awaited at shutdown, so alerts are lost 2026-08-09 03:39:20 +02:00

Opened #107 DNSWATCHER_SENTRY_DSN is documented and accepted but does nothing: port the Sentry integration from gohttpserver 2026-08-09 03:39:41 +02:00

Opened #108 README accuracy sweep: architecture omissions, undocumented state field, overclaimed MAINTENANCE_MODE and /metrics 2026-08-09 03:40:07 +02:00

Opened #109 Dockerfile does not implement the mandated fail-fast lint stage, and does not pass VERSION as a build ARG 2026-08-09 03:40:38 +02:00

Opened #110 internal/globals, internal/healthcheck, and internal/logger have no tests at all 2026-08-09 03:41:03 +02:00

Opened #111 internal/state ships test-only constructors in the production build 2026-08-09 03:41:20 +02:00

Opened #114 Final state persistence at shutdown depends on implicit fx hook ordering and is untested 2026-08-09 07:06:08 +02:00

Opened #115 script/cibuild can report a green it did not earn: RUN make check is served from the Docker layer cache 2026-08-09 07:33:47 +02:00

Opened #116 internal/notify shutdown tests: misleading failure diagnostic and an overloaded timing constant 2026-08-09 07:34:11 +02:00

Opened #117 script/bootstrap installs pinned tools only when missing, so the golangci-lint pin is inert on any machine that already has one 2026-08-09 07:39:18 +02:00

Opened #119 fmt tooling is incomplete: fmt-check does not verify goimports, and no formatter covers Markdown 2026-08-09 07:44:52 +02:00

Opened #120 Server timeout tests protect the constructor but not the call site, and carry an inverted rationale comment 2026-08-09 07:53:56 +02:00

Opened #121 script/lint shares one golangci-lint cache and lock across concurrent worktrees, so results can come from another codebase 2026-08-09 08:04:02 +02:00

Opened #123 DECISION NEEDED: gomodguard linter is deprecated, and .golangci.yml can only be changed by you 2026-08-09 08:05:15 +02:00

Opened #124 script/docker has the same layer-cache hole as script/cibuild, so make docker can hand a developer an unearned green 2026-08-09 08:07:37 +02:00

Opened #125 CHECK_EPOCH freshness is host-conditional: busybox date silently drops %N 2026-08-09 08:42:18 +02:00

Opened #126 DECISION/ACCESS NEEDED: the CI job log Gitea returns for a commit does not correspond to that commit 2026-08-09 08:42:43 +02:00

Opened #129 script/install-precommit fails in a linked worktree: .git is a file, not a directory 2026-08-09 16:39:25 +02:00

Opened #130 Lint cache follow-ups: same-checkout runs abort instead of queueing, and make clean leaves .lint-cache/ 2026-08-09 16:49:13 +02:00

Opened #132 go.mod is untidy: golang.org/x/sync listed both direct and indirect, so script/bootstrap mutates a tracked file 2026-08-09 16:56:48 +02:00

Opened #133 script/lint and script/fmt invoke golangci-lint and goimports by bare name, so a PATH shadow still overrides the pin 2026-08-09 17:04:56 +02:00

Opened #134 Run all linting in Docker via Dockerfile.lint + script/lint 2026-08-10 13:14:06 +02:00

Opened #135 TOP PRIORITY: consolidate all open PRs onto one next branch, one PR 2026-08-10 14:30:21 +02:00

Opened #137 Stale/incorrect comment text in script/bootstrap and script/cibuild, and record the config-verify tradeoff 2026-08-10 14:50:03 +02:00

Opened #138 queryServers always tries servers in fixed order, so every resolution starts at a.root-servers.net 2026-08-10 15:17:05 +02:00

Opened #139 make test is served from Go's test cache, so a repeat green proves no DNS was queried 2026-08-10 15:26:52 +02:00

Opened #140 TODO.md collides on every single PR, and its Workflow section still says to branch from main 2026-09-03 18:17:07 +02:00

Opened #141 tryExchange discards a prior attempt's timeout error on context cancellation, downgrading StatusTimeout to StatusNoData 2026-09-04 01:22:19 +02:00

Opened #142 internal/server has no tests: deleting the SecurityHeaders router registration fails nothing 2026-09-04 01:25:27 +02:00

Opened #143 Live-DNS test harness never retries an answer that is missing the record type under test, so TestQueryNameserver_TXT flakes 2026-09-04 02:23:38 +02:00

Opened #144 Review toward 1.0: identify and file all next steps 2026-09-21 09:14:03 +02:00

Opened #145 next cannot be merged into main: TODO.md conflicts after the squash of the last milestone 2026-09-21 09:18:32 +02:00

Opened #146 TODO.md is stale: lists shipped work as future steps and tells the reader to keep DNS tests mocked 2026-09-21 09:18:32 +02:00

Opened #147 Deploy readiness for upaas: non-root image, healthcheck, trial run, README deploy section 2026-09-21 09:18:32 +02:00

Opened #148 OWNER: upaas deployment on fsn1app1 - deploy branch decision and the setup only you can do 2026-09-21 09:18:32 +02:00

Opened #149 Trial run of the finished image against real targets before tagging 1.0 2026-09-21 09:18:32 +02:00

Opened #157 Record values are compared with letter case, so nameservers that agree are reported as inconsistent 2026-09-28 19:18:07 +02:00

Opened #158 Inconsistency alert repeats on every DNS cycle while nameservers disagree 2026-09-28 19:18:07 +02:00

Opened #159 Watcher tests stub DNS with a mock resolver, against the no-DNS-mocking rule 2026-09-28 22:15:17 +02:00

Opened #164 Test-only package internal/livedns can be compiled into the binary: rename it and name it in the test-support lint rule 2026-09-29 09:10:45 +02:00

Opened #166 The container sets its data directory permissions itself before startup 2026-09-29 11:07:47 +02:00

Opened #168 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:02:22 +02:00

Opened #173 README lacks the Getting Started, Rationale, Design and TODO sections that REPO_POLICIES.md requires 2026-10-01 20:09:49 +02:00

Opened #176 notify shutdown tests hang until the 90-second timeout instead of failing when a drain returns early 2026-10-01 20:26:07 +02:00

Opened #177 An invalid DNSWATCHER_DNS_INTERVAL or DNSWATCHER_TLS_INTERVAL is silently replaced by the default 2026-10-01 21:00:00 +02:00

Opened #181 The client address taken from X-Forwarded-For is the first entry, which the client itself can set 2026-10-01 21:43:12 +02:00

Opened #185 A check cut short by shutdown saves every port as closed and every certificate as failed 2026-10-01 22:33:25 +02:00

Opened #189 Hostname records are queried at the servers of the name's last two labels, the wrong zone under co.uk-style suffixes and delegated subdomains 2026-10-01 22:54:12 +02:00

Opened #190 ResolveIPAddresses returns no addresses and no error when every nameserver fails 2026-10-01 22:54:12 +02:00

Opened #193 Saved port state is removed when every nameserver of a hostname fails 2026-10-01 23:44:13 +02:00

Opened #197 Finding a zone's servers gives up after the first server answers SERVFAIL or refers onward 2026-10-02 00:26:25 +02:00

Opened #200 A domain's NS set comes from whichever server answers first, so it can change between checks when servers disagree 2026-10-02 00:42:09 +02:00

Opened #203 A watched name whose CNAME points into another zone gets no port or TLS checks 2026-10-02 01:34:46 +02:00

Opened #204 TLS expiry warning is skipped on some checks, at random 2026-10-02 01:34:46 +02:00

Opened #206 A query a server refuses is resent asking for recursion, so answers can come from a recursive resolver 2026-10-02 01:44:46 +02:00

Opened #207 A target listed twice in DNSWATCHER_TARGETS is checked twice 2026-10-02 01:47:34 +02:00

Opened #210 docker build . stamps dev, not the git tag or short commit 2026-10-02 02:21:47 +02:00

Opened #214 next is red in CI: watcher tests time out since nameserver addresses are looked up on each domain check 2026-10-02 03:49:55 +02:00

Opened #216 CI runs every pushed head, even after a newer push to the same branch has replaced it 2026-10-02 04:08:59 +02:00

Opened #218 Resolver tests for AAAA and MX records fail when one query is lost 2026-10-02 07:17:52 +02:00

Opened #219 Record Change and Inconsistency notifications print every record type in Go map syntax instead of what changed 2026-10-02 07:35:28 +02:00

Opened #220 A hostname's CNAME is stored once for every record type asked for, eight copies in all 2026-10-02 07:35:28 +02:00

Opened #221 Nameservers that a referral names without addresses are not looked up, so pool.ntp.org cannot be watched 2026-10-02 07:35:28 +02:00

Opened #222 A name gets a parent zone's nameservers when finding its own fails: a domain that does not exist shows the .com servers 2026-10-02 07:35:33 +02:00

Opened #223 Targets removed from DNSWATCHER_TARGETS stay on the dashboard, in /api/v1/status and in the startup counts 2026-10-02 07:35:33 +02:00

Opened #224 Apex domains are counted, listed and notified as hostnames 2026-10-02 07:35:33 +02:00

Opened #225 The dashboard and /api/v1/status do not say why a nameserver or certificate check failed 2026-10-02 07:35:33 +02:00

Opened #226 The dashboard lists each nameserver's records in a random order of record type 2026-10-02 07:35:33 +02:00

Opened #227 A failed Mattermost delivery is logged as "slack notification failed" 2026-10-02 07:35:33 +02:00

Opened #228 Durations in the log are bare nanosecond counts 2026-10-02 07:35:34 +02:00

Opened #229 A DNS lookup cut short by shutdown is logged as an error 2026-10-02 07:35:34 +02:00

Opened #230 The startup notification says all notification channels are working before any delivery is known 2026-10-02 07:35:34 +02:00

Opened #231 One lost query saves a nameserver's records with that type missing, and notifies a change 2026-10-02 07:35:59 +02:00

Opened #233 OWNER: names whose nameservers rotate their answers notify on every check 2026-10-02 07:37:21 +02:00

Opened #245 The dashboard Ports table lists an apex domain as a hostname 2026-10-02 09:53:25 +02:00

Opened #248 Port Change notifications list apex domains as hosts 2026-10-02 10:31:16 +02:00

Opened #251 Red next: the Quad9 refusal test needs all eight of its queries answered at once 2026-10-02 11:25:27 +02:00

Opened #253 A nameserver whose A query got no reply is reported nodata when its other answers were empty 2026-10-02 12:31:30 +02:00

Opened #255 Let an admin turn off Record Change and Inconsistency notifications for one name 2026-10-03 14:22:50 +02:00

Opened #256 Let an admin turn off the record-change notification for one host 2026-10-03 14:26:15 +02:00

Opened #257 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 01:29:30 +02:00

Opened #260 Defect hunt before the release candidate: a trial run of next and a read of its code paths 2026-10-13 12:10:54 +02:00

Opened #261 The dashboard and /api/v1/status iterate the state's live maps without the lock, which can crash the process 2026-10-13 12:32:08 +02:00

Opened #262 A nameserver removed from a domain's delegation is also reported as an NS Failure 2026-10-13 12:32:08 +02:00

Opened #263 A non-numeric DNSWATCHER_TLS_EXPIRY_WARNING or PORT is silently read as 0 2026-10-13 12:32:08 +02:00

Opened #264 The state file is renamed into place without being synced, so a crash can leave it empty and stop the next start 2026-10-13 12:32:08 +02:00

Opened #265 A certificate entry stays ok after its port 443 closes 2026-10-13 12:32:08 +02:00

Opened #266 dnswatcher keeps running without its HTTP server when the listen port is in use 2026-10-13 12:32:08 +02:00

Opened #267 A state file holding {} crashes the watcher on its first check 2026-10-13 12:32:08 +02:00

Opened #268 /metrics is served with an empty password when only DNSWATCHER_METRICS_USERNAME is set 2026-10-13 12:32:09 +02:00

Opened #269 A setting that is not a valid number or true/false is read as 0 or false instead of stopping startup 2026-10-13 12:50:07 +02:00

Opened #270 An IPv6 address joined with its port, as in a Port Change notification, cannot be told from the port 2026-10-13 12:50:07 +02:00

Opened #271 The startup notification says the initial scan completed when shutdown cut it short 2026-10-13 12:50:07 +02:00

Opened #281 TODO.md names closed issues as its next and future steps 2026-10-13 20:44:56 +02:00

Opened #284 A hostname whose zone's nameservers all stop answering gets no NS Failure notification 2026-10-13 22:55:37 +02:00

Opened #285 A nameserver with several addresses is asked at only the first one, so one unreachable address reports it as failed 2026-10-13 22:55:39 +02:00

Opened #286 The static asset route serves directory listings at /s/ and /s/css/ 2026-10-13 22:55:40 +02:00

Opened #287 A webhook that answers with a redirect is counted as a successful delivery 2026-10-13 22:55:40 +02:00

Opened #288 Debug logging writes the Slack, Mattermost and ntfy webhook URLs to the log on every delivery 2026-10-13 22:55:41 +02:00

Opened #289 TESTING.md describes a root-server fan-out and a calibrated query timeout that the resolver does not have 2026-10-13 22:55:43 +02:00