From 0a82de4770f7f8127a33e4d7fa9c8ee9a90192de Mon Sep 17 00:00:00 2001 From: Renn F Date: Fri, 16 Oct 2026 03:45:26 +0200 Subject: [PATCH] release(2.0.0): train with guard-core-rs 4.4.0 Version 2.0.0 (GuardConfigError gained the Config and Agent variants, a breaking change for exhaustive matches). The guard-core-engine and guard-core-rs floors move to 4.4.0 and the optional guard-agent-rs to 3.2.4. The Unreleased changelog section becomes v2.0.0 with a Breaking note. --- CHANGELOG.md | 14 ++++++++++++-- Cargo.lock | 10 +++++----- Cargo.toml | 8 ++++---- examples/advanced_app/Cargo.toml | 2 +- examples/simple_app/Cargo.toml | 2 +- 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee8808f..7f302dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,18 @@ All notable changes to this project. -Unreleased ----------- +v2.0.0 (2026-10-16) +------------------- + +The reference-parity release, training with the 4.4.0 engine: route country rules and the unknown client identity, live dynamic rules, validated config, strict routes, the body read timeout and the agent from config (v2.0.0) +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### Breaking + +- `GuardConfigError` gains the `Config` variant (the engine now runs `SecurityConfig::validate` before wiring) and the `Agent` variant (an agent built from the `agent_*` fields that fails under `agent_strict`), so an exhaustive `match` over it needs arms for both. +- Trains with the engine: the `guard-core-engine` and `guard-core-rs` floors move to 4.4.0, and the optional `guard-agent-rs` to 3.2.4. `SecurityConfig` gains public fields, so a struct literal needs `..Default::default()`; an invalid IP list entry is now reported as `Config` instead of `IpGate`. +- Behavior to know before upgrading: a route whitelist match no longer overrides a blocked country, the unknown client identity is denied on a route with an `ip_whitelist` or `whitelist_countries`, route usage rules run after the security pipeline, each dynamic rule version applies over the base config instead of stacking, a request body that does not arrive within `body_read_timeout` is answered 408, and `route_resolution_strict` answers an unresolved route with 500. + The parity release: the reference `exclude_paths`, client and response-pass semantics, and the whole `SecurityConfig` through the facade's `Wiring`. diff --git a/Cargo.lock b/Cargo.lock index 6b945b0..4a7db4b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -777,9 +777,9 @@ checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "guard-agent-rs" -version = "3.2.3" +version = "3.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b2d4523c9957066fa1dd92331a95cd8fe9378c797f9ecaf05360c875866586" +checksum = "c1db239a662a587ce8a0b72f88ad131b0974ce2e9df85f494956e351d23d97b6" dependencies = [ "aes-gcm", "async-trait", @@ -801,7 +801,7 @@ dependencies = [ [[package]] name = "guard-core-engine" -version = "4.3.3" +version = "4.4.0" dependencies = [ "chrono", "chrono-tz", @@ -820,7 +820,7 @@ dependencies = [ [[package]] name = "guard-core-rs" -version = "4.3.3" +version = "4.4.0" dependencies = [ "chrono", "guard-core-engine", @@ -1932,7 +1932,7 @@ dependencies = [ [[package]] name = "rocket-guard-rs" -version = "1.5.0" +version = "2.0.0" dependencies = [ "chrono", "guard-agent-rs", diff --git a/Cargo.toml b/Cargo.toml index e92dd27..f7e981b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["examples/simple_app", "examples/advanced_app"] [package] name = "rocket-guard-rs" -version = "1.5.0" +version = "2.0.0" edition = "2024" rust-version = "1.92" description = "Application-layer security Fairing for Rocket, powered by the guard-core-rs engine. Part of the guard ecosystem." @@ -21,13 +21,13 @@ name = "rocket_guard_rs" # engine crate inside a sibling guard-core-rs checkout so local builds and CI # (see .github/workflows/ci.yml) exercise the engine from source. The version # pin stays in lockstep with the published engine release. -guard-core-engine = { path = "../guard-core-rs/crates/guard-core-engine", version = "4.3.2" } +guard-core-engine = { path = "../guard-core-rs/crates/guard-core-engine", version = "4.4.0" } # The engine facade (the event bus, observability knobs, the on_block hook, # custom error responses, and the rate-limit stage the fairing delegates to). # Path points at the sibling guard-core-rs checkout so local builds and CI # exercise it from source; the version pin stays in lockstep with the # published facade release. -guard-core-rs = { path = "../guard-core-rs/crates/guard-core-rs", version = "4.3.2" } +guard-core-rs = { path = "../guard-core-rs/crates/guard-core-rs", version = "4.4.0" } rocket = { version = "0.5.1", default-features = false } rocket_ws = { version = "0.1.1", features = ["tokio-tungstenite"] } serde_json = "1" @@ -38,7 +38,7 @@ chrono = "0.4" # depends on the guard-core-rs facade (its `guard-core` feature), never the # reverse, so the facade cannot own this and each adapter does. The runtime # handle the agent's async tasks run on comes from the caller's tokio runtime. -guard-agent-rs = { version = "3.2.3", optional = true, default-features = false, features = ["guard-core"] } +guard-agent-rs = { version = "3.2.4", optional = true, default-features = false, features = ["guard-core"] } tokio = { version = "1", optional = true, default-features = false, features = ["rt"] } [features] diff --git a/examples/advanced_app/Cargo.toml b/examples/advanced_app/Cargo.toml index 2988592..2c01155 100644 --- a/examples/advanced_app/Cargo.toml +++ b/examples/advanced_app/Cargo.toml @@ -8,7 +8,7 @@ description = "Production-shaped rocket-guard-rs example service." [dependencies] rocket = { version = "0.5.1", default-features = false, features = ["json"] } -rocket-guard-rs = { path = "../..", version = "1.5.0" } +rocket-guard-rs = { path = "../..", version = "2.0.0" } tokio = { version = "1", features = ["macros", "rt-multi-thread"] } [lints.rust] diff --git a/examples/simple_app/Cargo.toml b/examples/simple_app/Cargo.toml index 942209c..ba127d9 100644 --- a/examples/simple_app/Cargo.toml +++ b/examples/simple_app/Cargo.toml @@ -8,7 +8,7 @@ description = "Minimal rocket-guard-rs example service." [dependencies] rocket = { version = "0.5.1", default-features = false, features = ["json"] } -rocket-guard-rs = { path = "../..", version = "1.5.0" } +rocket-guard-rs = { path = "../..", version = "2.0.0" } tokio = { version = "1", features = ["macros", "rt-multi-thread"] } [lints.rust]