la-stack 0.4.3

Fast, stack-allocated linear algebra for fixed dimensions
Documentation
# 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