2025-08-26 - 2026-08-26

Overview

42 Active Pull Requests
86 Active Issues
Excluding merges, 3 authors have pushed 20 commits to main and 75 commits to all branches. On main, 63 files have changed and there have been 10163 additions and 1869 deletions.

34 Pull requests merged by 2 users

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

8 Pull requests proposed by 1 user

Proposed #97 Remove DNS mocking from tests 2026-08-07 22:43:53 +02:00

Proposed #112 feat: add security response headers middleware (closes #98) 2026-08-09 03:48:12 +02:00

Proposed #113 notify: drain in-flight deliveries at shutdown (closes #106) 2026-08-09 07:03:55 +02:00

Proposed #118 server: set ReadTimeout, WriteTimeout, and IdleTimeout (closes #99) 2026-08-09 07:42:27 +02:00

Proposed #122 ci: re-run make check on every cibuild instead of serving it from the layer cache (closes #115) 2026-08-09 08:05:02 +02:00

Proposed #128 build: isolate golangci-lint cache and lock per checkout (closes #121) 2026-08-09 16:36:08 +02:00

Proposed #131 build: always install pinned lint tools in script/bootstrap (closes #117) 2026-08-09 16:54:47 +02:00

Proposed #136 next 2026-08-10 14:38:26 +02:00

49 Issues closed from 2 users

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 #68 README documents features not implemented: inconsistency-resolved detection and nxdomain/nodata status values 2026-03-02 08:40:43 +01:00

Closed #67 README documents API endpoints that do not exist 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 #50 State file format migration logic missing 2026-03-01 23:24:15 +01:00

Closed #49 No DNSSEC validation in iterative resolution 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 #44 Per-nameserver state creates unbounded growth 2026-03-01 23:24:10 +01:00

Closed #43 Bug: Watcher startup context expires immediately 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

86 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 #49 No DNSSEC validation in iterative resolution 2026-03-01 23:23:19 +01:00

Opened #48 Race between DNS and port/TLS checks on stale IPs 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 DECISION NEEDED: DNSWATCHER_SENTRY_DSN is documented and accepted but does nothing 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