dig-ip 0.1.3

Canonical DIG Network address-family discovery + IPv6-first happy-eyeballs (RFC 8305) dial: local IPv6/IPv4 stack detection, family-tagged peer-candidate aggregation, and the local-and-peer family-intersection dial order that never mis-dials a family the local host or the peer lacks.
Documentation
# Contributing to dig-ip

Thanks for your interest in improving dig-ip. This is the canonical DIG Network implementation
of IPv6-first, IPv4-fallback peer communication (CLAUDE.md §5.2) — a single ecosystem implementation
that replaces three drifting copies in other crates.

## Prerequisites

- [Rust]https://rustup.rs, pinned to **1.75.0** via `Cargo.toml` (`rust-version`).

## Build & test

```sh
# build the crate
cargo build

# run the full test suite
cargo test
```

## The gate (must pass before a PR is merged)

CI runs these on every PR (`.github/workflows/ci.yml`); run them locally first:

```sh
cargo fmt --all --check
cargo clippy --all-targets -- -D warnings
cargo build --release
cargo doc --no-deps
cargo llvm-cov nextest --all --retries 2 --fail-under-lines 80 --lcov --output-path lcov.info
```

The coverage gate is **≥80% lines**. The test suite is deterministic (no real sockets — the
dial itself is a closure supplied by the caller), so every path is exercised by the integration
tests.

## Commit conventions

- Use clear, imperative commit subjects (e.g. `feat: …`, `fix: …`, `docs: …`, `test: …`, `refactor: …`).
  Conventional Commits style: `type(optional scope): summary`.
- **Add a `Co-Authored-By:` trailer** if Claude Code helped author the commit:
  ```
  Co-Authored-By: Claude <noreply@anthropic.com>
  ```
- Keep one logical change per commit where practical.

## Versioning

This is a library crate published to crates.io. Every PR must bump the version in `Cargo.toml`
and `Cargo.lock` (`[package] version` fields). Use SemVer:
- **patch**: bugfix or docs-only change
- **minor**: new capability (backwards compatible)
- **major**: breaking change (removed/renamed API, wire/format break)

## Pull requests

1. Branch from `main`.
2. Make the gate green locally (run the commands above).
3. Open a PR with a clear description of the change and its rationale; reference any related issue.
4. Keep the diff focused.
5. A PR stays in **Draft** until all review threads are resolved and the gate verdicts have returned.