v0.6.0 — API audit, NabError, structural refactoring
Highlights
Typed error hierarchy — NabError with 9 semantic variants replaces bare anyhow::Error at public API boundaries. Consumers can now match on InvalidUrl, SsrfBlocked, ProviderError, AuthError, etc.
Structural refactoring — 5 monolithic files (up to 2172 LOC) decomposed into focused submodules. No file exceeds 800 LOC. Public API surface reduced (13 internal re-exports removed).
Safety hardening — ~10 unwrap()/expect() calls replaced with proper error propagation. UTF-8 truncation panics eliminated.
What's New
NabErrortyped error hierarchy (9 variants)- Config structs replace positional parameters across all CLI commands
- 6 shared helpers consolidated in
cmd/mod.rs
Breaking Changes (Library API)
- Public functions now return
Result<T, NabError>instead ofResult<T, anyhow::Error> - 13 internal re-exports removed from
lib.rs - SSRF validation returns
NabError::SsrfBlockedinstead of generic error
Bug Fixes
- Silent TOML field mismatch in
concurrent_fetch_custom_item_limit - UTF-8 truncation panics across cmd/ layer
- SPA status messages moved from stdout to stderr
Install
cargo install nab
# or
brew install nab
# or
cargo binstall nabFull changelog: https://github.com/MikkoParkkola/nab/blob/main/CHANGELOG.md