From e0ca5689e2dc1a108b5c32c4aaba3d2bef21107f Mon Sep 17 00:00:00 2001 From: Matjaz Pirnovar Date: Tue, 14 Jul 2026 12:04:24 -0700 Subject: [PATCH] [FSSDK-12877] Prepare Agent release v4.5.0 Add CHANGELOG entry for 4.5.0: local (per-rule) holdouts and Feature Rollout support via the go-sdk v2.3.0 -> v2.5.0 upgrade, plus the maintenance/dependency changes since 4.4.0. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d6b1fed..fbc37f7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,37 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [4.5.0] - July 14, 2026 + +This release adds support for **local (per-rule) holdouts** and **Feature Rollouts**, delivered by upgrading the embedded go-sdk from v2.3.0 to v2.5.0. It builds on the global holdouts support introduced in 4.4.0. + +### New Features + +* **Local Holdouts Support** ([#464](https://github.com/optimizely/agent/pull/464)): Agent now supports local (per-rule) holdouts in addition to global holdouts, via go-sdk v2.5.0. Local holdouts target specific rules and are evaluated per-rule, after forced decisions and before audience/traffic checks. Held-out decisions return `enabled: false`, `variationKey: "ho_off_key"`, and `ruleKey` set to the holdout identifier, with impression `rule_type: "holdout"`. As with global holdouts, all decision logic is handled by go-sdk — no Agent code changes are required beyond updating the `ProjectConfig` test mock. +* **Feature Rollout Support** ([#463](https://github.com/optimizely/agent/pull/463)): Via go-sdk v2.4.0, Agent now supports Feature Rollouts — a rule type combining Targeted Delivery with A/B test measurement capabilities. + +### Behavior Changes + +These changes come from the go-sdk v2.4.0 → v2.5.0 upgrade: + +* **Decision event ID normalization**: decision event `campaign_id` and `entity_id` fall back to `experiment_id` when empty, and `variation_id` serializes as `null` when non-numeric, for cross-SDK consistency. +* **ODP identify guard**: ODP identify events carrying only a single identifier are now blocked. +* **Removed legacy flag-level holdout fields** from datafile parsing. + +### Maintenance + +* Upgrade go-sdk v2.3.0 → v2.5.0 ([#459](https://github.com/optimizely/agent/pull/459), [#463](https://github.com/optimizely/agent/pull/463), [#464](https://github.com/optimizely/agent/pull/464)) +* Add Dependabot to auto-update the go-sdk dependency ([#458](https://github.com/optimizely/agent/pull/458)) +* Remove Coveralls from CI checks ([#462](https://github.com/optimizely/agent/pull/462)) +* Add Agent developer documentation ([#461](https://github.com/optimizely/agent/pull/461)) +* Fix Arnica security vulnerabilities ([#460](https://github.com/optimizely/agent/pull/460)) +* Synchronize linters between go-sdk and agent ([#457](https://github.com/optimizely/agent/pull/457)) +* Fix Dependabot alerts ([#455](https://github.com/optimizely/agent/pull/455), [#456](https://github.com/optimizely/agent/pull/456)) + +### Dependencies + +* Upgraded `github.com/optimizely/go-sdk/v2` from v2.3.0 to **v2.5.0** + ## [4.4.0] - December 18, 2025 This release adds support for Holdouts, allowing you to measure the incremental impact of feature flags and experiments by holding back a percentage of users from seeing any changes.