# Changelog - 0.2.x
## [0.2.2] - 2026-03-11
### Added
- Expose determinant error bounds (det_errbound) [`0643bcd`](https://github.com/acgetchell/la-stack/commit/0643bcdd5bd3634c99951acfe68152fd444c2d3f)
Expose the internal `det_errbound()` function and error coefficients
as public API to enable consumer-side adaptive-precision logic for
geometric predicates.
- Expose det_errbound without requiring exact feature [`d96f676`](https://github.com/acgetchell/la-stack/commit/d96f676bee8436bde622addcf3ac48c24111da75)
Make `det_errbound()` and error coefficients available without the
`exact` feature, as they use pure f64 arithmetic and don't require
BigRational dependencies. This enables consumers to build custom
adaptive-precision logic without pulling in num-bigint/num-rational.
### Dependencies
- Bump actions/setup-node from 6.2.0 to 6.3.0 [`0f2fc34`](https://github.com/acgetchell/la-stack/commit/0f2fc348b06d72476610821c77945c265207ad05)
- Bump taiki-e/install-action from 2.68.20 to 2.68.22 [`c3e49bd`](https://github.com/acgetchell/la-stack/commit/c3e49bdd75e3ca26117942da243dac1ee59eb7a1)
## [0.2.1] - 2026-03-08
### ⚠️ Breaking Changes
- Return Result from det_sign_exact, rename NonFinite field
### Changed
- Add LDLT NonFinite coverage tests; update README example [`d3b7012`](https://github.com/acgetchell/la-stack/commit/d3b7012c80148e319cf34e3e6c3461177bdcd0f5)
- Add tests for L-multiplier overflow and trailing submatrix overflow
during LDLT factorization
- Add test for forward substitution overflow in LDLT solve_vec
- Update README det_sign_exact example for Result API (.unwrap())
- Update changelog generation and release metadata (internal)
[`8f97a0f`](https://github.com/acgetchell/la-stack/commit/8f97a0f060dae57550ec73513983c43c79525696)
Refine the git-cliff template to explicitly label breaking changes and
update the README to reflect the v0.2.1 release. Reorganize justfile
recipes for improved maintenance.
### Fixed
- [**breaking**] Return Result from det_sign_exact, rename NonFinite field
[`717d5cf`](https://github.com/acgetchell/la-stack/commit/717d5cf13af77764e8941004cdf2c153c260690f)
## [0.2.0] - 2026-03-07
### Merged Pull Requests
- Add det_sign_exact() behind "exact" feature flag [#33](https://github.com/acgetchell/la-stack/pull/33)
- Closed-form determinant for D=1–4 [#27](https://github.com/acgetchell/la-stack/pull/27)
### Added
- Add det_sign_exact() behind "exact" feature flag [#33](https://github.com/acgetchell/la-stack/pull/33)
[`d45572a`](https://github.com/acgetchell/la-stack/commit/d45572a05488dbcb73b66a4b36a0e0cfc4656ca9)
Two-stage adaptive-precision determinant sign for Matrix<D>:
- Stage 1 (D ≤ 4): f64 fast filter via det_direct() + Shewchuk-style
error bounds against the matrix permanent. Resolves sign without
allocating for well-conditioned inputs.
- Stage 2: exact Bareiss algorithm (fraction-free Gaussian elimination)
in BigRational for guaranteed-correct sign.
### Changed
- Bump the dependencies group with 2 updates [`ad4b505`](https://github.com/acgetchell/la-stack/commit/ad4b505ab5a5ec4c2c960a07f4d43553877828cb)
- Rename det benchmark and add black_box to tests [`40cc2b7`](https://github.com/acgetchell/la-stack/commit/40cc2b7bde49cdd0a2c7a247fb045447447d19df)
Rename "la_stack_det_direct" benchmark to "la_stack_det" since it
measures the public det() API which falls back to LU for D≥5.
Add black_box to det_direct known-value tests to prevent the compiler
from constant-folding the const fn at compile time, ensuring the
function body is exercised at runtime for more robust coverage.
- Clarify det_direct D=0 support and fix example description [`1308612`](https://github.com/acgetchell/la-stack/commit/130861273dcd9b459a5c1891656e686a6760756c)
Update the README to note that det_direct() supports D=0 using the
empty-product convention (returning 1.0). Correct the doc comment in
the 4x4 example matrix, which was inaccurately described as being
Hilbert-like. These are non-functional documentation refinements.
- Polish exact feature — docs, CI, example, review fixes [`abfa297`](https://github.com/acgetchell/la-stack/commit/abfa297d1e8e771a60d1cc9a2a9227011876a965)
- Add exact_sign_3x3 example (near-singular 3×3 with 2^-50 perturbation)
- Add docs.rs metadata to build published docs with the exact feature
- Add non-finite assert guard in det_sign_exact fast filter
- Add --features exact to Windows CI job and doc-check recipe
- Add --features exact to tarpaulin coverage runs
- Update README: zero-dep-by-default wording, scalar types section,
example descriptions, design goals, references wording
- Update Cargo.toml deps comment
- Remove redundant clippy-exact from ci target
- Make Codacy analysis non-blocking on pull requests (internal)
[`ecd0a30`](https://github.com/acgetchell/la-stack/commit/ecd0a30d1e580ae47f215b811a60110b8f94223a)
Allow the Codacy analysis step to fail without blocking CI on pull
requests, mitigating the impact of transient service outages. Ensures
that subsequent SARIF processing steps always execute and surfaces a
warning when the analysis fails.
- Harden Codacy CI and expand exact feature tests (internal) [`d911fcc`](https://github.com/acgetchell/la-stack/commit/d911fcc51c02807e91372e1db94aaaa196d6ccb9)
Update the Codacy workflow to handle missing project tokens gracefully
on pull requests and clarify SARIF validation steps. Add comprehensive
unit tests for the internal `det_errbound` and `bareiss_det` functions
to ensure logic correctness across various matrix dimensions and edge
cases like singular matrices.
- Expand det_sign_exact tests for large matrices (internal) [`2205f12`](https://github.com/acgetchell/la-stack/commit/2205f12a94743c49333c6f6a7228edde21a0d74f)
Add unit tests for dimensions $D \ge 5$ to exercise the Bareiss algorithm path. Ensure non-finite entries trigger expected panics and verify pivoting logic
when the fast filter is bypassed.
- Improve release safety and consolidate error handling [`0ef2b94`](https://github.com/acgetchell/la-stack/commit/0ef2b94798f5fa530a09d92d0d117d42a3bc2b8d)
Ensure cargo publish uses the lockfile for reproducible releases.
Refactor the tag_release script to use a single exception handler
for various process and validation failures.
- Update developer docs and optimize release tagging logic [`8aa129a`](https://github.com/acgetchell/la-stack/commit/8aa129ace22919510022a58def30b85c2639551d)
Update AGENTS.md and scripts/README.md with details on feature flags,
code structure, and release workflows. Improve the efficiency of
changelog section extraction in tag_release.py by using slice-based
trimming.
- Improve internal release scripts and expand test coverage [`5eb5064`](https://github.com/acgetchell/la-stack/commit/5eb5064b46b8cbe408ddc958b86bf01dfee1d62c)
Refine SemVer regex to support digit-prefixed alphanumeric prerelease
identifiers. Ensure GitHub anchors match exact version headers to avoid
stable/prerelease collisions. Add unit tests for changelog
post-processing and enable type-checking for the release toolset.
### Dependencies
- Bump taiki-e/install-action from 2.67.17 to 2.67.30 [`26f31c4`](https://github.com/acgetchell/la-stack/commit/26f31c42faf4067604e8f04ee17c6db03c63ccf6)
- Bump astral-sh/setup-uv from 7.2.0 to 7.3.0 [`f5a3fdd`](https://github.com/acgetchell/la-stack/commit/f5a3fddb8d17e4ff9b7c0dae130074f7edc12e18)
- Bump taiki-e/install-action from 2.67.30 to 2.68.7 [`4ec8732`](https://github.com/acgetchell/la-stack/commit/4ec87329f6e4a41e3dbe4e3c69c824282312bfeb)
- Bump astral-sh/setup-uv from 7.3.0 to 7.3.1 [`8d584ee`](https://github.com/acgetchell/la-stack/commit/8d584ee25c18496a181e46e60c4d2d9242aa7886)
- Bump taiki-e/install-action from 2.68.7 to 2.68.15 [`62a0f39`](https://github.com/acgetchell/la-stack/commit/62a0f39df68109c9849d98d8b5f199311295c392)
- Bump actions/upload-artifact from 6.0.0 to 7.0.0 [`d69f150`](https://github.com/acgetchell/la-stack/commit/d69f150b30374150786dd8dde493e24c48eec1ba)
- Bump actions-rust-lang/setup-rust-toolchain from 1.15.2 to 1.15.3
[`58c47f8`](https://github.com/acgetchell/la-stack/commit/58c47f804af43903867a39616fb40a4792e48b89)
### Documentation
- Add det_direct example, hoist 4×4 minors, update docs [`159d04e`](https://github.com/acgetchell/la-stack/commit/159d04edfb4c480d6551b970bea3bcae5cdbfff8)
- Add examples/const_det_4x4.rs showing compile-time 4×4 determinant
- Hoist 6 unique 2×2 minors in D=4 path (was computing 12, 6 duplicated)
- Fix det_direct doc to include D=0 (empty product → 1.0) with doctest
- Add const fn design goal and compile-time determinants section to README
- Update AGENTS.md with det_direct and new example
- Add const_det_4x4 to justfile examples recipe
### Fixed
- Harden tag_release and add release docs [`9ed8915`](https://github.com/acgetchell/la-stack/commit/9ed8915e992728ebc5bf53988a97a4de64f8dae3)
Fix three bugs in tag_release.py:
- _github_anchor now matches github-slugger (strips brackets, removes
non-alphanumeric punctuation, replaces whitespace with hyphens)
- Tag deletion deferred until after changelog extraction succeeds,
preventing orphaned tag loss on validation failure
- Force push instruction emitted when --force flag is used
Add docs/RELEASING.md with step-by-step release workflow (version
bump, changelog generation, benchmarks, tagging, crates.io publish).
Add CHANGELOG.md reference to README.md design goals section.
### Maintenance
- Replace cspell with typos-cli, bump MSRV to 1.94.0 [`6db12be`](https://github.com/acgetchell/la-stack/commit/6db12bebdc332f93f9663c0c0be8e785ab449fa6)
Spell checking:
- Replace cspell (Node.js) with typos-cli (Rust) for spell checking
- Add typos.toml with domain-specific allowlist (author names, math terms)
- Delete cspell.json (107 lines of word dictionary no longer needed)
- Update justfile spell-check recipe to use typos on modified files
- Add _ensure-typos helper and typos-cli to setup-tools install/verify
- Update CI to install typos-cli via taiki-e/install-action instead of
npm cspell
- Add changelog tooling (git-cliff + tag script) [`5475651`](https://github.com/acgetchell/la-stack/commit/547565142a374d6a7fed432dd6dbaa8b24cf98a1)
Add git-cliff-based changelog generation and a Python tag-release
script, replacing the need for the heavier changelog_utils approach
used in delaunay.
New files:
- cliff.toml: Keep a Changelog template with commit parsers for
mixed commit history, PR/commit link rewriting via preprocessors
- scripts/tag_release.py: CLI for annotated tag creation with semver
validation, changelog section extraction, 125KB size limit handling
- scripts/subprocess_utils.py: safe subprocess wrappers (ported from
delaunay)
- scripts/postprocess_changelog.py: strips trailing blank lines from
generated output
### Performance
- Closed-form determinant for D=1–4 [#27](https://github.com/acgetchell/la-stack/pull/27)
[`a8344e5`](https://github.com/acgetchell/la-stack/commit/a8344e5d14a63d3bafd1b4c285e23f71a296fa6a)
Add `const fn det_direct()` using FMA-based cofactor expansion for
dimensions 1–4, bypassing LU factorization entirely. `det()` now
dispatches through the closed-form path first, falling back to LU
only for D≥5.
- D=2: single mul_add (ad - bc)
- D=3: cofactor expansion with 3 FMA minors
- D=4: inline 3×3 sub-determinants (closures not const-compatible)
- Non-finite results return LaError::NonFinite to preserve error contract
Also adds release profile tuning (lto="fat", codegen-units=1) and
a det_direct benchmark alongside the existing LU-based det benchmark.
[0.2.2]: https://github.com/acgetchell/la-stack/compare/v0.2.1...v0.2.2
[0.2.1]: https://github.com/acgetchell/la-stack/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/acgetchell/la-stack/compare/v0.1.3...v0.2.0