v0.16.0
0.16.0
Breaking release. Focus: panic-free core, arithmetic discipline, typed errors, and a crate-wide discipline pass over attributes, docs, and test hygiene.
See CHANGELOG.md for the full Added / Changed / Fixed / Internal breakdown.
Highlights
- Checked
Decimalhelpers (d_add/d_sub/d_mul/d_div/d_sum/d_sum_iter) route every monetary-path kernel through overflow-tagged arithmetic. NonFinite { context, value }guards on everyf64 → Decimalboundary inside pricing, Greeks, volatility, and simulation.- Step / simulation counts promoted to
NonZeroUsize(breaking). - Crate-level
#![deny(missing_docs, rustdoc::broken_intra_doc_links, clippy::indexing_slicing)]with scoped, documented escapes. #[tracing::instrument]on public hot paths;#[cold] #[inline(never)]on every error constructor.- Deterministic RNG helper (
utils::deterministic_rng) plus put-call parity / CRR convergence / Greek sanity regression tests.
Migration
Most breakage comes from:
- Functions returning
Result<T, concrete_error>where they previously panicked — wrap call sites with?. steps/simulationsarguments now takeNonZeroUsize— useoptionstratlib::nz!(N)orNonZeroUsize::new(N).ok_or(..)at the boundary.unsafeblocks removed in favour of typed guards.