From 15b66e3f285fe7bf7cfde3e45464888518f05777 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 19:16:07 +0000 Subject: [PATCH 1/2] chore(main): release 2.3.1 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 11 +++++++++++ growthbook/__init__.py | 2 +- setup.cfg | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index f5b8664..23bd16f 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.3.0" + ".": "2.3.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b730e6..e866319 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## [2.3.1](https://github.com/growthbook/growthbook-python/compare/v2.3.0...v2.3.1) (2026-06-18) + + +### Bug Fixes + +* _js_strict_equal returns False for array/object operands (JS === reference identity) ([a8ff302](https://github.com/growthbook/growthbook-python/commit/a8ff302a985f123ebea77a4d624814a376632979)) +* align $eq/$ne with JS strict semantics and $ini/$nini/$alli with ASCII-only case-fold ([7f9d2d2](https://github.com/growthbook/growthbook-python/commit/7f9d2d24e6df1b863a1dc269933e4868105a1ac5)) +* cast _js_strict_equal result to bool to satisfy mypy ([b011fee](https://github.com/growthbook/growthbook-python/commit/b011fee86fadad6f3db58bdf234c9dc6fe099285)) +* raise on NaN in compare() so IEEE 754 semantics propagate ([672136a](https://github.com/growthbook/growthbook-python/commit/672136a629cb3dd191825ceb6250b890c3fab626)) +* revert phantom D10 "ASCII-only fold" — JS toLowerCase is Unicode-aware ([5f45087](https://github.com/growthbook/growthbook-python/commit/5f45087a75a68896a0efdd43107a55da1600f85f)) + ## [2.3.0](https://github.com/growthbook/growthbook-python/compare/v2.2.2...v2.3.0) (2026-06-05) ### Features diff --git a/growthbook/__init__.py b/growthbook/__init__.py index 6549777..2e9f1cf 100644 --- a/growthbook/__init__.py +++ b/growthbook/__init__.py @@ -18,5 +18,5 @@ ) # x-release-please-start-version -__version__ = "2.3.0" +__version__ = "2.3.1" # x-release-please-end diff --git a/setup.cfg b/setup.cfg index 6d64d14..083bf98 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2.3.0 +current_version = 2.3.1 commit = True tag = True From e7b41ad044cc162401f80a88f7c6c32adf3e1335 Mon Sep 17 00:00:00 2001 From: Madhu Chavva <46016208+madhuchavva@users.noreply.github.com> Date: Thu, 18 Jun 2026 14:20:18 -0700 Subject: [PATCH 2/2] Revise CHANGELOG for version 2.3.1 updates Updated changelog to reflect fixes and enhancements in version 2.3.1, including changes to equality semantics and comparison handling. --- CHANGELOG.md | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e866319..2c06c8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,28 @@ ## [2.3.1](https://github.com/growthbook/growthbook-python/compare/v2.3.0...v2.3.1) (2026-06-18) -### Bug Fixes +### Fixes & Enhancements + +* Align condition equality with JavaScript strict equality semantics: + * `$eq` and direct equality no longer coerce across types, so values like `5` and `"5"` or `true` and `1` no longer match. + * `$ne` now returns the inverse of strict equality for these cases. + * Array and object operands follow JavaScript reference-identity semantics, so separately parsed but structurally equal arrays/objects do not match with `$eq`. + ([7f9d2d](https://github.com/growthbook/growthbook-python/commit/7f9d2d24e6df1b863a1dc269933e4868105a1ac5), [a8ff302](https://github.com/growthbook/growthbook-python/commit/a8ff302a985f123ebea77a4d624814a376632979), [b011fee](https://github.com/growthbook/growthbook-python/commit/b011fee86fadad6f3db58bdf234c9dc6fe099285)) +* Fix `NaN` comparison handling so `NaN` does not compare equal to itself and ordered comparisons involving `NaN` evaluate as false. + ([672136a](https://github.com/growthbook/growthbook-python/commit/672136a629cb3dd191825ceb6250b890c3fab626)) +* Preserve JavaScript-compatible Unicode lowercasing behavior for case-insensitive operators such as `$ini`, `$nini`, and `$alli`. + ([5f45087](https://github.com/growthbook/growthbook-python/commit/5f45087a75a68896a0efdd43107a55da1600f85f)) + +### Tests and CI + +* Expanded SDK conformance coverage for condition operators, prerequisite/parent-condition cases, force-rule `hashVersion: 2`, and sticky-bucket bucket-version boundaries. + ([505c8e1](https://github.com/growthbook/growthbook-python/commit/505c8e1d44a0e9f51f9d4c8c98bc656ad0d965238), [a95ce02](https://github.com/growthbook/growthbook-python/commit/a95ce023a86d91c337f87aed415a57e05eb05ceb), [076eab8](https://github.com/growthbook/growthbook-python/commit/076eab860afc7016fa812f41f5d57db14382c7cd)) +* Added a corpus freshness check against the JavaScript SDK cases corpus to catch missing or drifted cases. + ([e428acb](https://github.com/growthbook/growthbook-python/commit/e428acba2559e8eddf3714703f03b0994b3b25220), [460f581](https://github.com/growthbook/growthbook-python/commit/460f5818c4771296d925a3a9af62d59e1435ad14), [a030b66](https://github.com/growthbook/growthbook-python/commit/a030b669a41a2cff2831f98195898dff4e00ebe3)) + +### Compatibility note -* _js_strict_equal returns False for array/object operands (JS === reference identity) ([a8ff302](https://github.com/growthbook/growthbook-python/commit/a8ff302a985f123ebea77a4d624814a376632979)) -* align $eq/$ne with JS strict semantics and $ini/$nini/$alli with ASCII-only case-fold ([7f9d2d2](https://github.com/growthbook/growthbook-python/commit/7f9d2d24e6df1b863a1dc269933e4868105a1ac5)) -* cast _js_strict_equal result to bool to satisfy mypy ([b011fee](https://github.com/growthbook/growthbook-python/commit/b011fee86fadad6f3db58bdf234c9dc6fe099285)) -* raise on NaN in compare() so IEEE 754 semantics propagate ([672136a](https://github.com/growthbook/growthbook-python/commit/672136a629cb3dd191825ceb6250b890c3fab626)) -* revert phantom D10 "ASCII-only fold" — JS toLowerCase is Unicode-aware ([5f45087](https://github.com/growthbook/growthbook-python/commit/5f45087a75a68896a0efdd43107a55da1600f85f)) +There are no API changes, but this release can change feature targeting results for customers whose conditions relied on Python’s previous coercive equality behavior. ## [2.3.0](https://github.com/growthbook/growthbook-python/compare/v2.2.2...v2.3.0) (2026-06-05)