Skip to content
Merged
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
6 changes: 5 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,9 @@ When user requests commit message generation:

- **Unsafe Rust is forbidden.** Keep the manifest-level `unsafe_code = "forbid"`
lint and crate/module `#![forbid(unsafe_code)]` enforcement intact.
- **Dead code is forbidden.** Remove unused items instead of suppressing the
lint; never add `#[allow(dead_code)]` or `#![allow(dead_code)]`, including in
tests and static-analysis fixtures.
- **ALLOWED**: Run formatters/linters: `cargo fmt`, `cargo clippy`, `cargo doc`, `taplo fmt`, `taplo lint`,
`uv run --locked ruff check --fix`, `uv run --locked ruff format`, `rumdl`, `dprint`,
`typos`, `actionlint`
Expand Down Expand Up @@ -207,7 +210,7 @@ When user requests commit message generation:

### Rust

- The current MSRV and pinned contributor/CI toolchain are Rust 1.97.1. Keep
- The current MSRV and pinned contributor/CI toolchain are Rust 1.98.0. Keep
`Cargo.toml`, `rust-toolchain.toml`, and `clippy.toml` aligned when that
baseline changes deliberately.
- Prefer borrowed APIs by default:
Expand Down Expand Up @@ -292,6 +295,7 @@ just ci # Full CI simulation (checks + tests + examples + bench co
just test # Lib + doc tests (fast)
just test-all # All tests (Rust, benchmark inputs, and Python)
just examples # Run all examples
just update # Update dependency locks and repository-owned Cargo tools
```

### Detailed Command Reference
Expand Down
55 changes: 36 additions & 19 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ clarity, and the fixed-dimension stack-allocation model.

## Getting Started

Install Rust 1.97.1 through [rustup](https://rustup.rs/), Git, Python 3.14,
[`uv` 0.12.3](https://docs.astral.sh/uv/), and `jq`. Install the repository's
Install Rust 1.98.0 through [rustup](https://rustup.rs/), Git, Python 3.14,
[`uv` 0.12.5](https://docs.astral.sh/uv/), and `jq`. Install the repository's
pinned `just` version from its locked dependency graph:

```bash
Expand All @@ -25,6 +25,14 @@ 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.

Use `just update` for deliberate dependency and tool maintenance. It composes
`just update-dependencies`, which advances Cargo dependency requirements and
the Cargo/uv locks, with `just update-cargo-tools`, which upgrades only the
Cargo CLI packages owned by `setup-tools` and atomically reconciles their root
`justfile` pins. The tool updater requires `cargo-install-update` from the
`cargo-update` package and does not touch unrelated Cargo executables or uv's
user-global tool environments.

The repository uses `cargo-nextest` for runnable Rust tests, `cargo-machete`
for unused-dependency checks, and `just cargo-lock-check` to verify that the
committed Cargo lockfile matches the manifest. `rumdl` checks Markdown,
Expand All @@ -44,25 +52,34 @@ global `RUSTFLAGS='-D warnings'`, this denies lint warnings only for local
packages without changing rustc arguments and creating separate cache
artifacts. Rustdoc has a separate warning contract, so `doc-check` continues to
set `RUSTDOCFLAGS='-D warnings'` for the default and `exact` documentation
surfaces. See the [Rust 1.97 release notes](https://doc.rust-lang.org/stable/releases.html#version-1970-2026-07-09)
surfaces. See the [Rust 1.98 release notes](https://doc.rust-lang.org/stable/releases.html#version-1980-2026-08-20)
and [Cargo configuration reference](https://doc.rust-lang.org/cargo/reference/config.html#buildwarnings).

The remaining Rust 1.97 tooling changes require no repository configuration:

- Rust's default v0 symbol mangling is accepted. Repository code, benchmark
reporting, and support scripts do not parse raw Rust symbols or require the
legacy format. Any future symbol-processing tool must support v0 rather than
forcing the nightly-only legacy override.
- The warn-by-default `linker_messages` lint is covered by the manifest's
warnings-deny policy. The Rust 1.97.1 upgrade completed `just ci` on Linux,
macOS, and Windows without linker diagnostics, so no platform suppression is
justified.
- `resolver.lockfile-path` is not configured. Local, CI, release-benchmark, and
historical-comparison worktrees are writable and use the committed root
`Cargo.lock`; an alternate path would split the lockfile and provenance source
without helping a read-only-source workflow.
- The updated must-use behavior for `Result<_, Infallible>` and
`RepeatN::default` do not intersect production code in this repository.
Rust 1.98's `f32`/`f64::algebraic_{add,sub,mul,div,rem}` operations are
forbidden in `src/`, examples, and benchmark implementations. They permit
real-number transformations such as reassociation with unspecified precision,
which can invalidate the crate's documented error bounds and deterministic
operation order. Their relaxed treatment of non-finite values and signed zero
also conflicts with typed non-finite classification, while varying results
would weaken reproducibility and benchmark comparability. Repository Semgrep
rules enforce this policy; retain ordinary IEEE-754 operations and `mul_add` in
the existing numerical paths.

Any future approximate or fast-math API requires a separate design issue, an
explicit public contract, independent correctness analysis, and representative
benchmarks. It must remain opt-in and must not change existing APIs.

The remaining Rust 1.98 changes require no repository configuration:

- `core::fmt::NumBuffer`, integer `format_into`, `NonZero::from_str_radix`,
circumfix stripping, UTF-16 decoding, and mutable atomic-slice APIs do not
simplify an existing path or address a demonstrated bottleneck.
- The compatibility changes for runtime symbols, trait-object lifetimes,
ambiguous imports, attributes, structural equality, `assert_eq!` temporaries,
and derived ordering require no source change after comprehensive validation.
- New or promoted targets do not alter the Linux, macOS, and Windows MSVC CI
matrix. Cargo 1.98's stable changes are fixes for Windows credential-provider
line endings and diagnostic capitalization; no configuration change is needed.

## Contributor Workflow

Expand Down
84 changes: 42 additions & 42 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "la-stack"
version = "0.4.4"
edition = "2024"
rust-version = "1.97.1"
rust-version = "1.98.0"
license = "BSD-3-Clause"
description = "Fast, stack-allocated linear algebra for fixed dimensions"
readme = "README.md"
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -570,8 +570,8 @@ cargo run --features exact --example exact_solve_3x3

A short contributor workflow:

Install Rust 1.97.1 through [rustup](https://rustup.rs/), Git, Python 3.14,
[`uv` 0.12.3](https://docs.astral.sh/uv/), and `jq`. Then install the pinned
Install Rust 1.98.0 through [rustup](https://rustup.rs/), Git, Python 3.14,
[`uv` 0.12.5](https://docs.astral.sh/uv/), and `jq`. Then install the pinned
`just` release from its locked dependency graph:

```bash
Expand Down
2 changes: 1 addition & 1 deletion clippy.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Clippy configuration for the la-stack crate.

# Keep lint behavior aligned with Cargo.toml and rust-toolchain.toml.
msrv = "1.97.1"
msrv = "1.98.0"

# Lint levels are owned by Cargo.toml.
2 changes: 1 addition & 1 deletion docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ to crates.io.

## Conventions and environment

The current MSRV and pinned release-validation toolchain are Rust 1.97.1. Keep
The current MSRV and pinned release-validation toolchain are Rust 1.98.0. Keep
`Cargo.toml`, `rust-toolchain.toml`, and `clippy.toml` aligned whenever a future
release deliberately changes that baseline.

Expand Down
Loading
Loading