Skip to content

v0.27.0

Choose a tag to compare

@TheZacillac TheZacillac released this 27 May 16:11
· 152 commits to main since this release

Tag propagation consensus and inconsistencies with their record type (breaking change to the result shape).

Breaking changes

PropagationResult.consensus_values and PropagationResult.inconsistencies on /propagation/* and the equivalent MCP tool changed shape. API/MCP clients must update their deserialization.

  • consensus_values was Vec<String> (e.g. ["1.2.3.4"]). It is now Vec<ConsensusValue> where each entry is {"type": "A", "value": "1.2.3.4"} so consumers no longer have to cross-reference record_type to know what kind of record a value represents.
  • inconsistencies was Vec<String> of pre-formatted lines ("Quad9 (9.9.9.9): 5.6.7.8 vs consensus: 1.2.3.4"). It is now Vec<Inconsistency> where each entry is {"type": "A", "server_name": "Quad9", "server_ip": "9.9.9.9", "values": ["5.6.7.8"], "consensus": ["1.2.3.4"]}. The Display impl reproduces the old format (now [A]-tagged) for human-readable logs.

What changed

  • seer-core/src/dns/propagation.rs: new ConsensusValue and Inconsistency structs (both Serialize/Deserialize/Display); analyze_results builds structured records and stops emitting synthetic "No servers responded" inconsistencies (that state is already represented by servers_responding == 0 and unreachable_servers).
  • seer-core/src/output/human.rs: consensus values and inconsistencies are grouped by record type with the per-type subheader collapsed when only one type is present (the common case today). Three new tests lock in single-type, multi-type, and typed-inconsistency rendering.
  • seer-core/src/output/markdown.rs: same grouping treatment so the human and markdown formatters tell the same story.

Health

458 unit tests pass; cargo clippy --workspace -- -D warnings and cargo fmt --all -- --check clean; CI green across Format, Clippy, Check, Security Audit, and Test on ubuntu/macos/windows.