Commit Graph
37 Commits
Author SHA1 Message Date
gary 683a2a69fa Merge pull request 'Fix DNS resolution: NS name bug, glue bypass, FormatRecord duplicate header, result deduplication' (#23) from agent/go-expert-developer/da16f960 into main
CI / test (push) Failing after 2m49s
CI / docker (push) Has been skipped
Reviewed-on: http://gitea.hansenits.com.au/hits/ExploreDNS/pulls/23
2026-06-08 10:21:08 +00:00
gary 2983846f74 Merge pull request 'docs: add web interface documentation' (#21) from agent/go-expert-developer/17032578 into main
CI / test (push) Failing after 1m30s
CI / docker (push) Has been skipped
Reviewed-on: http://gitea.hansenits.com.au/hits/ExploreDNS/pulls/21
2026-06-08 10:15:10 +00:00
1a0cb1f301 docs: document web interface server in README
CI / test (pull_request) Failing after 3m36s
Add Web Interface section covering:
- How to build the server binary (make build-server / make build-all)
- How to run it with the --addr flag
- What the web UI does and all API endpoints (POST /api/traverse,
  GET /api/traverse/{id}, SSE stream, GET /api/health)
- Request/response shapes and SSE event format

Also update Makefile with build-server and build-all targets, and
expand Project Structure and Development sections to include the
new cmd/server/ and web/api/ packages.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 18:12:06 +10:00
3da28da9a2 Fix NS resolution, deduplicate results, fix FormatRecord duplication
CI / test (pull_request) Failing after 2m31s
Three bugs fixed:

1. processReferral was calling ResolveNS with ref.Name (the query domain,
   e.g. '800adventures.com.au.') instead of ref.Bailiwick (the NS hostname,
   e.g. 'ns-a.hansenits.com.'). This caused the sub-traversal to look up the
   wrong name and always fail to find the nameserver's IP address.

2. In ResolveNS (and Referral.Resolve), child referrals whose name matched the
   visited set were unconditionally skipped. When the .com TLD returns glue A
   records for the target NS alongside its delegation, the child referral has
   addresses and should be queried directly rather than skipped.

3. FormatRecord was prepending the DNS header fields and then appending
   rr.String() which already includes those same fields, producing doubled
   output like 'example.com. 300 IN A example.com. 300 IN A 1.2.3.4'.
   Now simply returns rr.String().

Additional improvements:
- Results section deduplicates terminal results: same NS failure or same
  (NS, answer) pair is merged with summed probability, avoiding the same
  nameserver appearing 15 times with 6.7% each.
- Result lines now include the NS hostname (from Bailiwick) and use the
  compact rdata format, e.g. '33% ns-a.hansenits.com answered with 13.54.63.231'.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 18:07:38 +10:00
43af39dfd7 Add Dockerfiles and CI pipeline for Docker build/push
CI / test (push) Failing after 2m13s
CI / docker (push) Has been skipped
CI / test (pull_request) Failing after 2m44s
CI / docker (pull_request) Has been skipped
- Dockerfile.cli: multi-stage build for exploredns CLI tool
- Dockerfile.web: multi-stage build for the HTTP API/web server
- Both use golang:1.24-alpine builder + alpine:3.21 final image
- CI pipeline docker job builds and pushes to gitea.hansenits.com.au registry on push to main/master

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 17:56:32 +10:00
multica-agent 25e6039bde Improve DNS output: distinguish NS resolution failures from domain errors (#20)
CI / test (push) Failing after 2m19s
2026-06-08 05:59:33 +00:00
multica-agent d6063eb636 feat: DNS host selection - fix code review issues (HAN-400) (#19)
CI / test (push) Failing after 1m58s
2026-06-08 03:25:37 +00:00
multica-agent 93959c9f11 fix: API quality fixes from code review (HAN-398) (#17)
CI / test (push) Failing after 1m21s
2026-06-07 18:52:18 +00:00
multica-agent 2fe8adcfcc feat: web frontend SPA for ExploreDNS (HAN-388) (#18)
CI / test (push) Failing after 1m22s
2026-06-07 18:47:17 +00:00
multica-agent e59597a191 feat: HTTP API server with SSE and SPA serving (HAN-389) (#16)
CI / test (push) Failing after 4m55s
2026-06-07 18:31:28 +00:00
dd667f734c fix: remove duplicate test declarations from PR #12/#13 conflict
CI / test (push) Has been cancelled
Phase 4.2 (PR #12) and test coverage improvement (PR #13) independently
added overlapping test functions. Remove duplicates from PR #13 files:

- internal/dns/iterative_test.go: remove TestExtractNSNames,
  TestExtractNSNamesEmpty, TestIterativeQueryWithExchangeSuccess,
  TestIterativeQueryWithExchangeNilResponse, TestIterativeQueryWithExchangeTCPFallback
  (kept in roots_test.go and query_test.go from PR #12)
- internal/output/coverage_test.go: remove TestRRDataStringDefault,
  TestContainsString, TestCollectUniqueServerIPs, TestNewFormatterNilWriter
  (kept in stats_test.go and formatter_test.go from PR #12)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 04:30:06 +10:00
dbd9322a1b test: merge PR #13 test coverage improvements into main
Resolves merge conflicts between Phase 4.2 comprehensive test suite and
the test coverage improvement branch:
- config_test.go: take PR's better table-driven tests + keep main's extra tests
- coverage_test.go: keep main's Phase 4.2 comprehensive tests

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 04:24:56 +10:00
multica-agent bb3e9d3e36 Merge pull request 'docs: comprehensive documentation (HAN-387)' (#15) from feat/han-387-documentation into main
CI / test (push) Failing after 1m20s
2026-06-07 18:10:22 +00:00
ee20ed51f6 docs: comprehensive documentation for HAN-387
CI / test (pull_request) Failing after 1m19s
- README.md: full project overview, installation, quick start, CLI reference,
  output format descriptions, architecture overview, and dnstraverse comparison
- GoDoc: package-level documentation for traverse, dns, config, output, and
  fingerprint packages
- GoDoc: TraverserConfig and TraversalResult type comments in traverser.go

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 04:05:15 +10:00
45e15297f4 test: improve coverage to >80% on all core packages
CI / test (pull_request) Failing after 2m11s
Add comprehensive test coverage for internal packages:

- internal/config: 66.2% → 98.5%
- internal/dns: 67.8% → 84.3%
- internal/output: 48.8% → 89.1%
- internal/traverse: 56.3% → 86.9%

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 03:57:29 +10:00
multica-agent e6e07941a5 feat: comprehensive test suite (Phase 4.2) (#12)
CI / test (push) Failing after 1m30s
2026-06-07 17:54:15 +00:00
multica-agent fe1afe2a97 Phase 4.1: Error handling, edge cases, and robustness (#11)
CI / test (push) Failing after 2m36s
2026-06-07 17:24:00 +00:00
multica-agent 76f5010a5e feat: implement DNS server fingerprinting (HAN-384) (#10)
CI / test (push) Has been cancelled
2026-06-07 16:56:51 +00:00
multica-agent 35be7539b4 Merge pull request 'feat: implement output formatting and display (HAN-383)' (#9) from agent/go-expert-developer/f3b1b7cf into main
CI / test (push) Has been cancelled
2026-06-07 16:40:00 +00:00
8e7beacc22 fix: address code review issues on PR #9
CI / test (pull_request) Waiting to run
- gofmt main.go to fix tab indentation in main() body
- stats.go ComputeSummary: return nil when Answers and ByType are empty
- dns/types.go: remove duplicate ParseQueryType (dead code)
- formatter.go: log hook errors to stderr when Debug > 0; add Debug to Config
- text.go referralID: remove redundant depth==0 branch
- text.go writeServers: remove version lookup placeholder string

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 02:32:58 +10:00
Gary Hansenandmultica-agent 5a54834c5f feat: implement output formatting and display (HAN-383)
CI / test (pull_request) Failing after 2m2s
Add text and JSON formatters with real-time progress via traverser hooks,
summary statistics, and CLI integration for --show-* and --json flags.

Co-authored-by: multica-agent <github@multica.ai>
2026-06-08 02:21:13 +10:00
multica-agent 876542b2de feat: implement CLI flags and configuration handling (HAN-382) (#8)
CI / test (push) Failing after 3m57s
2026-06-07 16:08:39 +00:00
gary feb5c68b39 feat: implement referral resolution for nameserver names without glue records (HAN-381) (#7)
CI / test (push) Failing after 2m58s
Co-authored-by: Hansen IT Solutions <gary@hansenits.com>
Co-committed-by: Hansen IT Solutions <gary@hansenits.com>
2026-06-07 06:09:49 +00:00
gary 39529dacbb feat: implement traversal engine (HAN-380) (#6)
CI / test (push) Failing after 1m26s
Co-authored-by: Hansen IT Solutions <gary@hansenits.com>
Co-committed-by: Hansen IT Solutions <gary@hansenits.com>
2026-06-06 03:41:14 +00:00
gary 194bc97526 Merge pull request 'feat: implement CachingResolver with per-server query caching' (#5) from agent/go-expert-developer/f5bcb2fe into main
CI / test (push) Failing after 3h13m21s
Reviewed-on: http://gitea.hansenits.com.au/hits/ExploreDNS/pulls/5
2026-06-05 06:05:01 +00:00
Garyandmultica-agent db3ad498f6 feat: implement CachingResolver with per-server query caching
CI / test (pull_request) Failing after 3h13m39s
Add Resolver interface, BasicResolver, and CachingResolver to internal/dns.

CachingResolver wraps any Resolver with an in-memory cache keyed by
(server IP, name, type, class). Cache entries respect DNS TTL from
responses, falling back to a configurable default TTL. Thread-safe
using sync.RWMutex. Includes Len, Clear, and PurgeExpired methods
for cache management.

Closes HAN-379 (Phase 2.2).

Co-authored-by: multica-agent <github@multica.ai>
2026-06-05 15:58:46 +10:00
gary 6a3cdb9abe Merge pull request 'feat: implement root server discovery (HAN-378)' (#4) from agent/go-expert-developer/beb90b99 into main
CI / test (push) Has been cancelled
Reviewed-on: http://gitea.hansenits.com.au/hits/ExploreDNS/pulls/4
2026-06-05 05:52:28 +00:00
Garyandmultica-agent 924fcbd43a feat: implement root server discovery (HAN-378)
CI / test (pull_request) Failing after 1m17s
Add RootServer struct and DiscoverRoots function that queries the local
resolver for NS records of the root zone, resolves each root name to
A/AAAA addresses, and returns a list of RootServer structs.

Supports:
- Default: discovers a single root server from local resolver
- --root-server override to target a specific root server
- --all-root-servers to discover all 13 root servers
- --root-aaaa flag to include IPv6 addresses

Includes unit tests for all helper functions and integration tests
that skip gracefully when no resolver is available.

Co-authored-by: multica-agent <github@multica.ai>
2026-06-05 15:44:59 +10:00
gary 42a37adbee Merge pull request 'feat: add DNS query/response layer with miekg/dns' (#3) from agent/go-expert-developer/ad0c58a4 into main
CI / test (push) Has been cancelled
Reviewed-on: http://gitea.hansenits.com.au/hits/ExploreDNS/pulls/3
2026-06-05 05:37:38 +00:00
Gary 2338abd14f Merge remote-tracking branch 'origin/main' into agent/go-expert-developer/8e316e05
CI / test (pull_request) Failing after 3h12m56s
# Conflicts:
#	go.mod
#	go.sum
2026-06-05 15:34:57 +10:00
Garyandmultica-agent 596f0da9e1 chore: remove GitHub Actions CI workflow (replaced by Gitea Actions)
CI / test (push) Has been cancelled
Co-authored-by: multica-agent <github@multica.ai>
2026-06-05 15:33:45 +10:00
gary 2df1bd1830 Merge pull request 'ci: add Gitea Actions workflow for unit tests' (#2) from agent/gitea-repo-manager/80a0aac3 into main
CI / test (push) Has been cancelled
Reviewed-on: http://gitea.hansenits.com.au/hits/ExploreDNS/pulls/2
2026-06-05 05:30:38 +00:00
Garyandmultica-agent 33ef99aca3 ci: add Gitea Actions workflow for Go unit tests
CI / test (pull_request) Failing after 3h10m14s
Co-authored-by: multica-agent <github@multica.ai>
2026-06-05 15:27:53 +10:00
gary c16b153a6e Merge pull request 'feat: Go project scaffolding - module init, directory structure, CLI skeleton, Makefile, CI' (#1) from agent/go-expert-developer/32986165 into main
CI / build (push) Has been cancelled
Reviewed-on: http://gitea.hansenits.com.au/hits/ExploreDNS/pulls/1
2026-06-05 05:22:24 +00:00
Garyandmultica-agent fce7920611 feat: add DNS query/response layer with miekg/dns
Phase 1.2 implementation:

- internal/dns/types.go: DNS record type constants (A, AAAA, NS, CNAME, SOA,
  MX, TXT, SRV, PTR, ANY) with QNameType helper and EDNS0 defaults
- internal/dns/query.go: Query/QueryWithExchange with UDP, configurable
  EDNS0 buffer size, TCP fallback on truncation, always-TCP mode, configurable
  retries with timeout, context support, and injectable ExchangeFunc for testing
- internal/dns/decode.go: Response classification (answer, referral, NODATA,
  NXDOMAIN, SERVFAIL), CNAME chain extraction with dedup, truncation/RCODE
  detection, and section extraction utilities

32 unit tests covering all acceptance criteria.

Co-authored-by: multica-agent <github@multica.ai>
2026-06-05 15:14:56 +10:00
Garyandmultica-agent 8090182e1a feat: Go project scaffolding - module init, directory structure, CLI skeleton, Makefile, CI
CI / build (pull_request) Failing after 3h1m44s
Co-authored-by: multica-agent <github@multica.ai>
2026-06-05 15:08:29 +10:00
gary afdf7df891 Initial commit 2026-06-05 04:49:39 +00:00