Repository navigation
6.5
·
422 commits
to dev
since this release
UpGrade v6.5.0 — Release Notes
More flexible 'Decision Points'
- Target is now optional when creating decision points via the API. Empty/null targets are accepted and normalized on the backend. (#2513)
- Add decision points while an experiment is paused. New decision points are flagged with a
pendingActivationproperty until the experiment activates. (#2970) - Added a Decision Point filter to the experiment list/root, can make shared decision points easier to locate. (#3159)
Slayed two performance monsters (and several smaller goblins)
- Overall improved times across client API, particularly for fetching feature-flags, due to sql and cache strategy improvements
- Experiments with many decision points and/or lists were loading slowly, this was fixed with better sql also
- Unit tests run much faster as a side-effect
Python client library
- New Python client library added under
clientlibs/python, including support for optional targets inmarkmethods. (#3090)
Sorting & filtering moved to the backend
- All sorting and filtering for the Experiments and Segments root tables is now handled server-side, with sort applied before pagination and a tie-breaker added for stable ordering. This fixes rows reordering/duplicating as you scroll and load more data. (#3102, #2894, #3172)
Feature flag exposure / data tab
- Enabled a Data tab for feature flags with a new exposure-data view, exposures labeled as unique, and spinners while metrics/log data load. (#3032)
⚠️ Deployment & operator notes
Database migrations (2 new)
Run migrations on deploy. Both target the decision_point table:
AddPendingActivationToDecisionPoint(1778284800000) — Adds apendingActivationboolean column (NOT NULL DEFAULT false) and backfills it totruefor decision points whose experiment is currentlyinactive.TargetNotNull(1779213478528) — Setsdecision_point.targettoNOT NULL.⚠️ This will fail if any existingdecision_pointrows have a nulltarget. The application now normalizes empty/null targets on the backend, but verify there are no null targets indecision_pointbefore migrating an existing database.
PostgreSQL 18 (breaking for local/dev volumes)
- Docker Compose now pins Postgres to
postgres:18-alpine(previously the unpinnedpostgres:alpine). (#3150) - The mounted data volume path changed from
/var/lib/postgresql/datato/var/lib/postgresql. ⚠️ Existing local Postgres volumes are not compatible across the major-version bump. For local dev you will likely need to drop/recreate theupgradedbdatavolume (or perform a properpg_upgrade/dump-and-restore). Back up first if the data matters.
Environment configuration changes
- New variable:
EMAIL_TMP_WRITEABLE_FILE_PATH(e.g.src/api/assets/files/) — added to.env.example,.env.docker.local.example, and.env.test. Set this in your environment. - The
.env.exampledefault forGOOGLE_AUTH_TOKEN_REQUIREDchanged fromtruetofalseand auth-related vars (ALLOW_SERVICE_ACCOUNT_TOKEN_SERVICE,GOOGLE_SERVICE_ACCOUNT_CREDENTIAL_FILE) were regrouped. Review your real.envagainst the new example — production deployments that require Google auth must still setGOOGLE_AUTH_TOKEN_REQUIRED=trueexplicitly. - A dedicated AWS Scheduler configuration section was added to the example env files (no new variables —
SCHEDULER_STEP_FUNCTION,AWS_REGION,HOST_URLregrouped for clarity). MOOCLETS_ENABLEDexample default is nowfalse.
Infrastructure / CI/CD
- Removed the old backend CloudFormation template (
cloudformation/backend/app-infrastructure.yml) and its Jenkins reference — infrastructure has moved to theaws-infrastructurerepo (ecs/bluegreen/profiles/upgrade). (#3115) - Added subnets to support all 6 availability zones.
- Frontend environment variables now sourced from AWS SSM instead of Vault.
- The
upgrade_client_libpublish pipeline now uses npm trusted publishing instead of a token. (#3091)
Behavior changes for API consumers
- Decision-point
targetis now optional on create; empty/null values are accepted and normalized server-side. Clients (including the JS and new Python client libs) support optional targets inmarkmethods. - Categorical metric creation now requires allowed values — requests without them will be rejected.
🧑💻 For developers
- Added starter
CLAUDE.md/ project-context files at the repo root and in packages, plus root-level utility scripts. (#3078) - UI login without auth is now allowed in dev mode; Google Auth login is fully removed from the UI when auth is off. (#3094)
Generated from the release/6.4 → release/6.5 commit diff (202 commits) and GitHub issues labeled release 6.5.