Skip to content

v3.2.4

Latest

Choose a tag to compare

@rennf93 rennf93 released this 15 Oct 21:53
· 7 commits to master since this release
Immutable release. Only release title and notes can be modified.
73b4f59

v3.2.4 (2026-10-15)

Redis persistence off the request path and Python agent parity (v3.2.4)

Fixed

  • addEvent and addMetric no longer await Redis, so a slow or failing Redis no longer delays requests that emit events. A Redis failure that reported through sendEvent used to re-enter persistence through unbounded async recursion; persists are now tracked background promises scoped by AsyncLocalStorage and drained on stop. In-flight persists are capped at bufferSize (shared by events and metrics): past the cap the item stays in memory only, counts toward redisPersistFailures, and one warning is logged per degradation episode. The startup encryption error now includes the cause. Lockstep release with the agent family at 3.2.4.
  • The rules loop starts only when projectId is set, like the Python agent. Without a project id there is nothing to fetch rules for.
  • Redis keys use a wall-clock epoch nanosecond stamp at microsecond resolution (performance.timeOrigin + performance.now()), like time.time_ns() in the Python agent. Reload keeps the reference semantics: keys are walked in the order Redis returns them.
  • SecurityEvent keeps unknown fields as extra and eventToWire sends them, like the reference extra="allow". They survive metadata redaction and a Redis round trip and never override a known field.
  • getStats() keeps the reference key set (pinned by a test). The code comment on signing.ts now states that the signature covers the uncompressed body.