v0.1.3 — cross-address-family mapping classification fix
Closes #14. First 3-segment-semver tag after the v0.1.2.x patch incident — go install ...@v0.1.3 works correctly via the Go module proxy.
Fixed
- Cross-address-family probe sets no longer produce a wrong ADM/symmetric verdict. Previously, mixing IPv6-resolved hostname servers (e.g.,
stun.l.google.com) with IPv4-literal servers (e.g., a self-hosted coturn) compared mapped endpoints across address families and reported ADM because the endpoints differed by construction (each family observes its own NAT). The classifier now groups successes by address family, classifies each group independently, and combines under the rule "Unknown is absence of information, not disagreement": matching verdicts win, two confident verdicts that differ produce Unknown, a confident verdict beats Unknown from the other group.
Added
- New warning value
mixed_address_family_probesinwarnings[]. Emitted whenever successful probes span both IPv4 and IPv6 address families. Additive to the JSON schema.
Migration
JSON consumers checking nat_type == "ADM" for cross-family probe sets will see "Unknown" on the same input under v0.1.3 — the previous verdict was incorrect. Forecast-checking consumers (webrtc_forecast.direct_p2p) are mostly unaffected: the dominant cross-family disagreement case stays exit 1 (Unknown → 1, was ADM → 1). The verdict-flip case (genuinely agreed EIM across families, previously ADM, now EIM → exit 0) is the bug being fixed.
Install
brew tap 1mb-dev/tap
brew upgrade natcheck # if already installed
brew install natcheck # fresh installor
go install github.com/1mb-dev/natcheck/cmd/natcheck@v0.1.3