# Changelog All notable changes to this crate are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/). ## 0.1.0 — 2026-04-13 Initial release. The DongLoRa wire-protocol types and COBS framing, extracted from the firmware so the firmware, `client-rs`, `mux-rs`, and `bridge` can share one definition. ### Added - Wire types: `Command`, `Response`, `RadioConfig`, `Bandwidth`, `ErrorCode`, plus the `MAX_PAYLOAD`, `RADIO_CONFIG_SIZE`, `TX_POWER_MAX`, and `PREAMBLE_DEFAULT` constants. Fixed-width little-endian on the wire — see the firmware repo's `PROTOCOL.md`. - `framing` module: streaming `CobsDecoder` plus `cobs_encode_response`, with a `MAX_FRAME` constant sized to fit any valid `Response` after COBS overhead. - Cargo features: `defmt` (default, derives `defmt::Format` on public enums) and `std` (off, opt-in for host-side `Debug` niceties). - Test surface: 23 proptest properties (~1.13M cases per run), 4 cargo-fuzz targets, 16 canonical wire-byte vectors anchored to the spec, 6 mutation-killers. Mutation testing reaches 89/89 viable mutants under both feature configurations (3 provably-equivalent mutants documented and excluded). Miri runs clean on the library and the canonical-vector tests. - `forbid(unsafe_code)` at the crate root. - GitHub Actions CI (test/clippy/fmt/doc/deny/miri/fuzz/mutants).