v0.27.0
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_valueswasVec<String>(e.g.["1.2.3.4"]). It is nowVec<ConsensusValue>where each entry is{"type": "A", "value": "1.2.3.4"}so consumers no longer have to cross-referencerecord_typeto know what kind of record a value represents.inconsistencieswasVec<String>of pre-formatted lines ("Quad9 (9.9.9.9): 5.6.7.8 vs consensus: 1.2.3.4"). It is nowVec<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"]}. TheDisplayimpl reproduces the old format (now[A]-tagged) for human-readable logs.
What changed
seer-core/src/dns/propagation.rs: newConsensusValueandInconsistencystructs (bothSerialize/Deserialize/Display);analyze_resultsbuilds structured records and stops emitting synthetic"No servers responded"inconsistencies (that state is already represented byservers_responding == 0andunreachable_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.