Skip to content

Commit 8dcddf0

Browse files
committed
chore(release): release v0.4.5
- Bump Rust and Python package metadata and release links to v0.4.5 - Generate the changelog and retain only the Zenodo concept DOI - Add idempotent release-version automation with prior-release inference - Publish README comparisons from retained performance measurements - Align release and benchmarking documentation with the new workflow
1 parent 99d3392 commit 8dcddf0

28 files changed

Lines changed: 2755 additions & 1362 deletions

AGENTS.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ just test # Lib + doc tests (fast)
296296
just test-all # All tests (Rust, benchmark inputs, and Python)
297297
just examples # Run all examples
298298
just update # Update dependency locks and repository-owned Cargo tools
299+
just update-version vX.Y.Z # Update release metadata without upgrading dependencies
299300
```
300301

301302
### Detailed Command Reference
@@ -305,9 +306,9 @@ just update # Update dependency locks and repository-owned Cargo tools
305306
- Benchmarks: `cargo bench --locked --features bench` (or `just bench`)
306307
- Benchmarks (exact arithmetic): `just bench-exact`
307308
- Benchmarks (la-stack vs nalgebra/faer): `just bench-vs-linalg [filter]` (full run) or `just bench-vs-linalg-quick [filter]` (reduced)
308-
- Benchmarks (plot vs_linalg CSV/SVG/JSON provenance): `just plot-vs-linalg [metric] [stat] [sample] [log_y]`;
309-
publish a freshly gated full run to README with
310-
`just plot-vs-linalg-readme [metric] [stat] [sample] [log_y]`
309+
- Benchmarks (plot exploratory vs_linalg CSV/SVG/JSON provenance): `just plot-vs-linalg [metric] [stat] [sample] [log_y]`;
310+
after `just performance-release`, publish its retained measurements to README
311+
with `just performance-readme [metric] [stat] [sample] [log_y]`
311312
- Benchmarks (save baseline): `just bench-save-baseline v0.4.1`
312313
- Build (debug): `cargo build` (or `just build`)
313314
- Build (release): `cargo build --release` (or `just build-release`)
@@ -326,6 +327,7 @@ just update # Update dependency locks and repository-owned Cargo tools
326327
- Lint/validate: `just check`
327328
- Cargo manifest/lockfile synchronization: `just cargo-lock-check`
328329
- Unused dependency check: `just unused-deps` (uses `cargo-machete`)
330+
- Update release metadata: `just update-version vX.Y.Z` (infers the previous stable published GitHub release)
329331
- Pre-commit validation / CI simulation: `just ci` (lint + tests + examples + bench compile)
330332
- Python setup from the lockfile: `uv sync --locked --group dev` (or `just python-sync`)
331333
- Python tests: `just test-python`

CHANGELOG.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,117 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.4.5] - 2026-08-21
9+
10+
### ⚠️ Breaking Changes
11+
12+
- Unify local and release performance workflows
13+
- Require Rust 1.97.1
14+
- Require Rust 1.98.0
15+
16+
### Merged Pull Requests
17+
18+
- Bump the dependencies group with 3 updates [#211](https://github.com/acgetchell/la-stack/pull/211)
19+
- Bump the github-actions group with 7 updates [#200](https://github.com/acgetchell/la-stack/pull/200)
20+
21+
### Added
22+
23+
- Persist release report artifacts for rerendering [`600445c`](https://github.com/acgetchell/la-stack/commit/600445c325ade517631d50a5f625923f56387f1c)
24+
25+
- Store deterministic comparison CSV with an adjacent schema-versioned provenance sidecar before temporary worktrees are removed.
26+
- Render and promote reports only from validated artifact reloads, with fail-closed path checks and transactional rollback.
27+
- Add performance-rerender and document artifact retention, GitHub assets, and the release workflow.
28+
- Refresh Rust, Python, contributor-tool, and GitHub Action pins, and separate Dependabot security update groups.
29+
30+
### Dependencies
31+
32+
- Bump the github-actions group with 7 updates [#200](https://github.com/acgetchell/la-stack/pull/200)
33+
[`9728daf`](https://github.com/acgetchell/la-stack/commit/9728dafc026bb2a849bae49feaca6144c5598698)
34+
35+
### Fixed
36+
37+
- Enforce pinned uv in local recipe guards [`938aff6`](https://github.com/acgetchell/la-stack/commit/938aff62517d5055d1db49bc7734e4069ef74d72)
38+
39+
- Reject missing or mismatched uv versions with actionable diagnostics.
40+
- Reuse the canonical version guard across uv-backed validation helpers.
41+
- Harden release artifact promotion [`8b8537b`](https://github.com/acgetchell/la-stack/commit/8b8537b86226285a343976ea987cf2759bf3dd7d)
42+
- Treat CRLF and LF archive reports as equivalent while preserving stored bytes.
43+
- Share comparison selection and report-update guidance across generation paths.
44+
- Isolate artifact path resolution and retained-artifact rendering.
45+
- Clarify that durable benchmark downloads are GitHub Release assets.
46+
- Harden numerical and release evidence [`c878701`](https://github.com/acgetchell/la-stack/commit/c8787017122c3e94958e82d327fdab8a305999b8)
47+
- Surface determinant overflow even when error-bound terms underflow.
48+
- Measure complete benchmark operations symmetrically and bind retained reports to atomic, validated provenance.
49+
- Fail closed on inconsistent release metadata, tags, changelog sections, Semgrep annotations, and recorded CPU provenance.
50+
- Align docs.rs feature annotations, citation identifiers, all-target linting, and configurable property-test runs with documented contracts.
51+
- Harden release and validation edge cases [`260afb8`](https://github.com/acgetchell/la-stack/commit/260afb85fdc8eaa873bdb64b6d7eae76ab6b9abc)
52+
- Preserve archived changelog bytes during rollback and reject malformed Unreleased headings.
53+
- Match overlapping Semgrep fixture spans deterministically and centralize immutable benchmark provenance handling.
54+
- Document exact matrix/RHS scaling and the power-of-two factor that preserves linear systems.
55+
- [**breaking**] Unify local and release performance workflows
56+
[`c601c41`](https://github.com/acgetchell/la-stack/commit/c601c4146b01868a29288b7221e413706e3e01c7)
57+
- Retain local Markdown, CSV, and provenance artifacts while allowing same-version comparisons of tracked changes.
58+
- Exclude untracked files explicitly and isolate the narrowed non-exact comparison bundle.
59+
- Promote distinct-release artifacts through performance-doc and keep performance-release atomic and rollback-capable.
60+
- Render one consolidated table per benchmark suite and reject invalid release publication states.
61+
- Isolate algebraic float fixture scans [`56e848f`](https://github.com/acgetchell/la-stack/commit/56e848fb3dbbc93f2fd4c0b566d71489c96dc857)
62+
- exclude intentional algebraic float violations from production Semgrep scans while preserving direct fixture validation
63+
- cover f64 associated-call syntax alongside f32 and receiver forms
64+
- forbid dead-code suppressions and remove blanket allowances from static-analysis fixtures
65+
66+
### Maintenance
67+
68+
- Gate auto-merge on CodeRabbit approval [`2a37961`](https://github.com/acgetchell/la-stack/commit/2a37961ee8c95f2482541910de78680af22bb968)
69+
70+
- Request one SHA-scoped CodeRabbit review for each Dependabot update.
71+
- Enable squash auto-merge only for the triggering head after required checks pass.
72+
- Group GitHub Actions updates, remove autopep8, and refresh pinned tooling.
73+
- Print an explicit release title in tag-release follow-up guidance.
74+
- [**breaking**] Require Rust 1.97.1 [`99bac26`](https://github.com/acgetchell/la-stack/commit/99bac263ae773cc8cb42c418630c8e7dd7d023b8)
75+
- align contributor, CI, release, and Clippy toolchain baselines
76+
- compile benchmarks with Cargo's warning policy to preserve cache reuse
77+
- publish CodeRabbit's canonical review check for ruleset enforcement
78+
- Restore ruleset-compatible status [`5235365`](https://github.com/acgetchell/la-stack/commit/5235365efaf38a0d4035d74a46a7468ad10921d0)
79+
- publish the legacy CodeRabbit commit status required by the main ruleset
80+
- keep review progress disabled until CodeRabbit can publish the required check run
81+
- Standardize validation and centralize tool pins [`54a7e3a`](https://github.com/acgetchell/la-stack/commit/54a7e3a8e8a640fa5069d5c07fffbf1c1dfab903)
82+
- Compose CI from orthogonal leaf validators with one release-profile nextest pass and separate doctests.
83+
- Resolve workflow tooling through the justfile and shared setup action.
84+
- Document focused validation, notebook scope, and Rust 1.97 tooling policy.
85+
- Refresh development tools, security actions, Dependabot schedules, and lockfiles.
86+
- [**breaking**] Require Rust 1.98.0 [`2f9e0a8`](https://github.com/acgetchell/la-stack/commit/2f9e0a83c4fd974f34f87f29409cf1eac4da5343)
87+
- align the MSRV, contributor toolchain, dependency locks, and documented maintenance baseline
88+
- forbid algebraic float operations in numerical kernels to preserve IEEE-754 error and reproducibility contracts
89+
- add a scoped just update workflow with atomic Cargo tool-pin reconciliation
90+
- clean failed changelog and performance staging files without disturbing published artifacts
91+
- Bump the dependencies group with 3 updates [#211](https://github.com/acgetchell/la-stack/pull/211)
92+
[`493068a`](https://github.com/acgetchell/la-stack/commit/493068ac653724959f7083f34d5c909a496314bd)
93+
94+
Updates the requirements on [ruff](https://github.com/astral-sh/ruff) , [ty](https://github.com/astral-sh/ty) and
95+
[setuptools](https://github.com/pypa/setuptools) to permit the latest version.
96+
97+
Updates `ruff` from 0.16.1 to 0.16.2
98+
- [Release notes](https://github.com/astral-sh/ruff/releases)
99+
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
100+
- [Commits](https://github.com/astral-sh/ruff/compare/0.16.1...0.16.2)
101+
102+
Updates `ty` from 0.0.66 to 0.0.69
103+
- [Release notes](https://github.com/astral-sh/ty/releases)
104+
- [Changelog](https://github.com/astral-sh/ty/blob/main/CHANGELOG.md)
105+
- [Commits](https://github.com/astral-sh/ty/compare/0.0.66...0.0.69)
106+
107+
Updates `setuptools` to 84.0.0
108+
- [Release notes](https://github.com/pypa/setuptools/releases)
109+
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
110+
- [Commits](https://github.com/pypa/setuptools/compare/v83.0.0...v84.0.0)
111+
112+
### Performance
113+
114+
- Reduce checked determinant query overhead [`2bdf1d3`](https://github.com/acgetchell/la-stack/commit/2bdf1d3dc4b4a27928a888be678b4c360916e94c)
115+
116+
- Aggregate D≥5 range proofs before a single cold scaled replay.
117+
- Preserve immediate small-dimension fallback and range-safe determinant behavior.
118+
8119
## [0.4.4] - 2026-07-13
9120

10121
### ⚠️ Breaking Changes
@@ -67,6 +178,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
67178
- fail benchmark publication closed on invalid samples or mismatched provenance
68179
- make release and changelog tooling transactional, path-safe, and Windows-portable
69180
- align benchmark CI with pinned local tools and least-privilege publishing
181+
- Harden changelog and version generation [`2e1eb2e`](https://github.com/acgetchell/la-stack/commit/2e1eb2e965333fab51934c2b605fe3465e4b57e6)
182+
- Reject tag prefixes embedded in longer non-semver revisions
183+
- Preserve fenced examples when stripping Dependabot metadata
184+
- Document the conditional exact-solve scaling invariant
185+
- Regenerate the v0.4.4 changelog through the release workflow
70186

71187
### Maintenance
72188

@@ -775,6 +891,7 @@ Older releases are archived by minor series:
775891
- [0.2.x](docs/archive/changelog/0.2.md)
776892
- [0.1.x](docs/archive/changelog/0.1.md)
777893

894+
[0.4.5]: https://github.com/acgetchell/la-stack/compare/v0.4.4...v0.4.5
778895
[0.4.4]: https://github.com/acgetchell/la-stack/compare/v0.4.3...v0.4.4
779896
[0.4.3]: https://github.com/acgetchell/la-stack/compare/v0.4.2...v0.4.3
780897
[0.4.2]: https://github.com/acgetchell/la-stack/compare/v0.4.1...v0.4.2

CITATION.cff

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@ cff-version: 1.2.0
22
message: "If you use this software, please cite it as below."
33
type: software
44
title: "la-stack: Fast, stack-allocated linear algebra for fixed dimensions in Rust"
5-
version: 0.4.4
6-
date-released: 2026-07-13
5+
version: 0.4.5
6+
date-released: 2026-08-21
77
url: "https://github.com/acgetchell/la-stack"
88
repository-code: "https://github.com/acgetchell/la-stack"
99
doi: "10.5281/zenodo.18158926"
10-
identifiers:
11-
- description: "Zenodo DOI for version 0.4.4"
12-
type: doi
13-
value: "10.5281/zenodo.21331524"
1410
authors:
1511
- family-names: "Getchell"
1612
given-names: "Adam"

Cargo.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "la-stack"
3-
version = "0.4.4"
3+
version = "0.4.5"
44
edition = "2024"
55
rust-version = "1.98.0"
66
license = "BSD-3-Clause"

README.md

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.18158926.svg)](https://doi.org/10.5281/zenodo.18158926)
44
[![Crates.io](https://badgen.net/crates/v/la-stack)](https://crates.io/crates/la-stack)
55
[![Downloads](https://badgen.net/crates/d/la-stack)](https://crates.io/crates/la-stack)
6-
[![License](https://badgen.net/github/license/acgetchell/la-stack)](https://github.com/acgetchell/la-stack/blob/v0.4.4/LICENSE)
6+
[![License](https://badgen.net/github/license/acgetchell/la-stack)](https://github.com/acgetchell/la-stack/blob/v0.4.5/LICENSE)
77
[![Docs.rs](https://docs.rs/la-stack/badge.svg)](https://docs.rs/la-stack)
88
[![CI](https://github.com/acgetchell/la-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/acgetchell/la-stack/actions/workflows/ci.yml)
99
[![rust-clippy analyze][clippy-badge]][clippy-workflow]
@@ -60,9 +60,9 @@ for the algorithms, validity boundaries, and supporting references.
6060
exact values allocate as required
6161
-`unsafe` forbidden
6262

63-
See [CHANGELOG.md](https://github.com/acgetchell/la-stack/blob/v0.4.4/CHANGELOG.md)
63+
See [CHANGELOG.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/CHANGELOG.md)
6464
for release history and
65-
[docs/roadmap.md](https://github.com/acgetchell/la-stack/blob/v0.4.4/docs/roadmap.md)
65+
[docs/roadmap.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/roadmap.md)
6666
for current release planning.
6767

6868
## 🚫 Anti-goals
@@ -102,7 +102,7 @@ Add this to your `Cargo.toml`:
102102

103103
```toml
104104
[dependencies]
105-
la-stack = "0.4.4"
105+
la-stack = "0.4.5"
106106
```
107107

108108
### Feature flags
@@ -256,7 +256,7 @@ rationals (this pulls in `num-bigint`, `num-rational`, and `num-traits` for
256256

257257
```toml
258258
[dependencies]
259-
la-stack = { version = "0.4.4", features = ["exact"] }
259+
la-stack = { version = "0.4.5", features = ["exact"] }
260260
```
261261

262262
These routines are exact with respect to the finite binary64 values stored in
@@ -501,7 +501,7 @@ breaking callers.
501501
![LU solve (factor + solve): median time vs dimension][lu-solve-benchmark]
502502

503503
Raw data:
504-
[docs/assets/bench/vs_linalg_lu_solve_median.csv](https://github.com/acgetchell/la-stack/blob/v0.4.4/docs/assets/bench/vs_linalg_lu_solve_median.csv)
504+
[docs/assets/bench/vs_linalg_lu_solve_median.csv](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/assets/bench/vs_linalg_lu_solve_median.csv)
505505
Measurement provenance:
506506
[docs/assets/bench/vs_linalg_lu_solve_median.provenance.json][benchmark-provenance]
507507

@@ -523,22 +523,22 @@ README table, and provenance together.
523523

524524
For the full per-kernel comparison methodology, input construction, and
525525
release-comparison workflow details, see
526-
[docs/BENCHMARKING.md](https://github.com/acgetchell/la-stack/blob/v0.4.4/docs/BENCHMARKING.md).
526+
[docs/BENCHMARKING.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/BENCHMARKING.md).
527527
For the current release-to-release performance snapshot, see
528-
[docs/PERFORMANCE.md](https://github.com/acgetchell/la-stack/blob/v0.4.4/docs/PERFORMANCE.md).
528+
[docs/PERFORMANCE.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/PERFORMANCE.md).
529529

530530
<!-- BENCH_TABLE:lu_solve:median:new:BEGIN -->
531531

532532
| D | la-stack median (ns) | nalgebra median (ns) | faer median (ns) | reduction vs nalgebra (point est.) | reduction vs faer (point est.) |
533533
|---:|--------------------:|--------------------:|----------------:|---------------------:|----------------:|
534-
| 2 | 2.051 | 4.609 | 149.537 | +55.5% | +98.6% |
535-
| 3 | 10.032 | 23.094 | 185.935 | +56.6% | +94.6% |
536-
| 4 | 21.806 | 53.542 | 218.921 | +59.3% | +90.0% |
537-
| 5 | 43.787 | 70.437 | 282.262 | +37.8% | +84.5% |
538-
| 8 | 128.337 | 167.505 | 414.791 | +23.4% | +69.1% |
539-
| 16 | 672.680 | 581.273 | 875.411 | -15.7% | +23.2% |
540-
| 32 | 2,873.720 | 2,470.435 | 2,861.209 | -16.3% | -0.4% |
541-
| 64 | 18,165.369 | 15,021.737 | 12,225.703 | -20.9% | -48.6% |
534+
| 2 | 2.044 | 4.601 | 151.939 | +55.6% | +98.7% |
535+
| 3 | 9.989 | 23.513 | 196.357 | +57.5% | +94.9% |
536+
| 4 | 21.865 | 54.716 | 223.910 | +60.0% | +90.2% |
537+
| 5 | 44.510 | 71.219 | 293.420 | +37.5% | +84.8% |
538+
| 8 | 145.405 | 188.352 | 381.872 | +22.8% | +61.9% |
539+
| 16 | 672.491 | 585.261 | 897.236 | -14.9% | +25.0% |
540+
| 32 | 2,777.707 | 2,501.361 | 2,952.778 | -11.0% | +5.9% |
541+
| 64 | 17,357.785 | 13,878.401 | 12,199.761 | -25.1% | -42.3% |
542542

543543
<!-- BENCH_TABLE:lu_solve:median:new:END -->
544544

@@ -593,38 +593,38 @@ CI runs `just ci` on Ubuntu, macOS, and Windows to keep platform coverage
593593
aligned with the local comprehensive validation path.
594594

595595
For coverage commands and report locations, see
596-
[`docs/COVERAGE.md`](https://github.com/acgetchell/la-stack/blob/v0.4.4/docs/COVERAGE.md).
596+
[`docs/COVERAGE.md`](https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/COVERAGE.md).
597597
For the full contributor workflow, see
598-
[CONTRIBUTING.md](https://github.com/acgetchell/la-stack/blob/v0.4.4/CONTRIBUTING.md).
598+
[CONTRIBUTING.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/CONTRIBUTING.md).
599599

600600
## 📝 Citation
601601

602602
If you use this library in academic work, please cite it using
603-
[CITATION.cff](https://github.com/acgetchell/la-stack/blob/v0.4.4/CITATION.cff)
603+
[CITATION.cff](https://github.com/acgetchell/la-stack/blob/v0.4.5/CITATION.cff)
604604
(or GitHub's "Cite this repository" feature). Tagged releases are archived on
605605
Zenodo under the
606606
[all-versions concept DOI](https://doi.org/10.5281/zenodo.18158926).
607607

608608
## 📚 References
609609

610610
For canonical references to the algorithms used by this crate, see
611-
[REFERENCES.md](https://github.com/acgetchell/la-stack/blob/v0.4.4/REFERENCES.md).
611+
[REFERENCES.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/REFERENCES.md).
612612

613613
## 🤖 AI Agents
614614

615615
AI coding assistants should read
616-
[AGENTS.md](https://github.com/acgetchell/la-stack/blob/v0.4.4/AGENTS.md)
616+
[AGENTS.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/AGENTS.md)
617617
before proposing or applying changes. See
618-
[CONTRIBUTING.md](https://github.com/acgetchell/la-stack/blob/v0.4.4/CONTRIBUTING.md)
618+
[CONTRIBUTING.md](https://github.com/acgetchell/la-stack/blob/v0.4.5/CONTRIBUTING.md)
619619
for the repository's AI-assisted development note.
620620

621621
## 📄 License
622622

623-
BSD 3-Clause License. See [LICENSE](https://github.com/acgetchell/la-stack/blob/v0.4.4/LICENSE).
623+
BSD 3-Clause License. See [LICENSE](https://github.com/acgetchell/la-stack/blob/v0.4.5/LICENSE).
624624

625625
[audit-badge]: https://github.com/acgetchell/la-stack/actions/workflows/audit.yml/badge.svg
626626
[audit-workflow]: https://github.com/acgetchell/la-stack/actions/workflows/audit.yml
627-
[benchmark-provenance]: https://github.com/acgetchell/la-stack/blob/v0.4.4/docs/assets/bench/vs_linalg_lu_solve_median.provenance.json
627+
[benchmark-provenance]: https://github.com/acgetchell/la-stack/blob/v0.4.5/docs/assets/bench/vs_linalg_lu_solve_median.provenance.json
628628
[clippy-badge]: https://github.com/acgetchell/la-stack/actions/workflows/rust-clippy.yml/badge.svg
629629
[clippy-workflow]: https://github.com/acgetchell/la-stack/actions/workflows/rust-clippy.yml
630-
[lu-solve-benchmark]: https://raw.githubusercontent.com/acgetchell/la-stack/v0.4.4/docs/assets/bench/vs_linalg_lu_solve_median.svg
630+
[lu-solve-benchmark]: https://raw.githubusercontent.com/acgetchell/la-stack/v0.4.5/docs/assets/bench/vs_linalg_lu_solve_median.svg

0 commit comments

Comments
 (0)