@delmaredigital/payload-experiments 0.0.0-stage → 0.1.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +582 -2
- package/dist/access.d.ts +1 -0
- package/dist/access.js +2 -0
- package/dist/admin/AllocationField.d.ts +2 -0
- package/dist/admin/AllocationField.js +80 -0
- package/dist/admin/FlagPointSelect.d.ts +2 -0
- package/dist/admin/FlagPointSelect.js +54 -0
- package/dist/admin/LayerUsage.d.ts +2 -0
- package/dist/admin/LayerUsage.js +24 -0
- package/dist/admin/LockedFieldNotice.d.ts +2 -0
- package/dist/admin/LockedFieldNotice.js +26 -0
- package/dist/admin/MetricSourceSelect.d.ts +2 -0
- package/dist/admin/MetricSourceSelect.js +32 -0
- package/dist/admin/PhaseHistory.d.ts +2 -0
- package/dist/admin/PhaseHistory.js +76 -0
- package/dist/admin/PreviewLinks.d.ts +11 -0
- package/dist/admin/PreviewLinks.js +69 -0
- package/dist/admin/StatusCell.d.ts +3 -0
- package/dist/admin/StatusCell.js +19 -0
- package/dist/admin/SummaryCell.d.ts +2 -0
- package/dist/admin/SummaryCell.js +32 -0
- package/dist/admin/actions/AddMetricDialog.d.ts +6 -0
- package/dist/admin/actions/AddMetricDialog.js +138 -0
- package/dist/admin/actions/AllocateDialog.d.ts +6 -0
- package/dist/admin/actions/AllocateDialog.js +81 -0
- package/dist/admin/actions/ConfirmDialog.d.ts +14 -0
- package/dist/admin/actions/ConfirmDialog.js +192 -0
- package/dist/admin/actions/DecideDialog.d.ts +7 -0
- package/dist/admin/actions/DecideDialog.js +173 -0
- package/dist/admin/actions/ExperimentActions.d.ts +3 -0
- package/dist/admin/actions/ExperimentActions.js +110 -0
- package/dist/admin/actions/MakeContentResult.d.ts +6 -0
- package/dist/admin/actions/MakeContentResult.js +50 -0
- package/dist/admin/actions/actions.model.d.ts +37 -0
- package/dist/admin/actions/actions.model.js +71 -0
- package/dist/admin/actions/decide.model.d.ts +21 -0
- package/dist/admin/actions/decide.model.js +38 -0
- package/dist/admin/allocation.model.d.ts +20 -0
- package/dist/admin/allocation.model.js +38 -0
- package/dist/admin/api.d.ts +32 -0
- package/dist/admin/api.js +95 -0
- package/dist/admin/armSelect/ArmSelectField.d.ts +2 -0
- package/dist/admin/armSelect/ArmSelectField.js +185 -0
- package/dist/admin/armSelect/armSelect.model.d.ts +30 -0
- package/dist/admin/armSelect/armSelect.model.js +20 -0
- package/dist/admin/arms/ArmsField.d.ts +2 -0
- package/dist/admin/arms/ArmsField.js +310 -0
- package/dist/admin/arms/ParamsEditor.d.ts +16 -0
- package/dist/admin/arms/ParamsEditor.js +79 -0
- package/dist/admin/arms/arms.model.d.ts +21 -0
- package/dist/admin/arms/arms.model.js +153 -0
- package/dist/admin/arms/pageTarget.model.d.ts +4 -0
- package/dist/admin/arms/pageTarget.model.js +19 -0
- package/dist/admin/arms/params.model.d.ts +7 -0
- package/dist/admin/arms/params.model.js +35 -0
- package/dist/admin/copy/actions.d.ts +38 -0
- package/dist/admin/copy/actions.js +38 -0
- package/dist/admin/copy/armSelect.d.ts +11 -0
- package/dist/admin/copy/armSelect.js +11 -0
- package/dist/admin/copy/arms.d.ts +37 -0
- package/dist/admin/copy/arms.js +47 -0
- package/dist/admin/copy/common.d.ts +20 -0
- package/dist/admin/copy/common.js +27 -0
- package/dist/admin/copy/history.d.ts +9 -0
- package/dist/admin/copy/history.js +9 -0
- package/dist/admin/copy/metrics.d.ts +9 -0
- package/dist/admin/copy/metrics.js +9 -0
- package/dist/admin/copy/results.d.ts +78 -0
- package/dist/admin/copy/results.js +81 -0
- package/dist/admin/copy/review.d.ts +33 -0
- package/dist/admin/copy/review.js +127 -0
- package/dist/admin/copy/status.d.ts +8 -0
- package/dist/admin/copy/status.js +8 -0
- package/dist/admin/copy/tabs.d.ts +7 -0
- package/dist/admin/copy/tabs.js +7 -0
- package/dist/admin/copy/who.d.ts +36 -0
- package/dist/admin/copy/who.js +36 -0
- package/dist/admin/labels.d.ts +45 -0
- package/dist/admin/labels.js +53 -0
- package/dist/admin/layerUsage.model.d.ts +15 -0
- package/dist/admin/layerUsage.model.js +18 -0
- package/dist/admin/lockedNotice.model.d.ts +3 -0
- package/dist/admin/lockedNotice.model.js +18 -0
- package/dist/admin/metricSource.model.d.ts +7 -0
- package/dist/admin/metricSource.model.js +11 -0
- package/dist/admin/paths.d.ts +16 -0
- package/dist/admin/paths.js +16 -0
- package/dist/admin/permissions.model.d.ts +10 -0
- package/dist/admin/permissions.model.js +4 -0
- package/dist/admin/phaseHistory.model.d.ts +19 -0
- package/dist/admin/phaseHistory.model.js +19 -0
- package/dist/admin/reload.d.ts +1 -0
- package/dist/admin/reload.js +1 -0
- package/dist/admin/results/ArmTable.d.ts +8 -0
- package/dist/admin/results/ArmTable.js +112 -0
- package/dist/admin/results/CappedCell.d.ts +4 -0
- package/dist/admin/results/CappedCell.js +24 -0
- package/dist/admin/results/CiChart.d.ts +10 -0
- package/dist/admin/results/CiChart.js +178 -0
- package/dist/admin/results/DataQualityPanel.d.ts +4 -0
- package/dist/admin/results/DataQualityPanel.js +40 -0
- package/dist/admin/results/ResultsView.d.ts +3 -0
- package/dist/admin/results/ResultsView.js +312 -0
- package/dist/admin/results/VerdictCard.d.ts +9 -0
- package/dist/admin/results/VerdictCard.js +49 -0
- package/dist/admin/results/chart.model.d.ts +32 -0
- package/dist/admin/results/chart.model.js +52 -0
- package/dist/admin/results/format.d.ts +10 -0
- package/dist/admin/results/format.js +55 -0
- package/dist/admin/results/results.model.d.ts +105 -0
- package/dist/admin/results/results.model.js +175 -0
- package/dist/admin/review/ReviewPanel.d.ts +2 -0
- package/dist/admin/review/ReviewPanel.js +268 -0
- package/dist/admin/review/review.model.d.ts +31 -0
- package/dist/admin/review/review.model.js +40 -0
- package/dist/admin/status.model.d.ts +16 -0
- package/dist/admin/status.model.js +17 -0
- package/dist/admin/styles.css +10 -0
- package/dist/admin/styles.d.ts +1 -0
- package/dist/admin/styles.js +2 -0
- package/dist/admin/summaryBatcher.d.ts +8 -0
- package/dist/admin/summaryBatcher.js +33 -0
- package/dist/admin/targeting/TargetingAttributeField.d.ts +2 -0
- package/dist/admin/targeting/TargetingAttributeField.js +31 -0
- package/dist/admin/targeting/TargetingOpField.d.ts +2 -0
- package/dist/admin/targeting/TargetingOpField.js +45 -0
- package/dist/admin/targeting/TargetingValueField.d.ts +2 -0
- package/dist/admin/targeting/TargetingValueField.js +142 -0
- package/dist/admin/targeting/targeting.model.d.ts +18 -0
- package/dist/admin/targeting/targeting.model.js +48 -0
- package/dist/admin/useApi.d.ts +20 -0
- package/dist/admin/useApi.js +10 -0
- package/dist/admin/useLayerUsage.d.ts +15 -0
- package/dist/admin/useLayerUsage.js +92 -0
- package/dist/client/ExperimentPageview.d.ts +1 -0
- package/dist/client/ExperimentPageview.js +27 -0
- package/dist/client/ExperimentsProvider.d.ts +6 -0
- package/dist/client/ExperimentsProvider.js +22 -0
- package/dist/client/ViewportExposure.d.ts +9 -0
- package/dist/client/ViewportExposure.js +69 -0
- package/dist/client/beacon.d.ts +17 -0
- package/dist/client/beacon.js +71 -0
- package/dist/client/context.d.ts +2 -0
- package/dist/client/context.js +2 -0
- package/dist/client/idempotency.d.ts +2 -0
- package/dist/client/idempotency.js +13 -0
- package/dist/client/trackConversionBeacon.d.ts +3 -0
- package/dist/client/trackConversionBeacon.js +16 -0
- package/dist/client/useExperiment.d.ts +5 -0
- package/dist/client/useExperiment.js +27 -0
- package/dist/client/useFlagPoint.d.ts +9 -0
- package/dist/client/useFlagPoint.js +32 -0
- package/dist/collections/access.d.ts +21 -0
- package/dist/collections/access.js +25 -0
- package/dist/collections/events.d.ts +3 -0
- package/dist/collections/events.js +117 -0
- package/dist/collections/experiments/armInvariants.d.ts +12 -0
- package/dist/collections/experiments/armInvariants.js +89 -0
- package/dist/collections/experiments/config.d.ts +3 -0
- package/dist/collections/experiments/config.js +574 -0
- package/dist/collections/experiments/createDefaults.d.ts +2 -0
- package/dist/collections/experiments/createDefaults.js +7 -0
- package/dist/collections/experiments/deleteGuard.d.ts +3 -0
- package/dist/collections/experiments/deleteGuard.js +8 -0
- package/dist/collections/experiments/editability.d.ts +4 -0
- package/dist/collections/experiments/editability.js +35 -0
- package/dist/collections/experiments/flagControlParams.d.ts +2 -0
- package/dist/collections/experiments/flagControlParams.js +32 -0
- package/dist/collections/experiments/lockHook.d.ts +2 -0
- package/dist/collections/experiments/lockHook.js +134 -0
- package/dist/collections/identities.d.ts +3 -0
- package/dist/collections/identities.js +30 -0
- package/dist/collections/index.d.ts +6 -0
- package/dist/collections/index.js +24 -0
- package/dist/collections/layers.d.ts +3 -0
- package/dist/collections/layers.js +77 -0
- package/dist/collections/metrics.d.ts +3 -0
- package/dist/collections/metrics.js +115 -0
- package/dist/collections/phases.d.ts +3 -0
- package/dist/collections/phases.js +59 -0
- package/dist/collections/serialize.d.ts +5 -0
- package/dist/collections/serialize.js +40 -0
- package/dist/collections/snapshots.d.ts +3 -0
- package/dist/collections/snapshots.js +47 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.js +7 -0
- package/dist/db/adapter.d.ts +3 -0
- package/dist/db/adapter.js +9 -0
- package/dist/db/appends.d.ts +58 -0
- package/dist/db/appends.js +116 -0
- package/dist/db/delete.d.ts +17 -0
- package/dist/db/delete.js +35 -0
- package/dist/db/erase.d.ts +12 -0
- package/dist/db/erase.js +55 -0
- package/dist/db/events.d.ts +21 -0
- package/dist/db/events.js +100 -0
- package/dist/db/executor.d.ts +10 -0
- package/dist/db/executor.js +37 -0
- package/dist/db/identities.d.ts +11 -0
- package/dist/db/identities.js +29 -0
- package/dist/db/locks.d.ts +15 -0
- package/dist/db/locks.js +23 -0
- package/dist/db/manifest.d.ts +8 -0
- package/dist/db/manifest.js +8 -0
- package/dist/db/names.d.ts +271 -0
- package/dist/db/names.js +270 -0
- package/dist/db/pgExecutor.d.ts +41 -0
- package/dist/db/pgExecutor.js +250 -0
- package/dist/db/results.d.ts +53 -0
- package/dist/db/results.js +103 -0
- package/dist/db/slices.d.ts +18 -0
- package/dist/db/slices.js +51 -0
- package/dist/db/snapshots.d.ts +47 -0
- package/dist/db/snapshots.js +89 -0
- package/dist/db/sql.d.ts +5 -0
- package/dist/db/sql.js +5 -0
- package/dist/db/state.d.ts +12 -0
- package/dist/db/state.js +27 -0
- package/dist/db/sweep.d.ts +13 -0
- package/dist/db/sweep.js +90 -0
- package/dist/db/txid.d.ts +7 -0
- package/dist/db/txid.js +12 -0
- package/dist/define.d.ts +3 -0
- package/dist/define.js +6 -0
- package/dist/endpoints/events.d.ts +7 -0
- package/dist/endpoints/events.js +98 -0
- package/dist/endpoints/index.d.ts +18 -0
- package/dist/endpoints/index.js +160 -0
- package/dist/endpoints/manifest.d.ts +7 -0
- package/dist/endpoints/manifest.js +30 -0
- package/dist/endpoints/preflight.d.ts +8 -0
- package/dist/endpoints/preflight.js +25 -0
- package/dist/endpoints/previewToken.d.ts +7 -0
- package/dist/endpoints/previewToken.js +54 -0
- package/dist/endpoints/recompute.d.ts +7 -0
- package/dist/endpoints/recompute.js +41 -0
- package/dist/endpoints/results.d.ts +24 -0
- package/dist/endpoints/results.js +136 -0
- package/dist/endpoints/summary.d.ts +7 -0
- package/dist/endpoints/summary.js +40 -0
- package/dist/endpoints/transitions.d.ts +42 -0
- package/dist/endpoints/transitions.js +154 -0
- package/dist/errors.d.ts +27 -0
- package/dist/errors.js +33 -0
- package/dist/events/body.d.ts +7 -0
- package/dist/events/body.js +43 -0
- package/dist/events/dimensions.d.ts +4 -0
- package/dist/events/dimensions.js +51 -0
- package/dist/events/preview.d.ts +2 -0
- package/dist/events/preview.js +9 -0
- package/dist/events/request.d.ts +3 -0
- package/dist/events/request.js +14 -0
- package/dist/events/rows.d.ts +7 -0
- package/dist/events/rows.js +65 -0
- package/dist/exports/adminClient.d.ts +16 -0
- package/dist/exports/adminClient.js +17 -0
- package/dist/exports/client.d.ts +7 -0
- package/dist/exports/client.js +7 -0
- package/dist/exports/index.d.ts +4 -0
- package/dist/exports/index.js +3 -0
- package/dist/exports/proxy.d.ts +4 -0
- package/dist/exports/proxy.js +3 -0
- package/dist/exports/puck.d.ts +4 -0
- package/dist/exports/puck.js +3 -0
- package/dist/exports/puckEditor.d.ts +1 -0
- package/dist/exports/puckEditor.js +2 -0
- package/dist/exports/rsc.d.ts +13 -0
- package/dist/exports/rsc.js +13 -0
- package/dist/exports/runtimeProxy.d.ts +4 -0
- package/dist/exports/runtimeProxy.js +2 -0
- package/dist/exports/runtimeServer.d.ts +2 -0
- package/dist/exports/runtimeServer.js +1 -0
- package/dist/fields/armSelect.d.ts +7 -0
- package/dist/fields/armSelect.js +33 -0
- package/dist/globals/state.d.ts +3 -0
- package/dist/globals/state.js +31 -0
- package/dist/hooks/contentChanges.d.ts +3 -0
- package/dist/hooks/contentChanges.js +10 -0
- package/dist/hooks/hostHook.d.ts +5 -0
- package/dist/hooks/hostHook.js +20 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -0
- package/dist/manifest/cache.d.ts +10 -0
- package/dist/manifest/cache.js +51 -0
- package/dist/manifest/compile.d.ts +63 -0
- package/dist/manifest/compile.js +237 -0
- package/dist/onInit.d.ts +5 -0
- package/dist/onInit.js +13 -0
- package/dist/options/fromReq.d.ts +3 -0
- package/dist/options/fromReq.js +5 -0
- package/dist/options.d.ts +9 -0
- package/dist/options.js +99 -0
- package/dist/plugin.d.ts +7 -0
- package/dist/plugin.js +62 -0
- package/dist/proxy/apply.d.ts +3 -0
- package/dist/proxy/apply.js +5 -0
- package/dist/proxy/consentFallback.d.ts +5 -0
- package/dist/proxy/consentFallback.js +27 -0
- package/dist/proxy/control.d.ts +6 -0
- package/dist/proxy/control.js +36 -0
- package/dist/proxy/createProxy.d.ts +3 -0
- package/dist/proxy/createProxy.js +15 -0
- package/dist/proxy/pageRewrite.d.ts +4 -0
- package/dist/proxy/pageRewrite.js +41 -0
- package/dist/proxy/resolve.d.ts +13 -0
- package/dist/proxy/resolve.js +163 -0
- package/dist/proxy/skip.d.ts +1 -0
- package/dist/proxy/skip.js +9 -0
- package/dist/puck/ExperimentPicker.d.ts +5 -0
- package/dist/puck/ExperimentPicker.js +88 -0
- package/dist/puck/ExperimentSlot.d.ts +3 -0
- package/dist/puck/ExperimentSlot.js +16 -0
- package/dist/puck/copy.d.ts +14 -0
- package/dist/puck/copy.js +14 -0
- package/dist/puck/editor/CreateExperimentDrawer.d.ts +5 -0
- package/dist/puck/editor/CreateExperimentDrawer.js +120 -0
- package/dist/puck/editor/ExperimentSlotEditor.d.ts +3 -0
- package/dist/puck/editor/ExperimentSlotEditor.js +225 -0
- package/dist/puck/editor/cloneSlot.d.ts +3 -0
- package/dist/puck/editor/cloneSlot.js +41 -0
- package/dist/puck/editor/copy.d.ts +25 -0
- package/dist/puck/editor/copy.js +25 -0
- package/dist/puck/editor/editor.model.d.ts +16 -0
- package/dist/puck/editor/editor.model.js +33 -0
- package/dist/puck/experimentSlotField.d.ts +5 -0
- package/dist/puck/experimentSlotField.js +13 -0
- package/dist/puck/slot.model.d.ts +2 -0
- package/dist/puck/slot.model.js +11 -0
- package/dist/puck/slotConfig.d.ts +5 -0
- package/dist/puck/slotConfig.js +25 -0
- package/dist/results/aggregate.d.ts +34 -0
- package/dist/results/aggregate.js +66 -0
- package/dist/results/analyse.d.ts +79 -0
- package/dist/results/analyse.js +378 -0
- package/dist/results/cuped.d.ts +16 -0
- package/dist/results/cuped.js +31 -0
- package/dist/results/decideGuard.d.ts +3 -0
- package/dist/results/decideGuard.js +8 -0
- package/dist/results/guardrails.d.ts +17 -0
- package/dist/results/guardrails.js +10 -0
- package/dist/results/history.d.ts +13 -0
- package/dist/results/history.js +39 -0
- package/dist/results/identityCredit.d.ts +16 -0
- package/dist/results/identityCredit.js +46 -0
- package/dist/results/power.d.ts +15 -0
- package/dist/results/power.js +60 -0
- package/dist/results/rolloutUnits.d.ts +17 -0
- package/dist/results/rolloutUnits.js +26 -0
- package/dist/results/snapshot.d.ts +9 -0
- package/dist/results/snapshot.js +154 -0
- package/dist/results/srm.d.ts +9 -0
- package/dist/results/srm.js +22 -0
- package/dist/results/verdict.d.ts +82 -0
- package/dist/results/verdict.js +85 -0
- package/dist/runtime/assign.d.ts +23 -0
- package/dist/runtime/assign.js +104 -0
- package/dist/runtime/bot.d.ts +1 -0
- package/dist/runtime/bot.js +7 -0
- package/dist/runtime/cookie.d.ts +17 -0
- package/dist/runtime/cookie.js +35 -0
- package/dist/runtime/eligibility.d.ts +22 -0
- package/dist/runtime/eligibility.js +20 -0
- package/dist/runtime/header.d.ts +17 -0
- package/dist/runtime/header.js +97 -0
- package/dist/runtime/loaders.d.ts +17 -0
- package/dist/runtime/loaders.js +29 -0
- package/dist/runtime/normalisePath.d.ts +7 -0
- package/dist/runtime/normalisePath.js +15 -0
- package/dist/runtime/previewToken.d.ts +9 -0
- package/dist/runtime/previewToken.js +23 -0
- package/dist/runtime/proxyRuntime.d.ts +2 -0
- package/dist/runtime/proxyRuntime.js +22 -0
- package/dist/runtime/seed.d.ts +2 -0
- package/dist/runtime/seed.js +4 -0
- package/dist/runtime/signing.d.ts +3 -0
- package/dist/runtime/signing.js +16 -0
- package/dist/runtime/targeting.d.ts +6 -0
- package/dist/runtime/targeting.js +9 -0
- package/dist/server/context.d.ts +10 -0
- package/dist/server/context.js +59 -0
- package/dist/server/eraseUser.d.ts +7 -0
- package/dist/server/eraseUser.js +4 -0
- package/dist/server/getAssignments.d.ts +9 -0
- package/dist/server/getAssignments.js +227 -0
- package/dist/server/getFlagPoint.d.ts +11 -0
- package/dist/server/getFlagPoint.js +36 -0
- package/dist/server/headerRevision.d.ts +6 -0
- package/dist/server/headerRevision.js +10 -0
- package/dist/server/linkIdentity.d.ts +9 -0
- package/dist/server/linkIdentity.js +34 -0
- package/dist/server/metadata.d.ts +7 -0
- package/dist/server/metadata.js +24 -0
- package/dist/server/previewDraft.d.ts +7 -0
- package/dist/server/previewDraft.js +51 -0
- package/dist/server/recordContentChange.d.ts +7 -0
- package/dist/server/recordContentChange.js +150 -0
- package/dist/server/recordExposures.d.ts +7 -0
- package/dist/server/recordExposures.js +56 -0
- package/dist/server/request.d.ts +7 -0
- package/dist/server/request.js +39 -0
- package/dist/server/resolveExperimentData.d.ts +6 -0
- package/dist/server/resolveExperimentData.js +64 -0
- package/dist/server/runResults.d.ts +22 -0
- package/dist/server/runResults.js +307 -0
- package/dist/server/serverRuntime.d.ts +7 -0
- package/dist/server/serverRuntime.js +20 -0
- package/dist/server/sitemap.d.ts +3 -0
- package/dist/server/sitemap.js +6 -0
- package/dist/server/toClientAssignments.d.ts +7 -0
- package/dist/server/toClientAssignments.js +56 -0
- package/dist/server/trackConversion.d.ts +12 -0
- package/dist/server/trackConversion.js +69 -0
- package/dist/targeting/ops.d.ts +8 -0
- package/dist/targeting/ops.js +58 -0
- package/dist/transitions/addMetric.d.ts +16 -0
- package/dist/transitions/addMetric.js +126 -0
- package/dist/transitions/allocate.d.ts +9 -0
- package/dist/transitions/allocate.js +84 -0
- package/dist/transitions/archive.d.ts +9 -0
- package/dist/transitions/archive.js +46 -0
- package/dist/transitions/checkStart.d.ts +61 -0
- package/dist/transitions/checkStart.js +104 -0
- package/dist/transitions/confirmPhrases.d.ts +5 -0
- package/dist/transitions/confirmPhrases.js +18 -0
- package/dist/transitions/decide.d.ts +9 -0
- package/dist/transitions/decide.js +138 -0
- package/dist/transitions/deleteExperiment.d.ts +5 -0
- package/dist/transitions/deleteExperiment.js +66 -0
- package/dist/transitions/kernel.d.ts +31 -0
- package/dist/transitions/kernel.js +69 -0
- package/dist/transitions/makeContent.d.ts +20 -0
- package/dist/transitions/makeContent.js +411 -0
- package/dist/transitions/phaseRecord.d.ts +27 -0
- package/dist/transitions/phaseRecord.js +81 -0
- package/dist/transitions/placements.d.ts +26 -0
- package/dist/transitions/placements.js +89 -0
- package/dist/transitions/preflightData.d.ts +21 -0
- package/dist/transitions/preflightData.js +317 -0
- package/dist/transitions/releaseHoldout.d.ts +8 -0
- package/dist/transitions/releaseHoldout.js +30 -0
- package/dist/transitions/resolveCaps.d.ts +28 -0
- package/dist/transitions/resolveCaps.js +68 -0
- package/dist/transitions/start.d.ts +26 -0
- package/dist/transitions/start.js +220 -0
- package/dist/transitions/stop.d.ts +8 -0
- package/dist/transitions/stop.js +25 -0
- package/dist/types/admin.d.ts +20 -0
- package/dist/types/admin.js +1 -0
- package/dist/types/assignments.d.ts +57 -0
- package/dist/types/assignments.js +1 -0
- package/dist/types/contracts.d.ts +133 -0
- package/dist/types/contracts.js +2 -0
- package/dist/types/endpoints.d.ts +135 -0
- package/dist/types/endpoints.js +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.js +8 -0
- package/dist/types/manifest.d.ts +42 -0
- package/dist/types/manifest.js +1 -0
- package/dist/types/puck.d.ts +23 -0
- package/dist/types/puck.js +1 -0
- package/dist/types/runtime.d.ts +59 -0
- package/dist/types/runtime.js +1 -0
- package/dist/types/snapshot.d.ts +117 -0
- package/dist/types/snapshot.js +1 -0
- package/package.json +137 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export declare const ACTIONS_COPY: {
|
|
2
|
+
readonly start: "Start";
|
|
3
|
+
readonly restart: "Start a new round";
|
|
4
|
+
readonly stop: "Stop";
|
|
5
|
+
readonly decide: "Decide";
|
|
6
|
+
readonly release: "Release holdout";
|
|
7
|
+
readonly makeContent: "Make it the content";
|
|
8
|
+
readonly finish: "Finish archiving";
|
|
9
|
+
readonly archive: "Archive";
|
|
10
|
+
readonly discard: "Discard winner";
|
|
11
|
+
readonly deleteNoteArchived: "Deleting removes this experiment's records and results. A winner that was already made permanent stays in place.";
|
|
12
|
+
readonly deleteNoteDraft: "Deleting removes this experiment and its settings.";
|
|
13
|
+
readonly startBody: "Start this experiment?";
|
|
14
|
+
readonly restartBody: "Starting again begins a new round; results restart.";
|
|
15
|
+
readonly stopBody: "Everyone will see the Original. Starting again begins a new round; results restart.";
|
|
16
|
+
readonly original: "Everyone will see the Original.";
|
|
17
|
+
readonly discardBody: "Everyone goes back to the Original. The decision note is kept.";
|
|
18
|
+
readonly archiveBody: "Archive this experiment?";
|
|
19
|
+
readonly finishBody: "The content has been updated. Finish archiving this experiment.";
|
|
20
|
+
readonly noResults: "There are no results yet.";
|
|
21
|
+
readonly noRecommendation: "The results don't recommend a group yet.";
|
|
22
|
+
readonly different: "You chose a different group than the results recommend.";
|
|
23
|
+
readonly group: "Group";
|
|
24
|
+
readonly note: "Decision note";
|
|
25
|
+
readonly confirmation: "Confirmation";
|
|
26
|
+
readonly typePhrase: "Type the following to confirm:";
|
|
27
|
+
readonly cancel: "Cancel";
|
|
28
|
+
readonly retry: "Retry";
|
|
29
|
+
readonly done: "Done";
|
|
30
|
+
readonly loading: "Loading results…";
|
|
31
|
+
readonly updated: "Updated";
|
|
32
|
+
readonly failed: "Failed";
|
|
33
|
+
readonly partial: "Some pages couldn't be updated. Fix them and retry.";
|
|
34
|
+
};
|
|
35
|
+
export declare const decideCopy: (winner: string, holdout: boolean, original: boolean) => string;
|
|
36
|
+
export declare const releaseCopy: (winner: string) => string;
|
|
37
|
+
export declare const makeContentCopy: (winner: string, kind: "block" | "page" | "flag") => string;
|
|
38
|
+
export declare const hardCodedLabel: (winner: string) => string;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export const ACTIONS_COPY = {
|
|
2
|
+
start: 'Start',
|
|
3
|
+
restart: 'Start a new round',
|
|
4
|
+
stop: 'Stop',
|
|
5
|
+
decide: 'Decide',
|
|
6
|
+
release: 'Release holdout',
|
|
7
|
+
makeContent: 'Make it the content',
|
|
8
|
+
finish: 'Finish archiving',
|
|
9
|
+
archive: 'Archive',
|
|
10
|
+
discard: 'Discard winner',
|
|
11
|
+
deleteNoteArchived: "Deleting removes this experiment's records and results. A winner that was already made permanent stays in place.",
|
|
12
|
+
deleteNoteDraft: 'Deleting removes this experiment and its settings.',
|
|
13
|
+
startBody: 'Start this experiment?',
|
|
14
|
+
restartBody: 'Starting again begins a new round; results restart.',
|
|
15
|
+
stopBody: 'Everyone will see the Original. Starting again begins a new round; results restart.',
|
|
16
|
+
original: 'Everyone will see the Original.',
|
|
17
|
+
discardBody: 'Everyone goes back to the Original. The decision note is kept.',
|
|
18
|
+
archiveBody: 'Archive this experiment?',
|
|
19
|
+
finishBody: 'The content has been updated. Finish archiving this experiment.',
|
|
20
|
+
noResults: 'There are no results yet.',
|
|
21
|
+
noRecommendation: "The results don't recommend a group yet.",
|
|
22
|
+
different: 'You chose a different group than the results recommend.',
|
|
23
|
+
group: 'Group',
|
|
24
|
+
note: 'Decision note',
|
|
25
|
+
confirmation: 'Confirmation',
|
|
26
|
+
typePhrase: 'Type the following to confirm:',
|
|
27
|
+
cancel: 'Cancel',
|
|
28
|
+
retry: 'Retry',
|
|
29
|
+
done: 'Done',
|
|
30
|
+
loading: 'Loading results…',
|
|
31
|
+
updated: 'Updated',
|
|
32
|
+
failed: 'Failed',
|
|
33
|
+
partial: "Some pages couldn't be updated. Fix them and retry."
|
|
34
|
+
};
|
|
35
|
+
export const decideCopy = (winner, holdout, original)=>original ? ACTIONS_COPY.original : holdout ? `Everyone except the holdout will see ${winner}. The holdout keeps seeing the Original so we can measure the shipped change.` : `Everyone will see ${winner}.`;
|
|
36
|
+
export const releaseCopy = (winner)=>`The holdout will see ${winner} too. Measuring since shipping ends.`;
|
|
37
|
+
export const makeContentCopy = (winner, kind)=>kind === 'flag' ? `Saves ${winner}'s settings as the new defaults so the experiment can be archived.` : `Copies ${winner} into the page content so the experiment can be archived.`;
|
|
38
|
+
export const hardCodedLabel = (winner)=>`The developer has hard-coded ${winner}`;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const ARM_SELECT_COPY: {
|
|
2
|
+
experiment: string;
|
|
3
|
+
group: string;
|
|
4
|
+
clear: string;
|
|
5
|
+
forbidden: string;
|
|
6
|
+
unavailable: string;
|
|
7
|
+
loading: string;
|
|
8
|
+
running: string;
|
|
9
|
+
noFlagPoint: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const staleExperiment: (name?: string) => string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const ARM_SELECT_COPY = {
|
|
2
|
+
experiment: 'Experiment',
|
|
3
|
+
group: 'Group',
|
|
4
|
+
clear: 'Clear',
|
|
5
|
+
forbidden: "You can't see experiments. Ask an admin.",
|
|
6
|
+
unavailable: "Experiments couldn't be loaded. Reload and try again.",
|
|
7
|
+
loading: 'Loading experiments…',
|
|
8
|
+
running: 'Changing this content mid-test mixes two versions in one result',
|
|
9
|
+
noFlagPoint: 'No flag point is configured for this field.'
|
|
10
|
+
};
|
|
11
|
+
export const staleExperiment = (name)=>`This was set for an earlier experiment${name ? ` (${name})` : ''} and won't be used now.`;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ArmIssueCode } from '../../types/endpoints.js';
|
|
2
|
+
export declare const ISSUE_COPY: Record<ArmIssueCode, string>;
|
|
3
|
+
export declare const GROUP_LABELS: {
|
|
4
|
+
readonly control: "Original";
|
|
5
|
+
readonly variantA: "Variant A";
|
|
6
|
+
readonly variantB: "Variant B";
|
|
7
|
+
readonly variantC: "Variant C";
|
|
8
|
+
readonly holdout: "Holdout";
|
|
9
|
+
};
|
|
10
|
+
export declare const ARMS_COPY: {
|
|
11
|
+
readonly groups: "Groups";
|
|
12
|
+
readonly label: "Group label";
|
|
13
|
+
readonly weight: "Weight (%)";
|
|
14
|
+
readonly slot: "Content slot";
|
|
15
|
+
readonly addVariant: "Add a variant";
|
|
16
|
+
readonly addHoldout: "Add a holdout";
|
|
17
|
+
readonly removeHoldout: "Remove holdout";
|
|
18
|
+
readonly removeVariant: "Remove variant";
|
|
19
|
+
readonly splitEvenly: "Split evenly";
|
|
20
|
+
readonly holdout: "The holdout sees the Original and is measured but not compared during the test. After you decide, it keeps seeing the Original so the winner can be compared with it.";
|
|
21
|
+
readonly pagePath: "Page path";
|
|
22
|
+
readonly holdoutPage: "Sees the Original's page";
|
|
23
|
+
readonly pageRequired: "Enter a page path for this group.";
|
|
24
|
+
readonly pageInvalid: "Use a page path starting with /, without a host, query or fragment.";
|
|
25
|
+
readonly flagPoint: "Flag point";
|
|
26
|
+
readonly controlParams: "The Original uses this flag point's current defaults. These values are checked again at Start.";
|
|
27
|
+
readonly paramRequired: "Enter a value for {label}.";
|
|
28
|
+
readonly paramNumber: "Enter a number for {label}.";
|
|
29
|
+
readonly paramMin: "{label} must be at least {min}.";
|
|
30
|
+
readonly paramMax: "{label} must be at most {max}.";
|
|
31
|
+
readonly paramOption: "Choose an available option for {label}.";
|
|
32
|
+
readonly paramCheckbox: "Choose yes or no for {label}.";
|
|
33
|
+
};
|
|
34
|
+
export declare function issueMessage(issue: {
|
|
35
|
+
code: string;
|
|
36
|
+
message: string;
|
|
37
|
+
}, total: number): string;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export const ISSUE_COPY = {
|
|
2
|
+
'weights-total': 'Weights must add up to 100%. They add up to {total}% now.',
|
|
3
|
+
'control-count': 'Include exactly one Original.',
|
|
4
|
+
'control-first': 'Put the Original first.',
|
|
5
|
+
'holdout-last': 'Put the holdout last.',
|
|
6
|
+
'holdout-count': 'Include only one holdout.',
|
|
7
|
+
'variant-count': 'Include up to three variants.',
|
|
8
|
+
'duplicate-key': 'Each group must have a different standard name.',
|
|
9
|
+
'duplicate-slot': 'Each group must have a different content slot.',
|
|
10
|
+
'slot-required': 'Choose the matching content slot for this group.',
|
|
11
|
+
'invalid-key': 'Use the standard group names: Original, Variant A–C, Holdout.'
|
|
12
|
+
};
|
|
13
|
+
export const GROUP_LABELS = {
|
|
14
|
+
control: 'Original',
|
|
15
|
+
variantA: 'Variant A',
|
|
16
|
+
variantB: 'Variant B',
|
|
17
|
+
variantC: 'Variant C',
|
|
18
|
+
holdout: 'Holdout'
|
|
19
|
+
};
|
|
20
|
+
export const ARMS_COPY = {
|
|
21
|
+
groups: 'Groups',
|
|
22
|
+
label: 'Group label',
|
|
23
|
+
weight: 'Weight (%)',
|
|
24
|
+
slot: 'Content slot',
|
|
25
|
+
addVariant: 'Add a variant',
|
|
26
|
+
addHoldout: 'Add a holdout',
|
|
27
|
+
removeHoldout: 'Remove holdout',
|
|
28
|
+
removeVariant: 'Remove variant',
|
|
29
|
+
splitEvenly: 'Split evenly',
|
|
30
|
+
holdout: 'The holdout sees the Original and is measured but not compared during the test. After you decide, it keeps seeing the Original so the winner can be compared with it.',
|
|
31
|
+
pagePath: 'Page path',
|
|
32
|
+
holdoutPage: "Sees the Original's page",
|
|
33
|
+
pageRequired: 'Enter a page path for this group.',
|
|
34
|
+
pageInvalid: 'Use a page path starting with /, without a host, query or fragment.',
|
|
35
|
+
flagPoint: 'Flag point',
|
|
36
|
+
controlParams: "The Original uses this flag point's current defaults. These values are checked again at Start.",
|
|
37
|
+
paramRequired: 'Enter a value for {label}.',
|
|
38
|
+
paramNumber: 'Enter a number for {label}.',
|
|
39
|
+
paramMin: '{label} must be at least {min}.',
|
|
40
|
+
paramMax: '{label} must be at most {max}.',
|
|
41
|
+
paramOption: 'Choose an available option for {label}.',
|
|
42
|
+
paramCheckbox: 'Choose yes or no for {label}.'
|
|
43
|
+
};
|
|
44
|
+
export function issueMessage(issue, total) {
|
|
45
|
+
const copy = Object.hasOwn(ISSUE_COPY, issue.code) ? ISSUE_COPY[issue.code] : issue.message;
|
|
46
|
+
return copy.replace('{total}', String(total));
|
|
47
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const API_MESSAGES: {
|
|
2
|
+
readonly notFound: "This experiment no longer exists.";
|
|
3
|
+
readonly commitUnverified: "The change may not have been saved. Reload and try again.";
|
|
4
|
+
readonly notImplemented: "This isn't available yet.";
|
|
5
|
+
readonly unauthenticated: "Your session has expired. Sign in again.";
|
|
6
|
+
readonly forbidden: "You don't have permission to do this.";
|
|
7
|
+
readonly network: "Couldn't reach the server. Check your connection and try again.";
|
|
8
|
+
readonly failed: "Couldn't complete this change. Try again.";
|
|
9
|
+
readonly unreadable: "Couldn't read the server's response. Reload and try again.";
|
|
10
|
+
};
|
|
11
|
+
export declare const LOCKED_MESSAGES: {
|
|
12
|
+
readonly creation: "Set when the experiment was created.";
|
|
13
|
+
readonly running: "Locked while the test is running so everyone in this round sees the same thing. Stop the test to change it.";
|
|
14
|
+
readonly runningAllocation: "Raise it from the actions panel; lowering takes effect in the next round.";
|
|
15
|
+
readonly runningMetrics: "Add supporting metrics or guardrails from the actions panel; the main metric is fixed for this round.";
|
|
16
|
+
readonly decided: "Locked after the decision.";
|
|
17
|
+
readonly archived: "Archived experiments can't be changed.";
|
|
18
|
+
readonly other: "Can't be changed in this state.";
|
|
19
|
+
};
|
|
20
|
+
export declare function refusalMessage(code: string | undefined, status: number, message?: string): string;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const API_MESSAGES = {
|
|
2
|
+
notFound: 'This experiment no longer exists.',
|
|
3
|
+
commitUnverified: 'The change may not have been saved. Reload and try again.',
|
|
4
|
+
notImplemented: "This isn't available yet.",
|
|
5
|
+
unauthenticated: 'Your session has expired. Sign in again.',
|
|
6
|
+
forbidden: "You don't have permission to do this.",
|
|
7
|
+
network: "Couldn't reach the server. Check your connection and try again.",
|
|
8
|
+
failed: "Couldn't complete this change. Try again.",
|
|
9
|
+
unreadable: "Couldn't read the server's response. Reload and try again."
|
|
10
|
+
};
|
|
11
|
+
export const LOCKED_MESSAGES = {
|
|
12
|
+
creation: 'Set when the experiment was created.',
|
|
13
|
+
running: 'Locked while the test is running so everyone in this round sees the same thing. Stop the test to change it.',
|
|
14
|
+
runningAllocation: 'Raise it from the actions panel; lowering takes effect in the next round.',
|
|
15
|
+
runningMetrics: 'Add supporting metrics or guardrails from the actions panel; the main metric is fixed for this round.',
|
|
16
|
+
decided: 'Locked after the decision.',
|
|
17
|
+
archived: "Archived experiments can't be changed.",
|
|
18
|
+
other: "Can't be changed in this state."
|
|
19
|
+
};
|
|
20
|
+
export function refusalMessage(code, status, message) {
|
|
21
|
+
if (code === 'unauthenticated' || status === 401) return API_MESSAGES.unauthenticated;
|
|
22
|
+
if (code === 'not-found' || status === 404) return API_MESSAGES.notFound;
|
|
23
|
+
if (code === 'commit-unverified') return API_MESSAGES.commitUnverified;
|
|
24
|
+
if (code === 'not-implemented' || status === 501) return API_MESSAGES.notImplemented;
|
|
25
|
+
if (code === 'forbidden' || status === 403) return API_MESSAGES.forbidden;
|
|
26
|
+
return message || API_MESSAGES.failed;
|
|
27
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const HISTORY_COPY: {
|
|
2
|
+
layers: string;
|
|
3
|
+
rounds: string;
|
|
4
|
+
now: string;
|
|
5
|
+
decided: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const layerSummary: (used: number, free: number) => string;
|
|
8
|
+
export declare const layerRow: (name: string, status: string, slices: number) => string;
|
|
9
|
+
export declare const roundRow: (phase: number, kind: string, from: string, to: string, weights: string) => string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const HISTORY_COPY = {
|
|
2
|
+
layers: 'Layer usage',
|
|
3
|
+
rounds: 'Rounds',
|
|
4
|
+
now: 'now',
|
|
5
|
+
decided: 'Decided by an editor'
|
|
6
|
+
};
|
|
7
|
+
export const layerSummary = (used, free)=>`${used} of 100 slices in use; ${free} free.`;
|
|
8
|
+
export const layerRow = (name, status, slices)=>`${name} · ${status} · ${slices} slice${slices === 1 ? '' : 's'}`;
|
|
9
|
+
export const roundRow = (phase, kind, from, to, weights)=>`Round ${phase} · ${kind} · ${from} – ${to} · ${weights}`;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const METRICS_COPY: {
|
|
2
|
+
readonly source: "Outcome source";
|
|
3
|
+
readonly revenueHint: "Unusually large values are capped at the 99th percentile of the 90 days before Start for the decision; totals are always shown in full.";
|
|
4
|
+
};
|
|
5
|
+
export declare const METRIC_KIND_LABELS: {
|
|
6
|
+
readonly binomial: "yes/no";
|
|
7
|
+
readonly count: "count";
|
|
8
|
+
readonly revenue: "amount";
|
|
9
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const METRICS_COPY = {
|
|
2
|
+
source: 'Outcome source',
|
|
3
|
+
revenueHint: 'Unusually large values are capped at the 99th percentile of the 90 days before Start for the decision; totals are always shown in full.'
|
|
4
|
+
};
|
|
5
|
+
export const METRIC_KIND_LABELS = {
|
|
6
|
+
binomial: 'yes/no',
|
|
7
|
+
count: 'count',
|
|
8
|
+
revenue: 'amount'
|
|
9
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export declare const RESULTS_COPY: {
|
|
2
|
+
readonly group: "Group";
|
|
3
|
+
readonly people: "People";
|
|
4
|
+
readonly conversions: "Conversions";
|
|
5
|
+
readonly mean: "Mean";
|
|
6
|
+
readonly lift: "Lift";
|
|
7
|
+
readonly ci: "Confidence interval";
|
|
8
|
+
readonly adjustedCI: "Adjusted confidence interval";
|
|
9
|
+
readonly pValue: "p-value";
|
|
10
|
+
readonly adjustedPValue: "Adjusted p-value";
|
|
11
|
+
readonly chanceToWin: "Chance to win";
|
|
12
|
+
readonly risk: "Risk";
|
|
13
|
+
readonly comparison: "Comparison";
|
|
14
|
+
readonly original: "Original";
|
|
15
|
+
readonly holdout: "Measured, not compared";
|
|
16
|
+
readonly holdoutBaseline: "Holdout · baseline";
|
|
17
|
+
readonly shippedGroup: "the winner";
|
|
18
|
+
readonly significance: {
|
|
19
|
+
readonly better: "Better";
|
|
20
|
+
readonly worse: "Worse";
|
|
21
|
+
readonly none: "No clear difference";
|
|
22
|
+
};
|
|
23
|
+
readonly guardrails: {
|
|
24
|
+
readonly failing: "Failing";
|
|
25
|
+
readonly ok: "OK";
|
|
26
|
+
readonly warning: "Watch";
|
|
27
|
+
readonly insufficient: "Too little data";
|
|
28
|
+
};
|
|
29
|
+
readonly plannedEnd: "Keep running to the planned end date.";
|
|
30
|
+
readonly infeasible: "A clear answer would take more than 90 days at this traffic.";
|
|
31
|
+
readonly noCap: "Not capped: fewer than 20 people had this outcome in the 90 days before Start, so every value counts in full.";
|
|
32
|
+
readonly quality: "Data quality";
|
|
33
|
+
readonly srm: "Traffic isn't splitting as set. Check for caching or a page placed twice.";
|
|
34
|
+
readonly multiGroup: "People who saw more than one group were excluded.";
|
|
35
|
+
readonly multiGroupNext: "Check for caching or a page placed twice before trusting the results.";
|
|
36
|
+
readonly mismatch: "Beacons that didn't match the assigned group were ignored.";
|
|
37
|
+
readonly mismatchNext: "Check that the page reports the group it actually showed.";
|
|
38
|
+
readonly identity: "Some linked identities were seen in different groups.";
|
|
39
|
+
readonly identityNext: "Check identity linking at sign-in and registration.";
|
|
40
|
+
readonly tooFew: "Too few people have seen the compared groups.";
|
|
41
|
+
readonly tooFewNext: "Keep collecting results until each compared group reaches the planned minimum.";
|
|
42
|
+
readonly layerFull: "The layer has fewer slices reserved than the requested allocation.";
|
|
43
|
+
readonly layerNext: "Free slices in the layer, then raise participation from the actions panel.";
|
|
44
|
+
readonly unavailableNext: "Recompute; if it persists, contact a developer.";
|
|
45
|
+
readonly loading: "Loading results…";
|
|
46
|
+
readonly refreshing: "Refreshing…";
|
|
47
|
+
readonly retryPreview: "Retry preview links";
|
|
48
|
+
readonly forbidden: "You don't have access to results.";
|
|
49
|
+
readonly empty: "No results yet — the first results appear within the hour after Start.";
|
|
50
|
+
readonly retry: "Retry";
|
|
51
|
+
readonly round: "Round";
|
|
52
|
+
readonly recompute: "Recompute";
|
|
53
|
+
readonly recomputing: "Recomputing…";
|
|
54
|
+
readonly primary: "Primary outcome";
|
|
55
|
+
readonly secondary: "Supporting (not used for the decision)";
|
|
56
|
+
readonly guardrail: "Guardrails";
|
|
57
|
+
readonly chart: "Confidence interval over time";
|
|
58
|
+
readonly noHistory: "Not enough history yet.";
|
|
59
|
+
};
|
|
60
|
+
export declare const roundLabel: (round: number, kind: string) => string;
|
|
61
|
+
export declare const decidedTitle: (winner: string) => string;
|
|
62
|
+
export declare const shippingTitle: (winner: string) => string;
|
|
63
|
+
export declare const moreDays: (days: string) => string;
|
|
64
|
+
export declare const collectingCopy: (n: string, minimum: string, conversions: string, conversionMinimum: string) => string;
|
|
65
|
+
export declare const uncappedTotal: (total: string) => string;
|
|
66
|
+
export declare const cappedCount: (count: string, cap: string) => string;
|
|
67
|
+
export declare const atLeast: (bound: string) => string;
|
|
68
|
+
export declare const atMost: (bound: string) => string;
|
|
69
|
+
export declare const intervalCopy: (low: string, high: string) => string;
|
|
70
|
+
export declare const srmP: (p: string) => string;
|
|
71
|
+
export declare const shareCopy: (label: string, expected: string, observed: string) => string;
|
|
72
|
+
export declare const exclusionCopy: (count: string, share: string) => string;
|
|
73
|
+
export declare const ignoredCopy: (count: string) => string;
|
|
74
|
+
export declare const conflictCopy: (share: string) => string;
|
|
75
|
+
export declare const metricUnavailable: (name: string, reason: string) => string;
|
|
76
|
+
export declare const chartSummary: (metric: string, groups: string, from: string, to: string, changes?: string[]) => string;
|
|
77
|
+
export declare const contentChangeTitle: (date: string) => string;
|
|
78
|
+
export declare const summaryLine: (exposures: string, days: string, verdict: string) => string;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export const RESULTS_COPY = {
|
|
2
|
+
group: 'Group',
|
|
3
|
+
people: 'People',
|
|
4
|
+
conversions: 'Conversions',
|
|
5
|
+
mean: 'Mean',
|
|
6
|
+
lift: 'Lift',
|
|
7
|
+
ci: 'Confidence interval',
|
|
8
|
+
adjustedCI: 'Adjusted confidence interval',
|
|
9
|
+
pValue: 'p-value',
|
|
10
|
+
adjustedPValue: 'Adjusted p-value',
|
|
11
|
+
chanceToWin: 'Chance to win',
|
|
12
|
+
risk: 'Risk',
|
|
13
|
+
comparison: 'Comparison',
|
|
14
|
+
original: 'Original',
|
|
15
|
+
holdout: 'Measured, not compared',
|
|
16
|
+
holdoutBaseline: 'Holdout · baseline',
|
|
17
|
+
shippedGroup: 'the winner',
|
|
18
|
+
significance: {
|
|
19
|
+
better: 'Better',
|
|
20
|
+
worse: 'Worse',
|
|
21
|
+
none: 'No clear difference'
|
|
22
|
+
},
|
|
23
|
+
guardrails: {
|
|
24
|
+
failing: 'Failing',
|
|
25
|
+
ok: 'OK',
|
|
26
|
+
warning: 'Watch',
|
|
27
|
+
insufficient: 'Too little data'
|
|
28
|
+
},
|
|
29
|
+
plannedEnd: 'Keep running to the planned end date.',
|
|
30
|
+
infeasible: 'A clear answer would take more than 90 days at this traffic.',
|
|
31
|
+
noCap: 'Not capped: fewer than 20 people had this outcome in the 90 days before Start, so every value counts in full.',
|
|
32
|
+
quality: 'Data quality',
|
|
33
|
+
srm: "Traffic isn't splitting as set. Check for caching or a page placed twice.",
|
|
34
|
+
multiGroup: 'People who saw more than one group were excluded.',
|
|
35
|
+
multiGroupNext: 'Check for caching or a page placed twice before trusting the results.',
|
|
36
|
+
mismatch: "Beacons that didn't match the assigned group were ignored.",
|
|
37
|
+
mismatchNext: 'Check that the page reports the group it actually showed.',
|
|
38
|
+
identity: 'Some linked identities were seen in different groups.',
|
|
39
|
+
identityNext: 'Check identity linking at sign-in and registration.',
|
|
40
|
+
tooFew: 'Too few people have seen the compared groups.',
|
|
41
|
+
tooFewNext: 'Keep collecting results until each compared group reaches the planned minimum.',
|
|
42
|
+
layerFull: 'The layer has fewer slices reserved than the requested allocation.',
|
|
43
|
+
layerNext: 'Free slices in the layer, then raise participation from the actions panel.',
|
|
44
|
+
unavailableNext: 'Recompute; if it persists, contact a developer.',
|
|
45
|
+
loading: 'Loading results…',
|
|
46
|
+
refreshing: 'Refreshing…',
|
|
47
|
+
retryPreview: 'Retry preview links',
|
|
48
|
+
forbidden: "You don't have access to results.",
|
|
49
|
+
empty: 'No results yet — the first results appear within the hour after Start.',
|
|
50
|
+
retry: 'Retry',
|
|
51
|
+
round: 'Round',
|
|
52
|
+
recompute: 'Recompute',
|
|
53
|
+
recomputing: 'Recomputing…',
|
|
54
|
+
primary: 'Primary outcome',
|
|
55
|
+
secondary: 'Supporting (not used for the decision)',
|
|
56
|
+
guardrail: 'Guardrails',
|
|
57
|
+
chart: 'Confidence interval over time',
|
|
58
|
+
noHistory: 'Not enough history yet.'
|
|
59
|
+
};
|
|
60
|
+
export const roundLabel = (round, kind)=>`Round ${round} · ${kind}`;
|
|
61
|
+
export const decidedTitle = (winner)=>`Decided: ${winner}`;
|
|
62
|
+
export const shippingTitle = (winner)=>`Since shipping ${winner}`;
|
|
63
|
+
export const moreDays = (days)=>`About ${days} more ${days === '1' ? 'day' : 'days'}.`;
|
|
64
|
+
export const collectingCopy = (n, minimum, conversions, conversionMinimum)=>`${n} of ${minimum} people, ${conversions} of ${conversionMinimum} conversions`;
|
|
65
|
+
export const uncappedTotal = (total)=>`Total ${total} (not capped)`;
|
|
66
|
+
export const cappedCount = (count, cap)=>`${count} capped at ${cap}`;
|
|
67
|
+
export const atLeast = (bound)=>`at least ${bound}`;
|
|
68
|
+
export const atMost = (bound)=>`at most ${bound}`;
|
|
69
|
+
export const intervalCopy = (low, high)=>`${low} to ${high}`;
|
|
70
|
+
export const srmP = (p)=>`Traffic split check: p = ${p}.`;
|
|
71
|
+
export const shareCopy = (label, expected, observed)=>`${label}: expected ${expected}, observed ${observed}`;
|
|
72
|
+
export const exclusionCopy = (count, share)=>`${count} excluded (${share}).`;
|
|
73
|
+
export const ignoredCopy = (count)=>`${count} ignored.`;
|
|
74
|
+
export const conflictCopy = (share)=>`${share} with identity conflicts.`;
|
|
75
|
+
export const metricUnavailable = (name, reason)=>`${name} is unavailable: ${reason}`;
|
|
76
|
+
export const chartSummary = (metric, groups, from, to, changes = [])=>`${metric}: lift and confidence intervals for ${groups}, ${from} to ${to}.${changes.length ? ` Content changed on ${new Intl.ListFormat('en-US', {
|
|
77
|
+
style: 'long',
|
|
78
|
+
type: 'conjunction'
|
|
79
|
+
}).format(changes)}.` : ''}`;
|
|
80
|
+
export const contentChangeTitle = (date)=>`Content changed ${date} by an editor`;
|
|
81
|
+
export const summaryLine = (exposures, days, verdict)=>`${exposures} ${exposures === '1' ? 'exposure' : 'exposures'} · ${days} ${days === '1' ? 'day' : 'days'} · ${verdict}`;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RefusalCode } from '../../types/endpoints.js';
|
|
2
|
+
export declare const REVIEW_HINTS: Record<RefusalCode, string>;
|
|
3
|
+
export declare const REVIEW_DONE: Record<RefusalCode, string>;
|
|
4
|
+
export declare const REVIEW_COPY: {
|
|
5
|
+
readonly save: "Save the experiment to review it.";
|
|
6
|
+
readonly loading: "Reviewing the saved experiment…";
|
|
7
|
+
readonly saveFirst: "Save your changes first; Start uses the saved experiment.";
|
|
8
|
+
readonly noBaseline: "No data yet for this metric.";
|
|
9
|
+
readonly unknownTraffic: "Traffic unknown until the test starts.";
|
|
10
|
+
readonly noEstimate: "We can't estimate the duration yet: enter how many people reach this per day.";
|
|
11
|
+
readonly infeasible: "A clear answer would take more than 90 days at this traffic.";
|
|
12
|
+
readonly apply: "Apply";
|
|
13
|
+
readonly start: "Start";
|
|
14
|
+
readonly retry: "Retry";
|
|
15
|
+
readonly duration: "Planned duration (days)";
|
|
16
|
+
readonly tuning: "Sensitivity setting (prefilled; leave as is unless a developer says otherwise)";
|
|
17
|
+
readonly preview: "Preview";
|
|
18
|
+
readonly noPreview: "Preview isn't set up for this page type";
|
|
19
|
+
readonly raise: "Raise allocation";
|
|
20
|
+
readonly allocation: "Allocation (%)";
|
|
21
|
+
readonly addMetric: "Add a metric";
|
|
22
|
+
readonly allocationBody: "Raising allocation adds people; nobody already taking part changes group. Lowering needs a new round.";
|
|
23
|
+
readonly allocationInvalid: "Enter a whole percentage higher than the current allocation and no more than 100.";
|
|
24
|
+
readonly role: "Role";
|
|
25
|
+
readonly supporting: "Supporting";
|
|
26
|
+
readonly guardrail: "Guardrail";
|
|
27
|
+
readonly metric: "Metric";
|
|
28
|
+
readonly chooseMetric: "Choose a metric";
|
|
29
|
+
readonly loadingMetrics: "Loading metrics…";
|
|
30
|
+
readonly noMetrics: "All available metrics are already on this experiment.";
|
|
31
|
+
readonly checkFallback: "Review this setting before starting.";
|
|
32
|
+
readonly checkDoneFallback: "Ready";
|
|
33
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// Cover the whole union so newly added start checks cannot ship without editor copy.
|
|
2
|
+
export const REVIEW_HINTS = {
|
|
3
|
+
'recompute-failed': "Results couldn't be refreshed right now. Try Recompute again in a minute.",
|
|
4
|
+
'weights-total': 'Set the group percentages to total 100.',
|
|
5
|
+
'control-count': 'Keep exactly one Original group.',
|
|
6
|
+
'control-first': 'Put the Original first.',
|
|
7
|
+
'holdout-last': 'Put the holdout last.',
|
|
8
|
+
'holdout-count': 'Keep at most one holdout.',
|
|
9
|
+
'variant-count': 'Add between one and three variants.',
|
|
10
|
+
'duplicate-key': 'Give each group a different standard name.',
|
|
11
|
+
'duplicate-slot': 'Give each group its own content slot.',
|
|
12
|
+
'slot-required': 'Add content slots for the Original and each variant.',
|
|
13
|
+
'invalid-key': 'Use the standard group names: Original, Variant A–C, Holdout.',
|
|
14
|
+
'not-found': 'Save the experiment before reviewing it.',
|
|
15
|
+
'no-planned-duration': 'Apply the suggested duration or enter a planned duration in Metrics.',
|
|
16
|
+
'no-primary-metric': 'Choose the main metric in Metrics.',
|
|
17
|
+
'no-placements': 'Add this experiment to a page.',
|
|
18
|
+
'empty-slot': 'Add content for the Original and each variant on every page.',
|
|
19
|
+
'page-no-targets': 'Enter a page path for the Original and each variant in Groups.',
|
|
20
|
+
'page-user-unit': 'Choose visitors in Who for a whole-page experiment.',
|
|
21
|
+
'flag-no-point': 'Choose a setting in What.',
|
|
22
|
+
'flag-params-invalid': 'Check each group’s settings in Groups.',
|
|
23
|
+
'flag-point-busy': 'Stop the other experiment using this setting first.',
|
|
24
|
+
'flag-placement-missing': 'Set up content for every group where this setting is used.',
|
|
25
|
+
'layer-full': 'Free space in the layer or lower allocation before starting.',
|
|
26
|
+
'layer-unit-mismatch': 'Choose a layer that measures the same people as this experiment.',
|
|
27
|
+
'unit-source-mismatch': 'Choose a metric that measures the people selected in Who.',
|
|
28
|
+
'unknown-metric-source': 'A metric’s data source is no longer available. Choose another metric or ask a developer to restore the source.',
|
|
29
|
+
'no-reach-per-day': 'Enter how many people reach this per day in Metrics.',
|
|
30
|
+
'invalid-status': 'Only a draft or stopped experiment can start.',
|
|
31
|
+
'stale-draft': 'Reload to review the latest saved experiment.',
|
|
32
|
+
'commit-unverified': 'Reload to check whether the change was saved.',
|
|
33
|
+
'allocation-lower': 'Choose a higher percentage. Lowering needs a new round.',
|
|
34
|
+
'confirmation-required': 'Review and confirm this change.',
|
|
35
|
+
'invalid-winner': 'Choose the Original or a variant.',
|
|
36
|
+
'slices-taken': 'Free the space this experiment needs in its layer.',
|
|
37
|
+
'locked-placement': 'Finish editing every page using this experiment, then try again.',
|
|
38
|
+
'not-implemented': 'This review is not available yet.',
|
|
39
|
+
forbidden: 'Ask an admin for permission to manage experiments.',
|
|
40
|
+
unauthenticated: 'Sign in again to continue.',
|
|
41
|
+
'body-too-large': 'Reduce the size of this change and try again.',
|
|
42
|
+
'too-many-ids': 'Too many experiments were requested at once. Reload the list; if it keeps happening, contact a developer.',
|
|
43
|
+
'invalid-phase': "That round doesn't exist for this experiment. Choose another round.",
|
|
44
|
+
'invalid-ids': "The list asked for experiments it couldn't read. Reload the list.",
|
|
45
|
+
'invalid-body': 'Check the values and try again.',
|
|
46
|
+
'undeclared-targeting-key': "A rule in Who uses an attribute this site doesn't provide. Remove the rule, or ask a developer to add the attribute.",
|
|
47
|
+
'invalid-targeting-rule': "A rule in Who doesn't fit its attribute (for example, text where a number is needed). Fix the rule in Who.",
|
|
48
|
+
'duplicate-metric': 'The same metric is listed more than once. Remove the duplicate in Metrics.'
|
|
49
|
+
};
|
|
50
|
+
export const REVIEW_DONE = {
|
|
51
|
+
'recompute-failed': 'Results refreshed',
|
|
52
|
+
'weights-total': 'Group percentages total 100',
|
|
53
|
+
'control-count': 'One Original group chosen',
|
|
54
|
+
'control-first': 'Original comes first',
|
|
55
|
+
'holdout-last': 'Holdout comes last',
|
|
56
|
+
'holdout-count': 'Holdout count checked',
|
|
57
|
+
'variant-count': 'Variant count checked',
|
|
58
|
+
'duplicate-key': 'Group names are unique',
|
|
59
|
+
'duplicate-slot': 'Content slots are unique',
|
|
60
|
+
'slot-required': 'Content slots chosen',
|
|
61
|
+
'invalid-key': 'Standard group names used',
|
|
62
|
+
'not-found': 'Saved experiment found',
|
|
63
|
+
'no-planned-duration': 'Planned duration chosen',
|
|
64
|
+
'no-primary-metric': 'Main metric chosen',
|
|
65
|
+
'no-placements': 'Experiment added to a page',
|
|
66
|
+
'empty-slot': 'Content ready for every group',
|
|
67
|
+
'page-no-targets': 'Page paths chosen',
|
|
68
|
+
'page-user-unit': 'Visitors chosen for the whole-page experiment',
|
|
69
|
+
'flag-no-point': 'Setting chosen',
|
|
70
|
+
'flag-params-invalid': 'Group settings checked',
|
|
71
|
+
'flag-point-busy': 'Setting available',
|
|
72
|
+
'flag-placement-missing': 'Content ready wherever this setting is used',
|
|
73
|
+
'layer-full': 'Space available in the layer',
|
|
74
|
+
'layer-unit-mismatch': 'Layer measures the same people',
|
|
75
|
+
'unit-source-mismatch': 'Metric measures the selected people',
|
|
76
|
+
'unknown-metric-source': 'Metric data sources available',
|
|
77
|
+
'no-reach-per-day': 'Daily reach entered',
|
|
78
|
+
'invalid-status': 'Experiment ready to start',
|
|
79
|
+
'stale-draft': 'Latest saved experiment reviewed',
|
|
80
|
+
'commit-unverified': 'Saved change verified',
|
|
81
|
+
'allocation-lower': 'Higher percentage chosen',
|
|
82
|
+
'confirmation-required': 'Change confirmed',
|
|
83
|
+
'invalid-winner': 'Original or variant chosen',
|
|
84
|
+
'slices-taken': 'Required layer space available',
|
|
85
|
+
'locked-placement': 'Pages available for changes',
|
|
86
|
+
'not-implemented': 'Review available',
|
|
87
|
+
forbidden: 'Permission to manage experiments checked',
|
|
88
|
+
unauthenticated: 'Signed in',
|
|
89
|
+
'body-too-large': 'Change size checked',
|
|
90
|
+
'too-many-ids': 'List request size OK',
|
|
91
|
+
'invalid-phase': 'Round found',
|
|
92
|
+
'invalid-ids': 'List request valid',
|
|
93
|
+
'invalid-body': 'Values checked',
|
|
94
|
+
'undeclared-targeting-key': 'Targeting attributes recognised',
|
|
95
|
+
'invalid-targeting-rule': 'Targeting rules look right',
|
|
96
|
+
'duplicate-metric': 'No metric listed twice'
|
|
97
|
+
};
|
|
98
|
+
export const REVIEW_COPY = {
|
|
99
|
+
save: 'Save the experiment to review it.',
|
|
100
|
+
loading: 'Reviewing the saved experiment…',
|
|
101
|
+
saveFirst: 'Save your changes first; Start uses the saved experiment.',
|
|
102
|
+
noBaseline: 'No data yet for this metric.',
|
|
103
|
+
unknownTraffic: 'Traffic unknown until the test starts.',
|
|
104
|
+
noEstimate: "We can't estimate the duration yet: enter how many people reach this per day.",
|
|
105
|
+
infeasible: 'A clear answer would take more than 90 days at this traffic.',
|
|
106
|
+
apply: 'Apply',
|
|
107
|
+
start: 'Start',
|
|
108
|
+
retry: 'Retry',
|
|
109
|
+
duration: 'Planned duration (days)',
|
|
110
|
+
tuning: 'Sensitivity setting (prefilled; leave as is unless a developer says otherwise)',
|
|
111
|
+
preview: 'Preview',
|
|
112
|
+
noPreview: "Preview isn't set up for this page type",
|
|
113
|
+
raise: 'Raise allocation',
|
|
114
|
+
allocation: 'Allocation (%)',
|
|
115
|
+
addMetric: 'Add a metric',
|
|
116
|
+
allocationBody: 'Raising allocation adds people; nobody already taking part changes group. Lowering needs a new round.',
|
|
117
|
+
allocationInvalid: 'Enter a whole percentage higher than the current allocation and no more than 100.',
|
|
118
|
+
role: 'Role',
|
|
119
|
+
supporting: 'Supporting',
|
|
120
|
+
guardrail: 'Guardrail',
|
|
121
|
+
metric: 'Metric',
|
|
122
|
+
chooseMetric: 'Choose a metric',
|
|
123
|
+
loadingMetrics: 'Loading metrics…',
|
|
124
|
+
noMetrics: 'All available metrics are already on this experiment.',
|
|
125
|
+
checkFallback: 'Review this setting before starting.',
|
|
126
|
+
checkDoneFallback: 'Ready'
|
|
127
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const STATUS_TOOLTIPS: {
|
|
2
|
+
readonly draft: "Draft";
|
|
3
|
+
readonly running: "Running";
|
|
4
|
+
readonly stopped: "Stopped — everyone sees the Original";
|
|
5
|
+
readonly decided: "Decided — everyone sees the winner";
|
|
6
|
+
readonly decidedWithHoldout: "Decided — everyone sees the winner, except the holdout";
|
|
7
|
+
readonly archived: "Archived";
|
|
8
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const STATUS_TOOLTIPS = {
|
|
2
|
+
draft: 'Draft',
|
|
3
|
+
running: 'Running',
|
|
4
|
+
stopped: 'Stopped — everyone sees the Original',
|
|
5
|
+
decided: 'Decided — everyone sees the winner',
|
|
6
|
+
decidedWithHoldout: 'Decided — everyone sees the winner, except the holdout',
|
|
7
|
+
archived: 'Archived'
|
|
8
|
+
};
|