From 06a1586fe34695811e2c0106cf1ad714f8b360ae Mon Sep 17 00:00:00 2001 From: Renn F Date: Thu, 15 Oct 2026 06:09:41 +0200 Subject: [PATCH] release(3.2.4): Redis persistence off the request path, lockstep with the agent family --- .mike.yml | 3 ++- CHANGELOG.md | 10 ++++++++++ docs/release-notes.md | 20 +++++++++++++++----- docs/versions/versions.json | 3 ++- guard_agent/_version.py | 2 +- pyproject.toml | 2 +- 6 files changed, 31 insertions(+), 9 deletions(-) diff --git a/.mike.yml b/.mike.yml index 2341fa2..8a08b1d 100644 --- a/.mike.yml +++ b/.mike.yml @@ -2,6 +2,7 @@ version_selector: true title_switch: true versions_file: docs/versions/versions.json versions: + - 3.2.4 - 3.2.3 - 3.2.2 - 3.2.1 @@ -33,4 +34,4 @@ versions: - 0.0.1 - latest aliases: - latest: 3.2.3 + latest: 3.2.4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a1a49e..1658ea7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,16 @@ Release Notes ___ +v3.2.4 (2026-10-15) +------------------- + +Redis persistence off the request path +-------------------------------------- + +Persisting events and metrics to Redis no longer happens under the buffer lock. The in-memory append stays on the request path and the Redis write runs as a tracked background task that `stop_auto_flush` drains, so a slow or failing Redis no longer delays requests. A Redis failure can no longer re-enter persistence, which removes a deadlock that blocked every later `send_event` once Redis started failing. In-flight writes are capped at `buffer_size`: past the cap an item stays in memory only, counts as a persist failure, and one warning is logged per backlog episode. Items flushed or evicted before their write starts are never written, and a failed write no longer leaves tracking state behind. Unpadded base64url project keys are accepted, and the startup encryption error now includes the underlying cause. Lockstep release with the agent family at 3.2.4. + +___ + v3.2.3 (2026-10-12) ------------------- diff --git a/docs/release-notes.md b/docs/release-notes.md index 2c8f162..fbe7b50 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -21,6 +21,16 @@ The parity release: agent feature surface locked across all four language ports ___ +v3.2.4 (2026-10-15) +------------------- + +Redis persistence off the request path +-------------------------------------- + +Persisting events and metrics to Redis no longer happens under the buffer lock. The in-memory append stays on the request path and the Redis write runs as a tracked background task that `stop_auto_flush` drains, so a slow or failing Redis no longer delays requests. A Redis failure can no longer re-enter persistence, which removes a deadlock that blocked every later `send_event` once Redis started failing. In-flight writes are capped at `buffer_size`: past the cap an item stays in memory only, counts as a persist failure, and one warning is logged per backlog episode. Items flushed or evicted before their write starts are never written, and a failed write no longer leaves tracking state behind. Unpadded base64url project keys are accepted, and the startup encryption error now includes the underlying cause. Lockstep release with the agent family at 3.2.4. + +___ + v3.2.3 (2026-10-12) ------------------- @@ -44,10 +54,10 @@ ___ v3.2.1 (2026-10-07) ------------------- -TITLE (v3.2.1) ------------- +The lockstep release: version alignment with the engines at 4.3.1 (v3.2.1) +-------------------------------------------------------------------------- -CONTENT +No agent behavior changes. Shipped so the agents family moves in lockstep with the engines at 4.3.1 while guard-agent-ts carries the js/polynomial-redos fix (linear `stripTrailingSlashes` replacing anchored quantifier regexes in `config.ts`/`transport.ts`, CodeQL HIGH). ___ @@ -72,8 +82,8 @@ ___ v3.0.2 (2026-09-23) ------------------- -TITLE (v3.0.2) ------------- +Payload signatures now cover the uncompressed body (v3.0.2) +----------------------------------------------------------- ### Fixed diff --git a/docs/versions/versions.json b/docs/versions/versions.json index 850c588..b7d915c 100644 --- a/docs/versions/versions.json +++ b/docs/versions/versions.json @@ -1,4 +1,5 @@ { + "3.2.4": "3.2.4", "3.2.3": "3.2.3", "3.2.2": "3.2.2", "3.2.1": "3.2.1", @@ -28,5 +29,5 @@ "0.1.1": "0.1.1", "0.1.0": "0.1.0", "0.0.1": "0.0.1", - "latest": "3.2.3" + "latest": "3.2.4" } diff --git a/guard_agent/_version.py b/guard_agent/_version.py index 70991b2..bf7fd9d 100644 --- a/guard_agent/_version.py +++ b/guard_agent/_version.py @@ -1,3 +1,3 @@ """Single source of truth for the package version, importable without side-effects.""" -__version__ = "3.2.3" +__version__ = "3.2.4" diff --git a/pyproject.toml b/pyproject.toml index ebddcd9..a3640c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "guard-agent" -version = "3.2.3" +version = "3.2.4" description = "Framework-agnostic telemetry and monitoring agent for the Guard security ecosystem (fastapi-guard, flaskapi-guard, djangoapi-guard, tornadoapi-guard)" authors = [ {name = "Renzo Franceschini", email = "rennf93@guard-core.com"}