From fc7ae6549ac500e96d97c020a908038f4b838923 Mon Sep 17 00:00:00 2001 From: osobh Date: Wed, 23 Sep 2026 11:05:26 -0500 Subject: [PATCH] build: declare Rust 1.92 as the MSRV and check it in CI rust-version = "1.92" in [workspace.package], inherited by every crate. 1.92 is the floor: wgpu (clawhdf5-gpu) requires it, and the whole workspace, Python bindings included, checks cleanly on it. ci-test.sh reads the version from Cargo.toml and checks the workspace on exactly that toolchain, so the manifests and the README badge cannot drift from what actually builds. The badge said 1.75, below edition 2024's own floor. Co-Authored-By: Claude Opus 5.5 (1M context) --- CHANGELOG.md | 4 ++++ CLAUDE.md | 3 ++- Cargo.toml | 3 +++ README.md | 2 +- crates/clawhdf5-accel/Cargo.toml | 1 + crates/clawhdf5-agent/Cargo.toml | 1 + crates/clawhdf5-android/Cargo.toml | 1 + crates/clawhdf5-ann/Cargo.toml | 1 + crates/clawhdf5-bench/Cargo.toml | 1 + crates/clawhdf5-cli/Cargo.toml | 1 + crates/clawhdf5-derive/Cargo.toml | 1 + crates/clawhdf5-filters/Cargo.toml | 1 + crates/clawhdf5-format/Cargo.toml | 1 + crates/clawhdf5-gpu/Cargo.toml | 1 + crates/clawhdf5-io/Cargo.toml | 1 + crates/clawhdf5-migrate/Cargo.toml | 1 + crates/clawhdf5-napi/Cargo.toml | 1 + crates/clawhdf5-netcdf4/Cargo.toml | 1 + crates/clawhdf5-py/Cargo.toml | 1 + crates/clawhdf5/Cargo.toml | 1 + crates/libaec-sys/Cargo.toml | 1 + scripts/ci-test.sh | 15 +++++++++++++++ 22 files changed, 42 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e437f17..5f8dc5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ overrides zlib-rs wherever it is on. - **A truncated deflate chunk is now an error.** It used to read back short, with no error. +- **Minimum supported Rust is 1.92**, now declared in every crate's + `rust-version` and checked in CI. - **New stores use the int8 vector index by default.** `MemoryConfig::quantized_index` now defaults to `true`: a quarter of the index memory, builds 1.8x (x86-64) and 2.3x (Raspberry Pi 5) faster, and @@ -32,6 +34,8 @@ no `std`, cannot detect SIMD at runtime, and inflates 3.5x slower; the workspace builds flate2 with `default-features = false`, which had been switching it off. +- `rust-version = "1.92"` for the whole workspace (the floor: `wgpu` requires + it), and CI checks the workspace on exactly that toolchain. - CI keeps zlib-ng building and tested; the arm64 job no longer needs cmake. ### Correctness diff --git a/CLAUDE.md b/CLAUDE.md index 6b9fa24..cb10c9e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -31,7 +31,8 @@ Cargo workspace with 16 crates under `crates/` (plus `libaec-sys`, an internal F pure-Rust zlib-rs (`fast-deflate` opts into zlib-ng, which needs cmake). `ci-test.sh` fails if a C-building crate enters the core crates' default tree. flate2 must keep `runtime_detection` with zlib-rs — without it zlib-rs - loses SIMD and inflates 3.5x slower. + loses SIMD and inflates 3.5x slower. MSRV is 1.92 (`rust-version`, checked + in CI). - HNSW vector index for semantic similarity search over agent memories — the `clawhdf5-agent` `hnsw` feature is **on by default**, so `hybrid_search` uses the approximate `clawhdf5-ann` index for the vector stage (the index mirrors diff --git a/Cargo.toml b/Cargo.toml index 61c47f8..2e1f6fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,9 @@ resolver = "2" [workspace.package] version = "2.7.0" edition = "2024" +# Oldest toolchain that builds the whole workspace; CI checks it. wgpu (in +# clawhdf5-gpu) requires 1.92. +rust-version = "1.92" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/README.md b/README.md index cf93565..58799af 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ **The memory layer AI agents deserve. One file. Pure Rust. Zero C dependencies.** [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) -[![Rust](https://img.shields.io/badge/rust-1.94%2B-orange.svg)](https://www.rust-lang.org) +[![Rust](https://img.shields.io/badge/rust-1.92%2B-orange.svg)](https://www.rust-lang.org) [![Tests](https://img.shields.io/badge/tests-1850%2B-brightgreen.svg)](#building) [![LongMemEval](https://img.shields.io/badge/LongMemEval__s-Turn--Level%20Hit@5%2081.4%25%20hybrid-blue.svg)](BENCHMARKS.md#longmemeval-results) [![Footprint](https://img.shields.io/badge/on--disk-1.7%20KB%2Frecord-lightgrey.svg)](BENCHMARKS.md#memory-footprint-1) diff --git a/crates/clawhdf5-accel/Cargo.toml b/crates/clawhdf5-accel/Cargo.toml index b24d81d..e59a2ba 100644 --- a/crates/clawhdf5-accel/Cargo.toml +++ b/crates/clawhdf5-accel/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-accel" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "SIMD-accelerated operations for rustyhdf5" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-agent/Cargo.toml b/crates/clawhdf5-agent/Cargo.toml index a7e6796..b8d79ee 100644 --- a/crates/clawhdf5-agent/Cargo.toml +++ b/crates/clawhdf5-agent/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-agent" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "HDF5-backed persistent memory store for on-device AI agents" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-android/Cargo.toml b/crates/clawhdf5-android/Cargo.toml index 2ad609c..38dd2a0 100644 --- a/crates/clawhdf5-android/Cargo.toml +++ b/crates/clawhdf5-android/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-android" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "Android JNI bridge for edgehdf5-memory HDF5 backend" license = "MIT" diff --git a/crates/clawhdf5-ann/Cargo.toml b/crates/clawhdf5-ann/Cargo.toml index 6a5469f..be1b37f 100644 --- a/crates/clawhdf5-ann/Cargo.toml +++ b/crates/clawhdf5-ann/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-ann" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "HNSW approximate nearest neighbor index stored as HDF5" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-bench/Cargo.toml b/crates/clawhdf5-bench/Cargo.toml index 879e921..5ac6350 100644 --- a/crates/clawhdf5-bench/Cargo.toml +++ b/crates/clawhdf5-bench/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-bench" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "Benchmark harnesses for clawhdf5-agent (Track 8)" license = "MIT" diff --git a/crates/clawhdf5-cli/Cargo.toml b/crates/clawhdf5-cli/Cargo.toml index c622e6e..f8e7a15 100644 --- a/crates/clawhdf5-cli/Cargo.toml +++ b/crates/clawhdf5-cli/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-cli" version = "2.7.0" edition = "2024" +rust-version.workspace = true license = "MIT" description = "CLI for clawhdf5 agent memory — create, save, search, recall, stats" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-derive/Cargo.toml b/crates/clawhdf5-derive/Cargo.toml index e15a46f..c5ca5f1 100644 --- a/crates/clawhdf5-derive/Cargo.toml +++ b/crates/clawhdf5-derive/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-derive" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "Derive macros for rustyhdf5 HDF5 traits" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-filters/Cargo.toml b/crates/clawhdf5-filters/Cargo.toml index 07fdeff..dd6060a 100644 --- a/crates/clawhdf5-filters/Cargo.toml +++ b/crates/clawhdf5-filters/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-filters" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "Filter and compression pipeline for clawhdf5" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-format/Cargo.toml b/crates/clawhdf5-format/Cargo.toml index fe38392..8567a7f 100644 --- a/crates/clawhdf5-format/Cargo.toml +++ b/crates/clawhdf5-format/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-format" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "Pure-Rust HDF5 binary format parsing and writing — no C dependencies" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-gpu/Cargo.toml b/crates/clawhdf5-gpu/Cargo.toml index 3ac02aa..d24aba4 100644 --- a/crates/clawhdf5-gpu/Cargo.toml +++ b/crates/clawhdf5-gpu/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-gpu" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "GPU-accelerated vector operations for rustyhdf5 using wgpu compute shaders" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-io/Cargo.toml b/crates/clawhdf5-io/Cargo.toml index f339c71..53d82f1 100644 --- a/crates/clawhdf5-io/Cargo.toml +++ b/crates/clawhdf5-io/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-io" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "I/O abstraction layer for rustyhdf5" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-migrate/Cargo.toml b/crates/clawhdf5-migrate/Cargo.toml index cf714fd..a518a22 100644 --- a/crates/clawhdf5-migrate/Cargo.toml +++ b/crates/clawhdf5-migrate/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-migrate" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "CLI to migrate SQLite agent memory databases to HDF5 format" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-napi/Cargo.toml b/crates/clawhdf5-napi/Cargo.toml index 28d8bda..c47403f 100644 --- a/crates/clawhdf5-napi/Cargo.toml +++ b/crates/clawhdf5-napi/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-napi" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "Node.js native addon (napi-rs) exposing clawhdf5-agent to TypeScript/JavaScript" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-netcdf4/Cargo.toml b/crates/clawhdf5-netcdf4/Cargo.toml index ad49148..6c38342 100644 --- a/crates/clawhdf5-netcdf4/Cargo.toml +++ b/crates/clawhdf5-netcdf4/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-netcdf4" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "NetCDF-4 read support built on rustyhdf5 — pure Rust, no C dependencies" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5-py/Cargo.toml b/crates/clawhdf5-py/Cargo.toml index 8f3ea65..0d54a4f 100644 --- a/crates/clawhdf5-py/Cargo.toml +++ b/crates/clawhdf5-py/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5-py" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "Python bindings for rustyhdf5 — a pure-Rust HDF5 library" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/clawhdf5/Cargo.toml b/crates/clawhdf5/Cargo.toml index 40dbec2..2e2b4b4 100644 --- a/crates/clawhdf5/Cargo.toml +++ b/crates/clawhdf5/Cargo.toml @@ -2,6 +2,7 @@ name = "clawhdf5" version = "2.7.0" edition = "2024" +rust-version.workspace = true description = "Pure-Rust HDF5 reader/writer — no C dependencies" license = "MIT" repository = "https://git.redclaw.dev/quantumclaw/clawhdf5" diff --git a/crates/libaec-sys/Cargo.toml b/crates/libaec-sys/Cargo.toml index 788781a..75a7e8b 100644 --- a/crates/libaec-sys/Cargo.toml +++ b/crates/libaec-sys/Cargo.toml @@ -2,6 +2,7 @@ name = "libaec-sys" version = "0.1.0" edition = "2024" +rust-version.workspace = true links = "aec" [build-dependencies] diff --git a/scripts/ci-test.sh b/scripts/ci-test.sh index 4df9e33..b52c88b 100755 --- a/scripts/ci-test.sh +++ b/scripts/ci-test.sh @@ -106,6 +106,21 @@ no_c_in_default_build() { } run_step "no C in the default build (core crates)" no_c_in_default_build +# The workspace declares a minimum Rust version (rust-version in Cargo.toml); +# check that it really builds there, so the README badge and the manifests +# cannot drift from the truth. Separate target dir: a different toolchain +# would otherwise invalidate the main build. +msrv_check() { + local msrv + msrv=$(sed -n 's/^rust-version = "\(.*\)"/\1/p' "$SCRIPT_DIR/../Cargo.toml") + [ -n "$msrv" ] || { echo "no rust-version in Cargo.toml"; return 1; } + rustup toolchain install "$msrv" --profile minimal >/dev/null || return 1 + echo "checking with Rust $msrv" + CARGO_TARGET_DIR="$SCRIPT_DIR/../target/msrv" cargo "+$msrv" check \ + --workspace --exclude clawhdf5-py --all-targets +} +run_step "MSRV check" msrv_check + # 4. Tests (exclude clawhdf5-py) run_step "cargo test" cargo test \ --workspace \