From f54203521322a88f8b2ca336c0730ed4b2d4f1b7 Mon Sep 17 00:00:00 2001 From: Lee <29015211+LeeroyHannigan@users.noreply.github.com> Date: Thu, 5 Nov 2026 15:38:44 +0000 Subject: [PATCH 1/6] fix(deps): update aws-smithy-json to 0.62.7 Cargo.lock: aws-smithy-json moves from 0.62.3 to 0.62.7. Versions up to 0.62.6 recurse without a depth limit while skipping an unknown key, so a deeply nested document can exhaust the stack (CVE-2026-18140, GHSA-8ffr-xgwf-xj56). In this workspace only the AWS SDK clients behind extenddb-backup-store (aws-config, aws-sdk-s3, aws-sdk-sso, aws-sdk-ssooidc, aws-sdk-sts) use the crate, to parse the responses of the S3, STS and SSO endpoints the operator configures. 0.62.7 requires aws-smithy-runtime-api 1.12.3 or newer, so the lock also moves aws-smithy-runtime-api from 1.11.3 to 1.12.3, aws-smithy-types from 1.4.3 to 1.4.9 and aws-smithy-async from 1.2.11 to 1.2.14, and adds aws-smithy-runtime-api-macros 1.0.0 and aws-smithy-schema 0.1.0. Each is the lowest version the new requirements accept. No other package moves, and each aws-smithy crate resolves to one version. The six crates declare rustc 1.91.1 as their minimum, above the workspace rust-version of 1.88, so a 1.88 toolchain refuses to build extenddb-backup-store with this lock. The release images build only the extenddb binary, which does not depend on extenddb-backup-store, so they are unaffected. --- Cargo.lock | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c033bcd24..4ab155aad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -445,9 +445,9 @@ dependencies = [ [[package]] name = "aws-smithy-async" -version = "1.2.11" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52eec3db979d18cb807fc1070961cc51d87d069abe9ab57917769687368a8c6c" +checksum = "2ffcaf626bdda484571968400c326a244598634dc75fd451325a54ad1a59acfc" dependencies = [ "futures-util", "pin-project-lite", @@ -534,10 +534,12 @@ dependencies = [ [[package]] name = "aws-smithy-json" -version = "0.62.3" +version = "0.62.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb96aa208d62ee94104645f7b2ecaf77bf27edf161590b6224bfbac2832f979" +checksum = "701a947f4797e52a911e114a898667c746c39feea467bbd1abd7b3721f702ffa" dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-schema", "aws-smithy-types", ] @@ -587,11 +589,12 @@ dependencies = [ [[package]] name = "aws-smithy-runtime-api" -version = "1.11.3" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49952c52f7eebb72ce2a754d3866cc0f87b97d2a46146b79f80f3a93fb2b3716" +checksum = "9db177daa6ba8afb9ee1aefcf548c907abcf52065e394ee11a92780057fe0e8c" dependencies = [ "aws-smithy-async", + "aws-smithy-runtime-api-macros", "aws-smithy-types", "bytes", "http 0.2.12", @@ -602,11 +605,33 @@ dependencies = [ "zeroize", ] +[[package]] +name = "aws-smithy-runtime-api-macros" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d7396fd9500589e62e460e987ecb671bad374934e55ec3b5f498cc7a8a8a7b7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "aws-smithy-schema" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7442cb268338f0eb8278140a107c046756aa01093d8ef5e99628d34ae09c94f5" +dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-types", + "http 1.4.0", +] + [[package]] name = "aws-smithy-types" -version = "1.4.3" +version = "1.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3a26048eeab0ddeba4b4f9d51654c79af8c3b32357dc5f336cee85ab331c33" +checksum = "53f93074121a1be41317b9aa607143ae17900631f7f59a99f2b905d519d6783b" dependencies = [ "base64-simd", "bytes", From 619b25af9c06403509db2bc05049cdf731e0fe38 Mon Sep 17 00:00:00 2001 From: Lee <29015211+LeeroyHannigan@users.noreply.github.com> Date: Thu, 5 Nov 2026 16:07:13 +0000 Subject: [PATCH 2/6] build: raise the minimum Rust version to 1.91.1 aws-smithy-json 0.62.7, the first release with the fix for CVE-2026-18140, and the five aws-smithy crates it needs declare rustc 1.91.1 as their minimum. The workspace minimum was 1.88. Cargo.toml sets rust-version to 1.91.1. The comment on the aws-sdk pins now says that each pinned version declares a minimum at or below the workspace rust-version, and .cargo/config.toml names 1.91.1 for the resolver fallback. The comments next to the two compare-exchange loops that stand in for fetch_update now name 1.91.1: the replacement, try_update, is still unstable there. clippy reads the minimum from rust-version, and from 1.91 it asks for Duration::from_mins where a value is a whole number of minutes. The three cases are in extenddb-cache: the default TTL in swr.rs and two lines of tests.rs now use Duration::from_mins(1). --- .cargo/config.toml | 4 ++-- Cargo.toml | 15 +++++++-------- crates/cache/src/swr.rs | 2 +- crates/cache/src/tests.rs | 4 ++-- .../storage-cassandra/src/migrations/backend.rs | 2 +- crates/storage-mongodb/src/migrations/guarded.rs | 2 +- 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index cfc36d196..4cab86c4f 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -3,7 +3,7 @@ [resolver] # Prefer dependency versions whose declared rust-version fits the workspace -# rust-version (1.88, tested in CI), so `cargo update` on a newer toolchain -# does not pull in crates that no longer build on 1.88. Only applies when a +# rust-version (1.91.1, tested in CI), so `cargo update` on a newer toolchain +# does not pull in crates that no longer build on 1.91.1. Only applies when a # newer version would be incompatible; everything else updates as usual. incompatible-rust-versions = "fallback" diff --git a/Cargo.toml b/Cargo.toml index 97e64e9e0..5478d866e 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ members = [ [workspace.package] version = "0.1.14" edition = "2024" -rust-version = "1.88" +rust-version = "1.91.1" license = "Apache-2.0" [workspace.dependencies] @@ -89,14 +89,13 @@ bson = "2.13" dashmap = "6" # Backup store -# Exact pins: the aws-sdk crates release in lockstep, and these are the newest -# versions whose declared minimum supported rustc fits the workspace -# rust-version (1.88); later releases require a newer compiler. Their -# transitive aws-* and aws-smithy-* crates are held in Cargo.lock at the -# newest versions that build on 1.88 (set with -# `cargo +1.88.0 update @ --precise `). The resolver +# Exact pins: the aws-sdk crates release in lockstep, and each of these +# versions declares a minimum supported rustc at or below the workspace +# rust-version (1.91.1). Their transitive aws-* and aws-smithy-* crates are +# held in Cargo.lock at versions that build on 1.91.1 (set with +# `cargo +1.91.1 update @ --precise `). The resolver # fallback in .cargo/config.toml keeps a plain `cargo update` from moving -# them past that, and the 1.88 leg of .github/workflows/test.yml fails if +# them past that, and the 1.91.1 leg of .github/workflows/test.yml fails if # they drift. The feature set is that of tests/rust/Cargo.toml plus `sso` on # aws-config, so a server whose credentials come from an SSO profile # (`sso_session` in the shared config) can reach the backup bucket. diff --git a/crates/cache/src/swr.rs b/crates/cache/src/swr.rs index 6331f39e1..5b2e553d9 100644 --- a/crates/cache/src/swr.rs +++ b/crates/cache/src/swr.rs @@ -37,7 +37,7 @@ pub struct SwrCacheConfig { impl Default for SwrCacheConfig { fn default() -> Self { Self { - ttl: Duration::from_secs(60), + ttl: Duration::from_mins(1), soft_ttl: Duration::from_secs(30), negative_ttl: Duration::from_secs(5), max_entries: 10_000, diff --git a/crates/cache/src/tests.rs b/crates/cache/src/tests.rs index 3315e025f..f1e55986b 100644 --- a/crates/cache/src/tests.rs +++ b/crates/cache/src/tests.rs @@ -365,7 +365,7 @@ async fn refresh_failure_does_not_evict_stale_entry() { async fn lru_eviction_caps_size_at_max_entries() { let (loader, _) = CountingLoader::new(); let config = SwrCacheConfig { - ttl: Duration::from_secs(60), + ttl: Duration::from_mins(1), soft_ttl: Duration::from_secs(30), negative_ttl: Duration::from_secs(5), max_entries: 4, @@ -402,7 +402,7 @@ async fn invalidate_all_clears_every_entry() { #[tokio::test(flavor = "multi_thread", worker_threads = 4)] async fn config_default_has_expected_values() { let cfg = SwrCacheConfig::default(); - assert_eq!(cfg.ttl, Duration::from_secs(60)); + assert_eq!(cfg.ttl, Duration::from_mins(1)); assert_eq!(cfg.soft_ttl, Duration::from_secs(30)); assert_eq!(cfg.negative_ttl, Duration::from_secs(5)); assert_eq!(cfg.max_entries, 10_000); diff --git a/crates/storage-cassandra/src/migrations/backend.rs b/crates/storage-cassandra/src/migrations/backend.rs index 0d59590b5..336604203 100644 --- a/crates/storage-cassandra/src/migrations/backend.rs +++ b/crates/storage-cassandra/src/migrations/backend.rs @@ -212,7 +212,7 @@ pub(crate) fn stopped(left: Option<&std::sync::atomic::AtomicUsize>) -> bool { return false; }; // A compare-exchange loop: `fetch_update` is deprecated on current - // stable and its replacement does not exist on 1.88. + // stable and its replacement does not exist on 1.91.1. let mut n = left.load(Ordering::SeqCst); loop { let Some(next) = n.checked_sub(1) else { diff --git a/crates/storage-mongodb/src/migrations/guarded.rs b/crates/storage-mongodb/src/migrations/guarded.rs index 67cf341d7..d4a937828 100644 --- a/crates/storage-mongodb/src/migrations/guarded.rs +++ b/crates/storage-mongodb/src/migrations/guarded.rs @@ -45,7 +45,7 @@ pub(crate) struct LeasedManagementStore { pub(crate) fn stopped(left: Option<&std::sync::atomic::AtomicUsize>) -> bool { use std::sync::atomic::Ordering; // A compare-exchange loop: `fetch_update` is deprecated on current - // stable and its replacement does not exist on 1.88. + // stable and its replacement does not exist on 1.91.1. let Some(left) = left else { return false; }; From f8d64529b63f5f6932b5f421f924fd9f75a61593 Mon Sep 17 00:00:00 2001 From: Lee <29015211+LeeroyHannigan@users.noreply.github.com> Date: Thu, 5 Nov 2026 16:07:13 +0000 Subject: [PATCH 3/6] ci: run the minimum version leg of test.yml on Rust 1.91.1 The workspace rust-version is 1.91.1, so the leg that checks the minimum moves from 1.88.0 to 1.91.1. --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ef1b68230..b3c5100f2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,7 +27,7 @@ jobs: timeout-minutes: 15 strategy: matrix: - toolchain: [stable, "1.88.0"] + toolchain: [stable, "1.91.1"] steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master From 2f524d4cbff4a617a47a889a72c467259ad2b6c0 Mon Sep 17 00:00:00 2001 From: Lee <29015211+LeeroyHannigan@users.noreply.github.com> Date: Thu, 5 Nov 2026 16:07:13 +0000 Subject: [PATCH 4/6] docs: name Rust 1.91.1 as the minimum version README.md, CONTRIBUTING.md, the getting started page, the quick start and install manuals and the backup design name 1.91.1, the workspace rust-version. --- CONTRIBUTING.md | 2 +- README.md | 2 +- docs/design/15-backup-restore.md | 2 +- docs/getting-started.md | 2 +- docs/manuals/04-quickstart-setup-guide.md | 2 +- docs/manuals/08-install-linux.md | 2 +- docs/manuals/09-install-macos.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c6b34b7f3..77215a301 100755 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Thank you for your interest in contributing to ExtendDB! ### Prerequisites -- Rust 1.88+ (stable) +- Rust 1.91.1+ (stable) - PostgreSQL 14+ - Python 3.10+ (for integration tests) diff --git a/README.md b/README.md index 9f5e9f664..823d79294 100755 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ scripts/install-macos.sh # macOS ## Prerequisites -- Rust 1.88+ (`rustup update`) +- Rust 1.91.1+ (`rustup update`) - Python 3.10+ (for test suites and documentation) - A storage backend: - PostgreSQL 14+ (see `docs/local-postgres-setup.md`) diff --git a/docs/design/15-backup-restore.md b/docs/design/15-backup-restore.md index 06c13ece0..551eba3a7 100644 --- a/docs/design/15-backup-restore.md +++ b/docs/design/15-backup-restore.md @@ -482,7 +482,7 @@ Phase 3, later (v1.x): - Backups are asynchronous where the current implementation is synchronous; clients that assumed AVAILABLE on return must poll, which is what they do against DynamoDB. - Long snapshot transactions on PostgreSQL delay vacuum for the backup duration; MongoDB snapshot windows bound backup duration by server configuration. -- A new dependency on the AWS S3 SDK (its lock entries pinned to the versions that build on the workspace's 1.88 toolchain, which also holds `crc` at 3.3.0 for the server; the licence notices change when PR 7 links the crate into the server) and an S3 mock in CI. +- A new dependency on the AWS S3 SDK (its lock entries pinned to the versions that build on the workspace's 1.91.1 toolchain, which also holds `crc` at 3.3.0 for the server; the licence notices change when PR 7 links the crate into the server) and an S3 mock in CI. - A restore from an S3 store spools the whole compressed backup to local disk before loading any of it. - One core at full utilization for the duration of a backup on compression; `max_concurrent_jobs` and `spawn_blocking` keep it off the request threads but do not make it free on a 2-vCPU host. - Two code paths for one release while legacy backups remain readable. diff --git a/docs/getting-started.md b/docs/getting-started.md index c1c27db98..6657786d0 100755 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -41,7 +41,7 @@ See [Local Development with Docker Compose](local-dev-docker-compose.md). - SQLite (embedded; nothing to install) - MongoDB 7.0+ with replica set (see `docs/local-mongodb-setup.md`) - Cassandra 4.1+ running locally (see `docs/cassandra-setup.md`) -- Rust toolchain (1.88+) +- Rust toolchain (1.91.1+) - AWS CLI v2 (for testing) - Python 3.10+ with virtual environment (see [Python Environment Setup](../README.md#python-environment-setup) in the README) diff --git a/docs/manuals/04-quickstart-setup-guide.md b/docs/manuals/04-quickstart-setup-guide.md index 08333d9dd..96625230a 100755 --- a/docs/manuals/04-quickstart-setup-guide.md +++ b/docs/manuals/04-quickstart-setup-guide.md @@ -9,7 +9,7 @@ This section gets you from zero to a working extenddb instance as fast as possib ### Prerequisites - PostgreSQL 14+ running locally -- Rust toolchain 1.88+ +- Rust toolchain 1.91.1+ - AWS CLI v2 ### Steps diff --git a/docs/manuals/08-install-linux.md b/docs/manuals/08-install-linux.md index 2b868522e..0267854a4 100755 --- a/docs/manuals/08-install-linux.md +++ b/docs/manuals/08-install-linux.md @@ -26,7 +26,7 @@ If you prefer to run each step yourself, follow the sections below. ## Prerequisites -- Rust 1.88+ (`rustup update`) +- Rust 1.91.1+ (`rustup update`) - PostgreSQL 14+ - Python 3.10+ (for test suites) - AWS CLI v2 (for testing) diff --git a/docs/manuals/09-install-macos.md b/docs/manuals/09-install-macos.md index b1ca6de2d..23a1217d2 100755 --- a/docs/manuals/09-install-macos.md +++ b/docs/manuals/09-install-macos.md @@ -26,7 +26,7 @@ If you prefer to run each step yourself, follow the sections below. ## Prerequisites -- Rust 1.88+ (`rustup update`) +- Rust 1.91.1+ (`rustup update`) - PostgreSQL 14+ via Homebrew (`brew install postgresql@17`) - Python 3.10+ (for test suites) - AWS CLI v2 (for testing) From 27c1dfd6086e032532cbb1fb4d6dc49c299e28f1 Mon Sep 17 00:00:00 2001 From: Lee <29015211+LeeroyHannigan@users.noreply.github.com> Date: Thu, 5 Nov 2026 16:07:13 +0000 Subject: [PATCH 5/6] build: build the images on Rust 1.91.1 The four Dockerfiles build on rust:1.91.1-bookworm, pinned by digest. Cargo refuses to build a package on a compiler older than its rust-version, so the 1.88 build stage would fail on every image. --- Dockerfile | 2 +- Dockerfile.cassandra | 2 +- Dockerfile.dev | 2 +- Dockerfile.mongodb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index e660f3d7c..dcf45ceda 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # The runtime base is explicitly approved for this public OSS distribution. # Keep both references digest-pinned and update them only through reviewed CRs. -FROM public.ecr.aws/docker/library/rust:1.88-bookworm@sha256:af306cfa71d987911a781c37b59d7d67d934f49684058f96cf72079c3626bfe0 AS build +FROM public.ecr.aws/docker/library/rust:1.91.1-bookworm@sha256:c1e5f19e773b7878c3f7a805dd00a495e747acbdc76fb2337a4ebf0418896b33 AS build ARG VCS_REF ARG BUILD_DATE WORKDIR /src diff --git a/Dockerfile.cassandra b/Dockerfile.cassandra index 9652feabf..2cfbb5f55 100644 --- a/Dockerfile.cassandra +++ b/Dockerfile.cassandra @@ -4,7 +4,7 @@ # external service: use an Apache Cassandra 4.1+ cluster you operate, or the # optional docker-compose.cassandra.yml reference stack for local development. -FROM public.ecr.aws/docker/library/rust:1.88-bookworm@sha256:af306cfa71d987911a781c37b59d7d67d934f49684058f96cf72079c3626bfe0 AS build +FROM public.ecr.aws/docker/library/rust:1.91.1-bookworm@sha256:c1e5f19e773b7878c3f7a805dd00a495e747acbdc76fb2337a4ebf0418896b33 AS build ARG VCS_REF ARG BUILD_DATE WORKDIR /src diff --git a/Dockerfile.dev b/Dockerfile.dev index 57f41f117..2a3ed0064 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -14,7 +14,7 @@ # production binaries keep readable panic backtraces. # * distroless runtime: no shell, no package manager, no setuid binaries. -FROM public.ecr.aws/docker/library/rust:1.88-bookworm@sha256:af306cfa71d987911a781c37b59d7d67d934f49684058f96cf72079c3626bfe0 AS build +FROM public.ecr.aws/docker/library/rust:1.91.1-bookworm@sha256:c1e5f19e773b7878c3f7a805dd00a495e747acbdc76fb2337a4ebf0418896b33 AS build ARG VCS_REF ARG BUILD_DATE WORKDIR /src diff --git a/Dockerfile.mongodb b/Dockerfile.mongodb index 67b4f2ed1..205ee79d9 100644 --- a/Dockerfile.mongodb +++ b/Dockerfile.mongodb @@ -4,7 +4,7 @@ # external service: use MongoDB Atlas, a managed replica set, or the optional # docker-compose.mongodb.yml reference stack. -FROM public.ecr.aws/docker/library/rust:1.88-bookworm@sha256:af306cfa71d987911a781c37b59d7d67d934f49684058f96cf72079c3626bfe0 AS build +FROM public.ecr.aws/docker/library/rust:1.91.1-bookworm@sha256:c1e5f19e773b7878c3f7a805dd00a495e747acbdc76fb2337a4ebf0418896b33 AS build ARG VCS_REF ARG BUILD_DATE WORKDIR /src From 618f503e92f5b10375cdba57213a5c7d22f5e295 Mon Sep 17 00:00:00 2001 From: Lee <29015211+LeeroyHannigan@users.noreply.github.com> Date: Thu, 5 Nov 2026 16:07:13 +0000 Subject: [PATCH 6/6] docs: name Rust 1.91.1 in the contributor and setup notes AGENTS.md and the setup references under .agents/skills name 1.91.1, the workspace rust-version. --- .../extenddb/references/setup/02-dependency-checks.md | 10 +++++----- .../skills/extenddb/references/setup/03-build-stage.md | 2 +- AGENTS.md | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.agents/skills/extenddb/references/setup/02-dependency-checks.md b/.agents/skills/extenddb/references/setup/02-dependency-checks.md index 884ccfa88..54695616d 100644 --- a/.agents/skills/extenddb/references/setup/02-dependency-checks.md +++ b/.agents/skills/extenddb/references/setup/02-dependency-checks.md @@ -8,7 +8,7 @@ This file lists the dependency checks the `extenddb-setup` skill runs before pro | Dependency | Check command | Minimum version | Rationale | |---|---|---|---| -| Rust toolchain | `cargo --version` and `rustc --version` | 1.88 | extenddb is a Rust workspace; older toolchains fail `cargo build --release`. | +| Rust toolchain | `cargo --version` and `rustc --version` | 1.91.1 | extenddb is a Rust workspace; older toolchains fail `cargo build --release`. | | PostgreSQL client | `psql --version` | 14 | extenddb speaks the Postgres protocol at init and runtime; older clients may lack required features. | | PostgreSQL server readiness | `pg_isready` | n/a (server-side check) | Confirms the server is reachable before `extenddb init`. | | Python 3 | `python3 --version` | 3.10 | Required by the sample apps and the docs build pipeline. | @@ -29,7 +29,7 @@ If `which cargo` exits nonzero, Rust is not installed. Install: - Linux (Fedora/RHEL): `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` - macOS: `brew install rustup-init && rustup-init` -If Rust is installed but `rustc --version` reports older than 1.88: +If Rust is installed but `rustc --version` reports older than 1.91.1: ```bash rustup update @@ -84,7 +84,7 @@ If `python3 --version` reports older than 3.10, upgrade via the same package man ## Version parsing -`rustc --version` prints `rustc 1.88.0 (abcdef0 2025-01-01)`. Extract the version field with `awk`: +`rustc --version` prints `rustc 1.91.1 (abcdef0 2025-01-01)`. Extract the version field with `awk`: ```bash rustc --version | awk '{print $2}' @@ -96,11 +96,11 @@ rustc --version | awk '{print $2}' psql --version | awk '{print $3}' ``` -Compare the extracted version against the minimum (1.88 for Rust, 14 for Postgres) by splitting on `.` and comparing numerically. For skill-level checks, a string prefix comparison (`[[ "$PG_VER" < "14" ]]`) is adequate because major versions are single or double digits. +Compare the extracted version against the minimum (1.91.1 for Rust, 14 for Postgres) by splitting on `.` and comparing numerically. For skill-level checks, a string prefix comparison (`[[ "$PG_VER" < "14" ]]`) is adequate because major versions are single or double digits. ## Rust version upgrade path -If Rust is installed via rustup and `rustc --version` reports older than 1.88, the fix is: +If Rust is installed via rustup and `rustc --version` reports older than 1.91.1, the fix is: ```bash rustup update diff --git a/.agents/skills/extenddb/references/setup/03-build-stage.md b/.agents/skills/extenddb/references/setup/03-build-stage.md index 8204129fc..90833bb87 100644 --- a/.agents/skills/extenddb/references/setup/03-build-stage.md +++ b/.agents/skills/extenddb/references/setup/03-build-stage.md @@ -59,4 +59,4 @@ This should print the extenddb version string. If it does not, the build failed cargo build --release --verbose ``` -Common causes of silent build failure are a missing system library (for example, `libpq-dev` or `openssl-dev` on Linux), a Rust toolchain older than 1.88, or a disk full condition under `target/`. The verbose output names the failing crate and the missing dependency. +Common causes of silent build failure are a missing system library (for example, `libpq-dev` or `openssl-dev` on Linux), a Rust toolchain older than 1.91.1, or a disk full condition under `target/`. The verbose output names the failing crate and the missing dependency. diff --git a/AGENTS.md b/AGENTS.md index 83c7ac296..992e887a2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -9,7 +9,7 @@ License. ExtendDB is a clean-room implementation of the DynamoDB wire protocol, by AWS engineers. It is not a fork of DynamoDB and contains no DynamoDB source code. ExtendDB speaks the DynamoDB wire protocol: any AWS SDK, CLI, or tool that works with DynamoDB works with ExtendDB, unchanged. -- **Language:** Rust (edition 2024, MSRV 1.88+) +- **Language:** Rust (edition 2024, MSRV 1.91.1+) - **Storage backends:** PostgreSQL 14+ (default), SQLite (bundled, no server or client install required; feature flag `sqlite`, also `sqlite-memory` for dev and CI), MongoDB 7.0+ (feature flag `mongodb`), Cassandra 4.1+ (experimental; feature flag `cassandra`). One backend per binary, selected by mutually exclusive Cargo features. - **Architecture:** Async (tokio), trait-based storage abstraction - **Authentication:** Mandatory SigV4 with built-in IAM (users, groups, roles, policies) @@ -97,7 +97,7 @@ extenddb (bin) ### Prerequisites -- Rust 1.88+ (`rustup update`) +- Rust 1.91.1+ (`rustup update`) - Storage backend (one of): - PostgreSQL 14+ running locally (see `docs/local-postgres-setup.md`) - SQLite (embedded; nothing to install) @@ -415,7 +415,7 @@ python3 docs/build-docs.py ## Code Style and Conventions - **Rust edition:** 2024 -- **MSRV:** 1.88 +- **MSRV:** 1.91.1 - **Async:** tokio, no `#[async_trait]` (use RPITIT) - **Error handling:** `thiserror` for library errors, `anyhow` for application errors - **Serialization:** `serde` + `serde_json`