Skip to content

v0.29.0

Choose a tag to compare

@TheZacillac TheZacillac released this 28 May 17:26
· 143 commits to main since this release

Structural cleanup of the DNS propagation module: the 1k-line propagation.rs is split into the canonical seer module-folder layout, and NS-record-specific propagation data is consolidated behind a single Option<NameserverDetails> instead of leaking across three top-level fields and one per-ServerResult field.

Breaking changes

PropagationResult JSON shape changes for /propagation/* endpoints and the equivalent MCP / Python results. Three NS-only fields are replaced by one optional nameserver_details object; ServerResult no longer carries nameserver_ips.

Before (NS lookup) After (NS lookup)
resolved_ips: { "ns1.example.com.": ["1.2.3.4"] } nameserver_details.consensus: { "ns1.example.com.": ["1.2.3.4"] }
nameserver_inconsistencies: [ ... ] nameserver_details.inconsistencies: [ ... ]
results[i].nameserver_ips: { ... } nameserver_details.per_vantage[<server_ip>]: { ... }

Non-NS lookups omit nameserver_details from the serialized form entirely (was three empty collections on the wire).

What changed

  • seer-core/src/dns/propagation.rspropagation/{types,checker,analysis,servers}.rs: the 1096-line file is split into the canonical seer module layout used by whois/, rdap/, and dns/dnssec.rs. Largest resulting file is 411 lines.
  • seer-core/src/dns/propagation/types.rs: new NameserverDetails { consensus, per_vantage, inconsistencies } struct holds all NS-specific propagation data behind a single optional field. ServerResult is now a pure generic shape.
  • seer-core/src/dns/propagation/checker.rs: resolve_nameserver_details(&[ServerResult]) -> Option<NameserverDetails> is a pure transformation — no more &mut [ServerResult] borrow. query_server no longer initializes empty NS-only state on every result.
  • seer-core/src/dns/propagation/analysis.rs: analyze_results returns an AnalysisOutcome struct (was a 4-tuple). build_nameserver_consensus / build_nameserver_inconsistencies take the per-vantage map as an explicit argument instead of reading from ServerResult.
  • seer-core/src/output/grouping.rs (new): shared render_grouped helper consolidates the "group items by key, collapse subheader when one group" template that was duplicated across both human.rs and markdown.rs propagation sections.
  • seer-core/src/output/{human,markdown}.rs: hoist let ns_details = result.nameserver_details.as_ref() once and use it for both the inconsistency block and the per-vantage IP lookup in the per-region results.

Health

cargo test --workspace: 467 unit tests + 18 doc-tests + 2 lib tests pass. cargo clippy --workspace -- -D warnings clean. cargo fmt --check clean. CI green on Format, Clippy, Check, Security Audit, and Test (ubuntu/macos/windows).