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 \