Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Exclude static-analysis fixtures from CodeRabbit review and leave docstring policy to Ruff.
- [**breaking**] Harden rational APIs and release comparisons
[`d8f9897`](https://github.com/acgetchell/la-stack/commit/d8f9897f59cce0a220efdbbcbaaf9180861889e9)

- canonicalize signed and unreduced rational inputs at construction boundaries
- preserve invariant-bearing RationalVector solutions across both exact input domains
- retain typed singularity, conversion, and runtime-dispatch diagnostics
Expand Down Expand Up @@ -167,6 +168,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Document runtime estimates, headroom, and pre-release verification.
- Enforce benchmark setup limits and improve README navigation
[`d8382ea`](https://github.com/acgetchell/la-stack/commit/d8382eac0b6b467ea390ea04a5ec04fb4600bc8a)

- Limit checkout to 2 minutes and share a 28-minute timeout across tool installation, input validation, and benchmark inventory.
- Align budget documentation with the enforced setup limits.
- Place scalar types, API navigation, and features after Quickstart, move Examples before Benchmarks, and update the Contents list.
Expand All @@ -183,6 +185,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Update release instructions to use --ref "$TAG" instead of main.
- Correct interval bounds and support mutable dispatch captures
[`3fb215b`](https://github.com/acgetchell/la-stack/commit/3fb215b6dcbc17d5ed209b4b35a6038d8e0362af)

- Use magnitude-ordered FastTwoSum to avoid spurious non-finite errors in interval addition and subtraction near f64::MAX.
- Allow dimension-dispatch macro bodies to mutate captures while preserving support for consuming closures.
- Skip redundant GCD work when clearing rational denominators.
Expand All @@ -208,6 +211,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Publish allocation and timing data with provenance and reproduction steps supporting the existing borrowed implementation.
- [**breaking**] Optimize exact conversion and dense 4D determinants
[`7fd6d8e`](https://github.com/acgetchell/la-stack/commit/7fd6d8efd3cf6c12be5a591d87addd6e4961fa82)

- Avoid redundant fraction reduction in strict RationalVector conversion.
- Share minors in dense exact 4×4 determinants while preserving the sparse fast path.
- Add adversarial solve benchmarks across D=2,3,4,5,8,16,32,64 and exact-arithmetic diagnostics.
Expand Down Expand Up @@ -265,6 +269,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Document exact matrix/RHS scaling and the power-of-two factor that preserves linear systems.
- [**breaking**] Unify local and release performance workflows
[`c601c41`](https://github.com/acgetchell/la-stack/commit/c601c4146b01868a29288b7221e413706e3e01c7)

- Retain local Markdown, CSV, and provenance artifacts while allowing same-version comparisons of tracked changes.
- Exclude untracked files explicitly and isolate the narrowed non-exact comparison bundle.
- Promote distinct-release artifacts through performance-doc and keep performance-release atomic and rollback-capable.
Expand Down Expand Up @@ -306,6 +311,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[setuptools](https://github.com/pypa/setuptools) to permit the latest version.

Updates `ruff` from 0.16.1 to 0.16.2

- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.16.1...0.16.2)
Expand Down Expand Up @@ -643,6 +649,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Revalidate finite proof conversions [`419a90f`](https://github.com/acgetchell/la-stack/commit/419a90f7267608051736498154ac5e6faf0909c5)

Ensure internal finite proof conversions cannot accept raw Matrix or Vector storage without checking the invariant.

- Revalidate TryFrom<Matrix<D>> and TryFrom<Vector<D>> before constructing finite wrappers.
- Measure exact random percentile benchmarks over repeated corpus timings and cumulative input sets.
- Tighten Codecov status thresholds and extend benchmark workflow timeout.
Expand Down Expand Up @@ -796,6 +803,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
APIs to catch tail cases that fixed well-conditioned inputs miss.

Benchmarks (benches/exact.rs):

- Factor out `bench_extreme_group` helper running the same four benches
(`det_sign_exact`, `det_exact`, `solve_exact`, `solve_exact_f64`) so
adversarial groups are directly comparable.
Expand Down Expand Up @@ -1066,6 +1074,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
Replace `BigRational::from_float(x)` in `f64_to_bigrational` with manual
IEEE 754 binary64 bit decomposition and `BigRational::new_raw`, bypassing
the unnecessary GCD normalization that `from_float` performs internally.

- Decompose f64 into sign, biased exponent, and significand fields
- Strip trailing zeros from the significand so the fraction is already
in lowest terms (odd numerator over power-of-two denominator)
Expand All @@ -1081,6 +1090,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
all f64 entries are decomposed into mantissa × 2^exponent, scaled to
a common integer base, and eliminated without any rational arithmetic.
The result is reconstructed as BigRational only at the end.

- Add f64_decompose helper (extracted from f64_to_bigrational)
- Add bareiss_det_int: integer-only Bareiss returning (BigInt, i32)
- Add bigint_exp_to_bigrational: reconstruction with trailing-zero
Expand All @@ -1105,9 +1115,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

Older releases are archived by minor series:

- [0.3.x](docs/archive/changelog/0.3.md)
- [0.2.x](docs/archive/changelog/0.2.md)
- [0.1.x](docs/archive/changelog/0.1.md)
- [0.3.x](docs/archives/changelog/0.3.md)
- [0.2.x](docs/archives/changelog/0.2.md)
- [0.1.x](docs/archives/changelog/0.1.md)

[0.4.6]: https://github.com/acgetchell/la-stack/compare/v0.4.5...v0.4.6
[0.4.5]: https://github.com/acgetchell/la-stack/compare/v0.4.4...v0.4.5
Expand Down
15 changes: 14 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ clarity, and the fixed-dimension stack-allocation model.

Install Rust 1.98.1 through [rustup](https://rustup.rs/), Git, the
[GitHub CLI](https://cli.github.com/), Python 3.14,
[`uv` 0.12.5](https://docs.astral.sh/uv/), and `jq`. Authenticate the GitHub
[`uv` 0.12.10](https://docs.astral.sh/uv/), and `jq`. Authenticate the GitHub
CLI for repository operations, then install the repository's pinned `just`
version from its locked dependency graph:

Expand All @@ -27,6 +27,19 @@ just ci # run the comprehensive local CI path
Use `just fix` when you intentionally want formatters and automatic fixes to
change files. Run `just --list` for the full command surface.

Changelog commands use the published `research-repo-tools==0.1.7` package,
locked in the `tooling` dependency group and included by `dev`. Normal setup
and CI install it from PyPI through `uv sync --locked --group dev`; a sibling
checkout is unnecessary. To upgrade it deliberately, review the exact
`tooling` requirement and refresh `uv.lock` together, then run the consumer
integration tests and `just ci`. See the [Scripts guide](scripts/README.md#changelog-and-release-tooling)
for the retained changelog policy and ownership boundary.

This first adoption phase leaves the existing setup and dependency-update
recipes in place. The shared setup contract requires an existing uv and uses
`research-repo-tools setup`; it does not generate bootstrap installers.
Full toolchain and release-metadata adoption are separate follow-ups.

Use `just update` for deliberate dependency and tool maintenance. It composes
`just update-dependencies`, which advances Cargo dependency requirements, exact
Python development-tool pins, and the Cargo/uv locks, with
Expand Down
7 changes: 7 additions & 0 deletions changelog-rumdl.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Inherit repository Markdown rules for candidates before atomic publication.
extends = "pyproject.toml"

[global]
# Archive links can point to candidates that have not been published yet.
# The normal repository Markdown check still validates their final destinations.
extend-disable = [ "MD057" ]
3 changes: 3 additions & 0 deletions cliff.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# git-cliff configuration for la-stack
# https://git-cliff.org/docs/configuration
# Consumer-owned exception to the packaged policy: preserve historical
# chore(deps-dev) bodies and their upstream release-note/changelog links.
# See scripts/README.md for the migration boundary.

[changelog]
# Keep a Changelog header
Expand Down
20 changes: 14 additions & 6 deletions docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,21 @@ continuing.
### 3. Generate the release changelog

```bash
just changelog-unreleased "$TAG"
RELEASE_DATE="$(date -u +%F)"
just changelog-unreleased "$TAG" "$RELEASE_DATE"
```

This generates `CHANGELOG.md` as though the target tag already existed, archives
completed minor series under `docs/archive/changelog/`, and synchronizes the
changelog heading with the UTC preparation date recorded in `CITATION.cff`.
Review the generated changelog and any archive changes.
completed minor series under `docs/archives/changelog/`, and uses the explicit
ISO release date. Verify that `RELEASE_DATE` equals the date recorded in
`CITATION.cff` by metadata preparation; if preparation crossed UTC midnight,
rerun `just update-version "$TAG"` first. Generation preserves existing release
dates and does not update package or citation metadata.
Use `just changelog-preview --tag "$TAG" --date "$RELEASE_DATE"` for a read-only
preview, and `just changelog-check` to validate the root and every archive.
Review the generated changelog and any archive changes. The
[Scripts guide](../scripts/README.md#changelog-and-release-tooling) explains
the consumer policy exception that preserves historical dependency-note links.

### 4. Generate the release performance comparison

Expand Down Expand Up @@ -161,7 +169,7 @@ git --no-pager diff

Expected release artifacts include package metadata and lockfiles,
`CITATION.cff`, `CHANGELOG.md`, `README.md`, `docs/performance.md`, and generated
files under `docs/archive/` and `docs/assets/bench/`. Stage only the reviewed
files under `docs/archive/`, `docs/archives/changelog/`, and `docs/assets/bench/`. Stage only the reviewed
paths that were intentionally changed; do not stage the entire `docs/` tree.
Then inspect the staged diff and commit it:

Expand Down Expand Up @@ -189,7 +197,7 @@ focused release preparation without feature work.
### Handling fixes found during preparation

For a critical fix that must be included, make and commit the fix, rerun
`just changelog-unreleased "$TAG"`, review and stage only the resulting changelog
`just changelog-unreleased "$TAG" "$RELEASE_DATE"`, review and stage only the resulting changelog
files, and commit that generated update separately.

For a non-critical fix, file an issue and defer it to a later release. Do not
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
- Update docs: README, AGENTS.md, REFERENCES.md, module doc, typos.toml
- [**breaking**] Expose exact determinant value (det_exact, det_exact_f64)
[`92ce476`](https://github.com/acgetchell/la-stack/commit/92ce476201d5759766d73221612cd27492bccbe5)

- Add `det_exact()` returning `BigRational` via Bareiss elimination
- Add `det_exact_f64()` converting exact result to f64
- Add `LaError::Overflow` for f64 conversion overflow
Expand All @@ -31,6 +32,7 @@
- Macro-generate exact tests for D=2..5
- Update README, AGENTS.md, REFERENCES.md, typos.toml
- Exact linear system solve (solve_exact, solve_exact_f64) [`d04fcd3`](https://github.com/acgetchell/la-stack/commit/d04fcd3b24843b7377a34849dbb2e6469bf9fc56)

- Add `solve_exact()` returning `[BigRational; D]` via Gaussian
elimination with partial pivoting in BigRational
- Add `solve_exact_f64()` converting exact result to `Vector<D>`
Expand Down Expand Up @@ -83,6 +85,7 @@
- Use idiomatic (0..D).rev() for back-substitution loop
- Add LDLT example, solve_exact README snippet, and sync examples
[`2bddccf`](https://github.com/acgetchell/la-stack/commit/2bddccf3f20156fadb4fee6a4093e76b1b631de1)

- Add examples/ldlt_solve_3x3.rs: 3×3 SPD tridiagonal LDLT solve + det
- Add solve_exact_f64 code example to README exact arithmetic section
- Add missing examples to justfile (ldlt_solve_3x3, exact_det_3x3,
Expand Down
6 changes: 5 additions & 1 deletion docs/code_organization.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,11 @@ inherit the root workspace lints and share the lockfile and target directory.
The [Benchmarking guide](BENCHMARKING.md) owns benchmark commands, methodology,
baselines, output locations, and report promotion. The [Scripts guide](../scripts/README.md)
owns the Python script inventory and entry points for comparisons, plotting,
release metadata, changelog generation/archiving, and tag preparation.
and release metadata. The pinned published `research-repo-tools` dependency
owns changelog generation, normalization, minor-series archiving, note lookup,
and tag preparation through its CLI. Consumer policy stays in `cliff.toml`,
`changelog-rumdl.toml`, and `[tool.research-repo-tools]` in `pyproject.toml`;
focused integration checks live in `scripts/tests/test_changelog_integration.py`.
The [justfile](../justfile) owns executable development workflows.

`scripts/release_baseline.py` owns release-suite inventory and complete raw
Expand Down
3 changes: 2 additions & 1 deletion docs/dev/docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,8 @@ dependency snippets synchronized with `Cargo.toml` and follow
version: crates.io documentation changes also require a new version.

Never edit `CHANGELOG.md` directly. `just changelog` generates, post-processes,
archives, and formats the changelog; `just changelog-unreleased <version>`
archives, and formats the changelog through the pinned shared CLI;
`just changelog-unreleased <tag> <date>`
prepends unreleased changes. Commit-message guidance lives in
[Git and GitHub guidance](MANAGING_CHANGES.md). Benchmark report and generated asset ownership
belongs in [Benchmarking](../BENCHMARKING.md).
Loading
Loading