You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Today experiments exist only inside the page editor: the entry point is the UVE nav item (experiments/${page.identifier}), the list is per-page, and the create form is a drawer with only name and description because the page comes from the route context. A screen listing every experiment on the site has never existed, and there is no way to create an experiment by choosing a page.
This EPIC creates a new site-wide Experiments portlet — list, routed creation/configuration (/experiments/new is the Configure screen with an empty draft), and results — and modernizes the stack (NgRx Signal Store + Events plugin, replacing ComponentStore). Everything new works without the old flow ever breaking: both coexist in the same build, and the one place they overlap (the UVE experiments entry point) is switched by FEATURE_FLAG_EXPERIMENTS, off by default.
Strategy
Build the new portlet complete, then migrate and delete the old one. The old per-page UI stays untouched throughout; a final migration issue points UVE at the new flow and deletes the old tree.
Additive while both coexist. New code lives in a new site-wide/ subtree of libs/portlets/dot-experiments/portlet/. Only three existing files gain one line each (lib index.ts, app.routes.ts, Language.properties). Deliberate exceptions: the UVE-integration issue (behind the flag) and the migration.
Two switches. The feature flag switches UVE entry-point behavior; portlet registration gates the portlet itself — NOT registered for customers in this scope (a flag cannot hide a nav item: /api/v1/menu does not read flags and MenuGuardService bounces unregistered routes). Manual cms_layouts_portlets row on dev/QA for testing.
One frontend issue per screen, each with its own Jest specs; E2E is a dedicated issue (no experiments E2E exists today, and the migration must not run without that safety net).
Functional parity
The design prototype describes less functionality than the current UI has. Twelve existing behaviors (row actions, inplace variant rename, copy-variant URL, page-lock awareness, scheduling time + duration bounds, results refresh, 10-session gate, promoted state, and more) are ported explicitly — each is an acceptance criterion in the issue that owns its screen. Nothing the current UI does is dropped silently.
Nothing is deleted (migration) before every ported behavior is verified on the dev/QA instance and the E2E suite is green.
The PATCH side-effect fix blocks Create/Update: autosave is the creation mechanism, and today every PATCH creates an empty Rule.
Desired Outcome
A user can list every experiment on a site, and create, configure, start and analyze an experiment end-to-end from the portlet, without opening the page editor.
With the flag off, the existing UVE experiments flow behaves byte-identically to today at every point of this EPIC's development.
At completion, a single modern implementation remains (old tree deleted, flag removed), with E2E coverage that experiments have never had.
Description
Today experiments exist only inside the page editor: the entry point is the UVE nav item (
experiments/${page.identifier}), the list is per-page, and the create form is a drawer with only name and description because the page comes from the route context. A screen listing every experiment on the site has never existed, and there is no way to create an experiment by choosing a page.This EPIC creates a new site-wide Experiments portlet — list, routed creation/configuration (
/experiments/newis the Configure screen with an empty draft), and results — and modernizes the stack (NgRx Signal Store + Events plugin, replacing ComponentStore). Everything new works without the old flow ever breaking: both coexist in the same build, and the one place they overlap (the UVE experiments entry point) is switched byFEATURE_FLAG_EXPERIMENTS, off by default.Strategy
site-wide/subtree oflibs/portlets/dot-experiments/portlet/. Only three existing files gain one line each (libindex.ts,app.routes.ts,Language.properties). Deliberate exceptions: the UVE-integration issue (behind the flag) and the migration./api/v1/menudoes not read flags andMenuGuardServicebounces unregistered routes). Manualcms_layouts_portletsrow on dev/QA for testing.Functional parity
The design prototype describes less functionality than the current UI has. Twelve existing behaviors (row actions, inplace variant rename, copy-variant URL, page-lock awareness, scheduling time + duration bounds, results refresh, 10-session gate, promoted state, and more) are ported explicitly — each is an acceptance criterion in the issue that owns its screen. Nothing the current UI does is dropped silently.
Issues
/experiments/new+/:id/configuration)FEATURE_FLAG_EXPERIMENTS+ variant Edit Content round-tripHard gates
list()ignores itsUserargument entirely.Desired Outcome
Target Personas
Links
36aed5a6-ca42-4624-b187-a465a23ce909, fileExperiments.dc.html(4 screens + 2 modals)libs/portlets/dot-tags/· Store reference:libs/image-editor/(Signal Store Events)