hornet-bind9 0.1.0

Parse, write, and validate BIND9 named.conf configuration files and DNS zone files
Documentation
# Changelog

All notable changes to Hornet are documented here.

---

## [0.1.0] — Initial release

### Added

- Parse `named.conf` from a string or file path (`parse_named_conf`, `parse_named_conf_file`)
- Parse DNS zone files from a string or file path (`parse_zone_file`, `parse_zone_file_from_path`)
- Write ASTs back to valid BIND9 text (`write_named_conf`, `write_zone_file`)
- `WriteOptions` with configurable indent, keyword style, class emission, and statement spacing
- Semantic validation for `named.conf` (`validate_named_conf`) covering:
    - Undefined ACL references
    - Duplicate zone declarations
    - Primary zones without `file` directives
    - Secondary zones without `primaries` directives
    - Forward zones without `forwarders`
    - DNSSEC/recursion conflicts
    - Unrecognised key algorithms
    - Invalid CIDR prefixes
    - Empty key secrets
    - Undefined logging channels
    - Zone name length violations
- Semantic validation for zone files (`validate_zone_file`) covering:
    - Missing or duplicate SOA records
    - Missing NS records
    - TXT chunk/total size limits
    - Null MX detection
    - Non-standard CAA tags
- Support for 9 `named.conf` statement types: `options`, `zone`, `view`, `acl`, `logging`,
  `controls`, `key`, `primaries`/`masters`, `server`, `include`, unknown blocks
- Support for 24+ DNS record types: A, AAAA, NS, MX, SOA, CNAME, PTR, HINFO, TXT, SRV, CAA,
  SSHFP, TLSA, NAPTR, LOC, DS, DNSKEY, RRSIG, NSEC, NSEC3, NSEC3PARAM, HTTPS, SVCB,
  ANAME/ALIAS, TYPE fallback
- `$ORIGIN`, `$TTL`, `$INCLUDE`, `$GENERATE` zone file directives
- Optional `serde` feature flag (adds `Serialize`/`Deserialize` to all AST types)
- `hornet-cli` binary with `parse`, `zone`, `check`, `check-zone`, `fmt`, `convert` subcommands
- Rich parse error reporting via [miette]https://github.com/zkat/miette with source spans
- Legacy keyword normalisation (`master``primary`, `slave``secondary`)

---

## Versioning

Hornet follows [Semantic Versioning](https://semver.org/):

- **Patch** (`0.1.x`) — Bug fixes and documentation; no breaking changes
- **Minor** (`0.x.0`) — New record types, statement fields, or validation rules; no breaking changes
- **Major** (`x.0.0`) — Breaking changes to the public API or AST shape