# Changelog
## v0.6.0-alpha.0 (unreleased)
Modernization pass: core engine rebuilt on maintained crates, documentation
overhauled. No breaking CLI changes.
### Engine
- Replaced archived `serde_cbor` 0.11 with `cbor2` 1.1 — a full RFC 8949
implementation with tag, bignum, and deterministic-encoding support.
- `inspect` now emits Concise Diagnostic Notation (RFC 8949 §8) instead of
Rust's `{:?}` debug format. Byte strings render as `h'...'`, tagged bignums
render as their integer value, output is standard and compact.
- `inspect` is fully streaming: reads one CBOR item at a time and writes
diagnostic output directly to the writer via a `fmt::Write`→`io::Write`
adapter. No input buffering, no per-item allocation.
- `import`/`export` CBOR paths are streaming end-to-end (no regression from
0.5.0).
### Dependencies
- `clap` 4.4 → 4.6
- `serde_json` 1.0.111 → 1.0.x
- Added explicit `serde` dependency (previously transitive).
- Replaced deprecated `serde_yaml` 0.9 with `yaml_serde` 0.10 (the official
YAML-org maintained fork, published as crate `yaml_serde`, aliased to
`serde_yaml` in source via the `package` attribute). Drop-in API.
- `toml` held at 0.8 (1.x available; deferred to avoid semver churn here).
### Build / packaging
- Renamed `.cargo/config` → `.cargo/config.toml` (removes deprecation warning).
- Corrected `repository`/`homepage`/`documentation` URLs in `Cargo.toml` to
point at the live repo.
- Added `keywords` and `categories` for crates.io discoverability.
- Fixed `install-cbor-deb.sh` printing an empty architecture in its final
message (undefined `$arch` → `$deb_arch`).
### Documentation
- Rewrote `README.md`: usage-oriented structure, CDN output table, library
section, standards references, streaming/multi-format examples.
- Fixed stale relative paths in `examples/test.sh` left over from the
pre-0.5.0 monorepo layout.
### QA pass
- **Library functions no longer call `process::exit`.** `import_from_reader`,
`export_from_reader`, and `inspect_from_reader` now return `anyhow::Result`
so callers can recover from errors. CLI error handling uses
`anyhow::Context` to attach file paths.
- **Removed `traits` module** (`WriteStr` trait) — unnecessary abstraction
for a single `println!` call site.
- **`get_missing_files` accepts `&[PathBuf]`** instead of `&Vec<PathBuf>`.
- **Removed `get_path_str`** — panicked on non-UTF-8 paths. Inlined
`to_string_lossy()` at call sites.
- **Flattened `get_format_by_file_extension`** with `and_then` chaining.
- **Added `.yml` extension support** for YAML auto-detection.
- **`--pretty` flag** on `export` for human-readable JSON output.
- **Proper delimiter unescaping** — `\n`, `\t`, `\r`, `\0`, `\\` are now
interpreted via a single-pass loop instead of `str::replace`.
- **Verbose output** (`-v`, `-vv`) now writes to stderr instead of stdout.
- **Replaced `common-testing` dev-dependency** with standard Rust test
assertions and table-driven tests. Fixed a flaky missing-files test by
using `tempfile`.
- **Added 16 integration tests** (`tests/cli_tests.rs`) covering roundtrips,
stdin, multi-file, custom delimiters, YAML document separators,
`--pretty`, error cases, `.yml` detection, and delimiter unescaping.
## v0.5.0
- Removed monorepo/workspace to comply with Homebrew standards.
## v0.4.0
- Added tests and improved README.