Skip to content

Choose a tag to compare

@danoswaltCL danoswaltCL released this 14 Oct 19:14
· 126 commits to dev since this release
5d1ef32

✨ 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/reward now replies right away and records the reward in the background. To wait for the real result (including a 409 if 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

  • /mark and /assign now pick the same experiment when several experiments share a decision point (pooling). Before, marks could be credited to the wrong experiment.
  • /v6/mark now accepts context and returns 400 for an invalid context. Older clients that don't send context still 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 404 instead of 204 for 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-validator removed), sends context on mark, and sends Client-Context and Client-Version headers.
  • Java: sends context on 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. The nativeThompsonSampling migration drops the MoocLet tables and converts existing ts_configurable experiments to thompson_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=true writes perfdiag JSON 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 clientContext and clientVersion.