Repository navigation
·
126 commits
to dev
since this release
✨ New
- Native Thompson Sampling (adaptive experiments). Adaptive experiments now run entirely inside UpGrade; the external MoocLet service is no longer needed. The experiment form looks the same, but some settings have new names: Warmup Threshold, Batch Size, Minimum Draw Difference, plus success/failure priors for each condition. Thompson Sampling can't be combined with Within-Subjects assignment.
POST /v6/rewardnow replies right away and records the reward in the background. To wait for the real result (including a409if the reward couldn't be recorded), add?awaitResult=true.
- List details page. Open an include/exclude list to page through its values, add, edit, or delete them, and import or export them as CSV.
- Search by list value. On the Experiments, Feature Flags, and Segments pages, you can search for a value inside their lists, for example every experiment that includes a given school ID.
- Better error screens. Experiment, feature flag, and segment pages now show a "not found" or error screen with a retry button instead of spinning forever.
- Protected metrics. A metric that an experiment uses can no longer be deleted. The UI disables the delete button, and the API returns
409.
🐛 Fixes
/markand/assignnow pick the same experiment when several experiments share a decision point (pooling). Before, marks could be credited to the wrong experiment./v6/marknow acceptscontextand returns400for an invalid context. Older clients that don't sendcontextstill work, because the server works it out. This will be deprecated in a future release.- The Edit List modal now fills in correctly for legacy list types.
- Deleting an experiment, feature flag, or segment now waits for its private lists to be cleaned up before it finishes.
- The feature flag API now returns
404instead of204for unknown IDs.
⚡ Performance
/assign: segment joins were removed from the main query, and the exclusion lookups now run in parallel.- Experiment list and detail queries no longer multiply rows across inclusions and exclusions.
📦 Client libraries
- JS 6.7.0: smaller bundle (
class-validatorremoved), sendscontexton mark, and sendsClient-ContextandClient-Versionheaders. - Java: sends
contexton mark and sends the client-context and client-version headers. - C#: the client library has been removed because it was unsupported.
⚠️ Breaking changes and operator notes
- The v5 client API has been removed. All
/api/v5/*client endpoints are gone, so clients must use v6. - MoocLet has been removed. The
MOOCLETS_*environment variables are no longer read. ThenativeThompsonSamplingmigration drops the MoocLet tables and converts existingts_configurableexperiments tothompson_sampling. - New optional DB pool settings:
TYPEORM_MIN_CONNECTION_POOL_SIZE,TYPEORM_IDLE_TIMEOUT_SECONDS,TYPEORM_MAX_LIFETIME_SECONDS,TYPEORM_KEEP_ALIVE,TYPEORM_KEEP_ALIVE_INITIAL_DELAY_SECONDS. If you leave them unset, the pool behaves as it did before. - Temporary diagnostics: setting
PERF_DIAG_ENABLED=truewritesperfdiagJSON lines to stdout. They cover the event loop, GC, the pg pool and its settings, and cache writes. - New Relic: client API transactions are now tagged with
clientContextandclientVersion.