|
| 1 | +3.0.0 |
| 2 | +----- |
| 3 | + |
| 4 | +March 1st, 2019 |
| 5 | + |
| 6 | +The 3.0 release improves event tracking and supports additional audience targeting functionality. |
| 7 | + |
| 8 | +New Features: |
| 9 | +~~~~~~~~~~~~~ |
| 10 | + |
| 11 | +- Event tracking: |
| 12 | + |
| 13 | + - The ``track`` method now dispatches its conversion event |
| 14 | + *unconditionally*, without first determining whether the user is |
| 15 | + targeted by a known experiment that uses the event. This may |
| 16 | + increase outbound network traffic. |
| 17 | + - In Optimizely results, conversion events sent by 3.0 SDKs are |
| 18 | + automatically attributed to variations that the user has |
| 19 | + previously seen, as long as our backend has actually received the |
| 20 | + impression events for those variations. |
| 21 | + - Altogether, this allows you to track conversion events and |
| 22 | + attribute them to variations even when you don’t know all of a |
| 23 | + user’s attribute values, and even if the user’s attribute values |
| 24 | + or the experiment’s configuration have changed such that the user |
| 25 | + is no longer affected by the experiment. As a result, **you may |
| 26 | + observe an increase in the conversion rate for |
| 27 | + previously-instrumented events.** If that is undesirable, you can |
| 28 | + reset the results of previously-running experiments after |
| 29 | + upgrading to the 3.0 SDK. |
| 30 | + - This will also allow you to attribute events to variations from |
| 31 | + other Optimizely projects in your account, even though those |
| 32 | + experiments don’t appear in the same datafile. |
| 33 | + - Note that for results segmentation in Optimizely results, the user |
| 34 | + attribute values from one event are automatically applied to all |
| 35 | + other events in the same session, as long as the events in |
| 36 | + question were actually received by our backend. This behavior was |
| 37 | + already in place and is not affected by the 3.0 release. |
| 38 | + |
| 39 | +- Support for all types of attribute values, not just strings. |
| 40 | + |
| 41 | + - All values are passed through to notification listeners. |
| 42 | + - Strings, booleans, and valid numbers are passed to the event |
| 43 | + dispatcher and can be used for Optimizely results segmentation. A |
| 44 | + valid number is a finite float or numbers.Integral in the inclusive range [-2⁵³, |
| 45 | + 2⁵³]. |
| 46 | + - Strings, booleans, and valid numbers are relevant for audience |
| 47 | + conditions. |
| 48 | + |
| 49 | +- Support for additional matchers in audience conditions: |
| 50 | + |
| 51 | + - An ``exists`` matcher that passes if the user has a non-null value |
| 52 | + for the targeted user attribute and fails otherwise. |
| 53 | + - A ``substring`` matcher that resolves if the user has a string |
| 54 | + value for the targeted attribute. |
| 55 | + - ``gt`` (greater than) and ``lt`` (less than) matchers that resolve |
| 56 | + if the user has a valid number value for the targeted attribute. A |
| 57 | + valid number is a finite float or numbers.Integral in the inclusive range [-2⁵³, |
| 58 | + 2⁵³]. |
| 59 | + - The original (``exact``) matcher can now be used to target |
| 60 | + booleans and valid numbers, not just strings. |
| 61 | + |
| 62 | +- Support for A/B tests, feature tests, and feature rollouts whose |
| 63 | + audiences are combined using ``"and"`` and ``"not"`` operators, not |
| 64 | + just the ``"or"`` operator. |
| 65 | +- Datafile-version compatibility check: The SDK will remain |
| 66 | + uninitialized (i.e., will gracefully fail to activate experiments and |
| 67 | + features) if given a datafile version greater than 4. |
| 68 | +- Updated Pull Request template and commit message guidelines. |
| 69 | + |
| 70 | +Breaking Changes: |
| 71 | +~~~~~~~~~~~~~~~~~ |
| 72 | + |
| 73 | +- Previously, notification listeners were only given string-valued user |
| 74 | + attributes because only strings could be passed into various method |
| 75 | + calls. That is no longer the case. You may pass non-string attribute |
| 76 | + values, and if you do, you must update your notification listeners to |
| 77 | + be able to receive whatever values you pass in. |
| 78 | + |
| 79 | +Bug Fixes: |
| 80 | +~~~~~~~~~~ |
| 81 | + |
| 82 | +- Experiments and features can no longer activate when a negatively |
| 83 | + targeted attribute has a missing, null, or malformed value. |
| 84 | + |
| 85 | + - Audience conditions (except for the new ``exists`` matcher) no |
| 86 | + longer resolve to ``false`` when they fail to find an legitimate |
| 87 | + value for the targeted user attribute. The result remains ``null`` |
| 88 | + (unknown). Therefore, an audience that negates such a condition |
| 89 | + (using the ``"not"`` operator) can no longer resolve to ``true`` |
| 90 | + unless there is an unrelated branch in the condition tree that |
| 91 | + itself resolves to ``true``. |
| 92 | + |
| 93 | +- Updated the default event dispatcher to log an error if the request |
| 94 | + resolves to HTTP 4xx or 5xx. (`#140`_) |
| 95 | +- All methods now validate that user IDs are strings and that |
| 96 | + experiment keys, feature keys, feature variable keys, and event keys |
| 97 | + are non-empty strings. |
| 98 | + |
| 99 | +.. _#140: https://github.com/optimizely/python-sdk/pull/140 |
| 100 | + |
1 | 101 | 2.1.1
|
2 | 102 | -----
|
3 | 103 |
|
|
0 commit comments