Skip to content

Commit 9524d19

Browse files
authored
Update CHANGELOG for v4.3.0 release (#449)
- Add Contextual Multi-Armed Bandit (CMAB) Support as headline feature - Include Redis Streams auto-detection and notification improvements - Add flexible Redis authentication across all services - Release date: November 20, 2025
1 parent e9ed0f2 commit 9524d19

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

CHANGELOG.md

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,43 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
66

77
## [Unreleased]
88

9+
## [4.3.0] - November 20, 2025
10+
11+
This release introduces production-ready support for Contextual Multi-Armed Bandit (CMAB), enabling AI-powered experimentation that learns and adapts in real-time based on user context.
12+
913
### New Features
1014

11-
* **Redis Streams for Persistent Notification Delivery**: Added Redis Streams implementation as an alternative to Redis Pub/Sub for notification synchronization across Agent nodes. Redis Streams provides:
15+
* **Contextual Multi-Armed Bandit (CMAB) Support** ([#446](https://github.com/optimizely/agent/pull/446), [#447](https://github.com/optimizely/agent/pull/447)): Agent now fully supports Optimizely's Contextual Multi-Armed Bandit feature for intelligent experiment variation selection. Features include:
16+
- Full CMAB decision API integration using go-sdk v2.1.1 client.CmabConfig API
17+
- In-memory LRU cache (default, size: 10000, TTL: 30m) for single-instance deployments
18+
- Redis cache for multi-instance deployments with shared decision caching
19+
- Configurable via `client.cmab.cache` in config.yaml
20+
- Configurable prediction endpoint via `client.cmab.predictionEndpoint` for testing/staging environments
21+
- Flexible Redis authentication support (auth_token, redis_secret, password fields)
22+
- Follows the same plugin-based architecture as ODP cache for consistency
23+
24+
This enables efficient scaling of CMAB-powered feature experiments across multiple Agent instances with shared caching and real-time learning.
25+
26+
* **Redis Version Auto-Detection for Notifications** ([#448](https://github.com/optimizely/agent/pull/448)): Agent now automatically detects Redis version at startup and selects the optimal notification implementation:
27+
- Redis >= 5.0: Uses Redis Streams (persistent, batched delivery with acknowledgment)
28+
- Redis < 5.0: Uses Redis Pub/Sub (fire-and-forget)
29+
- Detection fails: Falls back to Redis Pub/Sub (safe default)
30+
31+
Simply configure `synchronization.notification.default: "redis"` and Agent handles the rest. No configuration changes needed when upgrading Redis versions.
32+
33+
* **Redis Streams for Persistent Notification Delivery** ([#448](https://github.com/optimizely/agent/pull/448)): Added Redis Streams implementation for notification synchronization across Agent nodes. Redis Streams provides:
1234
- Persistent message delivery with acknowledgment
1335
- Automatic retries with exponential backoff
1436
- Consumer groups for load balancing
15-
- Configurable batching and flush intervals
37+
- Configurable batching and flush intervals (batch_size, flush_interval)
1638
- Connection error recovery with reconnection logic
1739
- Comprehensive metrics tracking
1840

19-
Configure via `synchronization.notification.default: "redis-streams"` in config.yaml. See [docs/redis-streams.md](docs/redis-streams.md) for configuration options including batch_size, flush_interval, max_retries, and connection_timeout.
20-
21-
* **CMAB Redis Cache Support** ([#447](https://github.com/optimizely/agent/pull/447)): Added Redis cache support for Contextual Multi-Armed Bandit (CMAB) decisions following the same plugin-based architecture as ODP cache:
22-
- In-memory LRU cache (default, size: 10000, TTL: 30m)
23-
- Redis cache for multi-instance deployments with shared caching
24-
- Configurable via `client.cmab.cache` in config.yaml
25-
- Supports both in-memory and Redis cache backends
41+
Automatically enabled when Redis >= 5.0 is detected. See [docs/redis-streams.md](docs/redis-streams.md) for advanced configuration options.
2642

2743
* **Flexible Redis Authentication**: Added support for flexible Redis password field names across all Redis clients (ODP cache, UPS, CMAB cache, and synchronization):
2844
- Supports `auth_token`, `redis_secret`, and `password` fields (in order of preference)
29-
- Falls back to environment variables: `REDIS_PASSWORD`, `REDIS_ODP_PASSWORD`, `REDIS_UPS_PASSWORD`, `REDIS_CMAB_PASSWORD`
45+
- Falls back to environment variables: `REDIS_PASSWORD`, `REDIS_ODP_PASSWORD`, `REDIS_UPS_PASSWORD`, `REDIS_CMAB_PASSWORD`, `REDIS_PUBSUB_PASSWORD`
3046
- Avoids security scanning alerts from hardcoded "password" field names
3147

3248
* **CMAB Prediction Endpoint Configuration**: Added configurable CMAB prediction endpoint via `client.cmab.predictionEndpoint` in config.yaml or `OPTIMIZELY_CMAB_PREDICTIONENDPOINT` environment variable for testing/staging environments
@@ -40,6 +56,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
4056

4157
* Improved Redis connection error handling and recovery across all Redis clients
4258
* Added comprehensive test coverage for Redis authentication and CMAB caching
59+
* Added SSE timeout warning in config.yaml to help users configure proper timeouts for notification streams
4360

4461
## [4.2.2] - October 7, 2025
4562

0 commit comments

Comments
 (0)