@contractspec/example.personalization 3.7.6 → 3.7.10

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.
Files changed (39) hide show
  1. package/.turbo/turbo-build.log +36 -30
  2. package/AGENTS.md +43 -19
  3. package/CHANGELOG.md +28 -0
  4. package/README.md +67 -16
  5. package/dist/behavior-tracking.js +3 -3
  6. package/dist/browser/behavior-tracking.js +3 -3
  7. package/dist/browser/index.js +154 -30
  8. package/dist/browser/overlay-customization.js +3 -3
  9. package/dist/browser/personalization.experiment.js +62 -0
  10. package/dist/browser/personalization.theme.js +64 -0
  11. package/dist/browser/workflow-extension.js +1 -1
  12. package/dist/contracts.test.d.ts +1 -0
  13. package/dist/index.d.ts +4 -2
  14. package/dist/index.js +154 -30
  15. package/dist/node/behavior-tracking.js +3 -3
  16. package/dist/node/index.js +154 -30
  17. package/dist/node/overlay-customization.js +3 -3
  18. package/dist/node/personalization.experiment.js +62 -0
  19. package/dist/node/personalization.theme.js +64 -0
  20. package/dist/node/workflow-extension.js +1 -1
  21. package/dist/overlay-customization.js +3 -3
  22. package/dist/personalization.experiment.d.ts +2 -0
  23. package/dist/personalization.experiment.js +63 -0
  24. package/dist/personalization.theme.d.ts +2 -0
  25. package/dist/personalization.theme.js +65 -0
  26. package/dist/workflow-extension.js +1 -1
  27. package/package.json +38 -10
  28. package/src/behavior-tracking.ts +37 -37
  29. package/src/contracts.test.ts +20 -0
  30. package/src/docs/personalization.docblock.ts +21 -21
  31. package/src/example.ts +26 -26
  32. package/src/index.ts +4 -2
  33. package/src/overlay-customization.ts +45 -45
  34. package/src/personalization.experiment.ts +61 -0
  35. package/src/personalization.feature.ts +16 -16
  36. package/src/personalization.theme.ts +63 -0
  37. package/src/workflow-extension.ts +47 -47
  38. package/tsconfig.json +17 -15
  39. package/tsdown.config.js +1 -1
@@ -0,0 +1,64 @@
1
+ // src/personalization.theme.ts
2
+ import {
3
+ OwnersEnum,
4
+ StabilityEnum
5
+ } from "@contractspec/lib.contracts-spec/ownership";
6
+ var PersonalizationTheme = {
7
+ meta: {
8
+ key: "personalization.theme.guided-onboarding",
9
+ version: "1.0.0",
10
+ title: "Guided Onboarding Theme",
11
+ description: "Theme tokens used when the personalized onboarding experience is active.",
12
+ domain: "personalization",
13
+ owners: [OwnersEnum.PlatformCore],
14
+ tags: ["personalization", "theme", "onboarding"],
15
+ stability: StabilityEnum.Experimental,
16
+ scopes: ["tenant", "user"]
17
+ },
18
+ tokens: {
19
+ colors: {
20
+ surface: { value: "#FCF6E8" },
21
+ accent: { value: "#C8742A" },
22
+ text: { value: "#2F2419" }
23
+ },
24
+ radii: {
25
+ card: { value: 18 }
26
+ },
27
+ space: {
28
+ panel: { value: 24 }
29
+ },
30
+ typography: {
31
+ body: { value: 16 },
32
+ title: { value: 28 }
33
+ },
34
+ motion: {
35
+ stagger: { value: "180ms" }
36
+ }
37
+ },
38
+ components: [
39
+ {
40
+ component: "OnboardingChecklist",
41
+ variants: {
42
+ guided: {
43
+ props: {
44
+ emphasis: "warm"
45
+ }
46
+ }
47
+ }
48
+ }
49
+ ],
50
+ overrides: [
51
+ {
52
+ scope: "tenant",
53
+ target: "tenant:acme",
54
+ tokens: {
55
+ colors: {
56
+ accent: { value: "#8A4B12" }
57
+ }
58
+ }
59
+ }
60
+ ]
61
+ };
62
+ export {
63
+ PersonalizationTheme
64
+ };
@@ -1,7 +1,7 @@
1
1
  // src/workflow-extension.ts
2
2
  import { StabilityEnum } from "@contractspec/lib.contracts-spec";
3
- import { WorkflowComposer } from "@contractspec/lib.workflow-composer";
4
3
  import { Logger, LogLevel } from "@contractspec/lib.logger";
4
+ import { WorkflowComposer } from "@contractspec/lib.workflow-composer";
5
5
  var logger = new Logger({
6
6
  level: LogLevel.INFO,
7
7
  environment: "production",
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export * from './behavior-tracking';
2
+ export { default as example } from './example';
2
3
  export * from './overlay-customization';
3
- export * from './workflow-extension';
4
+ export * from './personalization.experiment';
4
5
  export * from './personalization.feature';
5
- export { default as example } from './example';
6
+ export * from './personalization.theme';
7
+ export * from './workflow-extension';
6
8
  import './docs';
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  // @bun
2
2
  // src/behavior-tracking.ts
3
- import { createBehaviorTracker } from "@contractspec/lib.personalization/tracker";
4
- import { InMemoryBehaviorStore } from "@contractspec/lib.personalization/store";
5
- import { BehaviorAnalyzer } from "@contractspec/lib.personalization/analyzer";
6
3
  import { Logger, LogLevel } from "@contractspec/lib.logger";
4
+ import { BehaviorAnalyzer } from "@contractspec/lib.personalization/analyzer";
5
+ import { InMemoryBehaviorStore } from "@contractspec/lib.personalization/store";
6
+ import { createBehaviorTracker } from "@contractspec/lib.personalization/tracker";
7
7
  var logger = new Logger({
8
8
  level: LogLevel.INFO,
9
9
  environment: "production",
@@ -113,13 +113,13 @@ var example = defineExample({
113
113
  var example_default = example;
114
114
 
115
115
  // src/overlay-customization.ts
116
- import { defineOverlay } from "@contractspec/lib.overlay-engine/spec";
117
- import { signOverlay } from "@contractspec/lib.overlay-engine/signer";
116
+ import { Logger as Logger2, LogLevel as LogLevel2 } from "@contractspec/lib.logger";
118
117
  import {
119
118
  OverlayEngine,
120
119
  OverlayRegistry
121
120
  } from "@contractspec/lib.overlay-engine";
122
- import { Logger as Logger2, LogLevel as LogLevel2 } from "@contractspec/lib.logger";
121
+ import { signOverlay } from "@contractspec/lib.overlay-engine/signer";
122
+ import { defineOverlay } from "@contractspec/lib.overlay-engine/spec";
123
123
  var logger2 = new Logger2({
124
124
  level: LogLevel2.INFO,
125
125
  environment: "production",
@@ -163,10 +163,152 @@ async function runOverlayCustomizationExample() {
163
163
  logger2.info("Overlay applied", { fields: result.target.fields });
164
164
  }
165
165
 
166
+ // src/personalization.experiment.ts
167
+ import {
168
+ OwnersEnum,
169
+ StabilityEnum
170
+ } from "@contractspec/lib.contracts-spec/ownership";
171
+ var PersonalizationExperiment = {
172
+ meta: {
173
+ key: "personalization.experiment.overlay-copy",
174
+ version: "1.0.0",
175
+ title: "Personalization Overlay Copy Experiment",
176
+ description: "Tests a control onboarding copy against a personalized overlay variant.",
177
+ domain: "personalization",
178
+ owners: [OwnersEnum.PlatformCore],
179
+ tags: ["personalization", "experiment", "overlay"],
180
+ stability: StabilityEnum.Experimental
181
+ },
182
+ controlVariant: "control",
183
+ variants: [
184
+ {
185
+ id: "control",
186
+ key: "control",
187
+ description: "Default onboarding copy and standard workflow."
188
+ },
189
+ {
190
+ id: "personalized-overlay",
191
+ key: "personalized-overlay",
192
+ description: "Personalized copy with a branded theme override.",
193
+ overrides: [
194
+ {
195
+ type: "theme",
196
+ target: "personalization.theme.guided-onboarding",
197
+ version: "1.0.0"
198
+ },
199
+ {
200
+ type: "workflow",
201
+ target: "billing.invoiceApproval",
202
+ version: "1.0.0"
203
+ }
204
+ ]
205
+ }
206
+ ],
207
+ allocation: {
208
+ type: "sticky",
209
+ attribute: "userId",
210
+ salt: "personalization-overlay-copy"
211
+ },
212
+ successMetrics: [
213
+ {
214
+ key: "checklist-completion-rate",
215
+ telemetryEvent: {
216
+ key: "personalization.assignment.completed",
217
+ version: "1.0.0"
218
+ },
219
+ aggregation: "count",
220
+ target: 1
221
+ }
222
+ ],
223
+ tags: ["personalization", "experiment"]
224
+ };
225
+
226
+ // src/personalization.feature.ts
227
+ import { defineFeature } from "@contractspec/lib.contracts-spec";
228
+ var PersonalizationFeature = defineFeature({
229
+ meta: {
230
+ key: "personalization",
231
+ version: "1.0.0",
232
+ title: "Personalization Patterns",
233
+ description: "Behavior tracking, overlay customization, and workflow extension patterns",
234
+ domain: "personalization",
235
+ owners: ["@examples"],
236
+ tags: ["personalization", "behavior", "overlay", "workflow"],
237
+ stability: "experimental"
238
+ },
239
+ telemetry: [{ key: "personalization.telemetry", version: "1.0.0" }],
240
+ docs: [
241
+ "docs.examples.personalization",
242
+ "docs.examples.personalization.usage"
243
+ ]
244
+ });
245
+
246
+ // src/personalization.theme.ts
247
+ import {
248
+ OwnersEnum as OwnersEnum2,
249
+ StabilityEnum as StabilityEnum2
250
+ } from "@contractspec/lib.contracts-spec/ownership";
251
+ var PersonalizationTheme = {
252
+ meta: {
253
+ key: "personalization.theme.guided-onboarding",
254
+ version: "1.0.0",
255
+ title: "Guided Onboarding Theme",
256
+ description: "Theme tokens used when the personalized onboarding experience is active.",
257
+ domain: "personalization",
258
+ owners: [OwnersEnum2.PlatformCore],
259
+ tags: ["personalization", "theme", "onboarding"],
260
+ stability: StabilityEnum2.Experimental,
261
+ scopes: ["tenant", "user"]
262
+ },
263
+ tokens: {
264
+ colors: {
265
+ surface: { value: "#FCF6E8" },
266
+ accent: { value: "#C8742A" },
267
+ text: { value: "#2F2419" }
268
+ },
269
+ radii: {
270
+ card: { value: 18 }
271
+ },
272
+ space: {
273
+ panel: { value: 24 }
274
+ },
275
+ typography: {
276
+ body: { value: 16 },
277
+ title: { value: 28 }
278
+ },
279
+ motion: {
280
+ stagger: { value: "180ms" }
281
+ }
282
+ },
283
+ components: [
284
+ {
285
+ component: "OnboardingChecklist",
286
+ variants: {
287
+ guided: {
288
+ props: {
289
+ emphasis: "warm"
290
+ }
291
+ }
292
+ }
293
+ }
294
+ ],
295
+ overrides: [
296
+ {
297
+ scope: "tenant",
298
+ target: "tenant:acme",
299
+ tokens: {
300
+ colors: {
301
+ accent: { value: "#8A4B12" }
302
+ }
303
+ }
304
+ }
305
+ ]
306
+ };
307
+
166
308
  // src/workflow-extension.ts
167
- import { StabilityEnum } from "@contractspec/lib.contracts-spec";
168
- import { WorkflowComposer } from "@contractspec/lib.workflow-composer";
309
+ import { StabilityEnum as StabilityEnum3 } from "@contractspec/lib.contracts-spec";
169
310
  import { Logger as Logger3, LogLevel as LogLevel3 } from "@contractspec/lib.logger";
311
+ import { WorkflowComposer } from "@contractspec/lib.workflow-composer";
170
312
  var logger3 = new Logger3({
171
313
  level: LogLevel3.INFO,
172
314
  environment: "production",
@@ -181,7 +323,7 @@ var BaseWorkflow = {
181
323
  tags: [],
182
324
  description: "",
183
325
  domain: "billing",
184
- stability: StabilityEnum.Stable
326
+ stability: StabilityEnum3.Stable
185
327
  },
186
328
  definition: {
187
329
  steps: [
@@ -219,31 +361,13 @@ function logTenantWorkflowSteps(workflow) {
219
361
  steps: workflow.definition.steps.map((step) => step.id)
220
362
  });
221
363
  }
222
-
223
- // src/personalization.feature.ts
224
- import { defineFeature } from "@contractspec/lib.contracts-spec";
225
- var PersonalizationFeature = defineFeature({
226
- meta: {
227
- key: "personalization",
228
- version: "1.0.0",
229
- title: "Personalization Patterns",
230
- description: "Behavior tracking, overlay customization, and workflow extension patterns",
231
- domain: "personalization",
232
- owners: ["@examples"],
233
- tags: ["personalization", "behavior", "overlay", "workflow"],
234
- stability: "experimental"
235
- },
236
- telemetry: [{ key: "personalization.telemetry", version: "1.0.0" }],
237
- docs: [
238
- "docs.examples.personalization",
239
- "docs.examples.personalization.usage"
240
- ]
241
- });
242
364
  export {
243
365
  runOverlayCustomizationExample,
244
366
  runBehaviorTrackingExample,
245
367
  logTenantWorkflowSteps,
246
368
  example_default as example,
247
369
  composeTenantWorkflowExample,
248
- PersonalizationFeature
370
+ PersonalizationTheme,
371
+ PersonalizationFeature,
372
+ PersonalizationExperiment
249
373
  };
@@ -1,8 +1,8 @@
1
1
  // src/behavior-tracking.ts
2
- import { createBehaviorTracker } from "@contractspec/lib.personalization/tracker";
3
- import { InMemoryBehaviorStore } from "@contractspec/lib.personalization/store";
4
- import { BehaviorAnalyzer } from "@contractspec/lib.personalization/analyzer";
5
2
  import { Logger, LogLevel } from "@contractspec/lib.logger";
3
+ import { BehaviorAnalyzer } from "@contractspec/lib.personalization/analyzer";
4
+ import { InMemoryBehaviorStore } from "@contractspec/lib.personalization/store";
5
+ import { createBehaviorTracker } from "@contractspec/lib.personalization/tracker";
6
6
  var logger = new Logger({
7
7
  level: LogLevel.INFO,
8
8
  environment: "production",
@@ -1,8 +1,8 @@
1
1
  // src/behavior-tracking.ts
2
- import { createBehaviorTracker } from "@contractspec/lib.personalization/tracker";
3
- import { InMemoryBehaviorStore } from "@contractspec/lib.personalization/store";
4
- import { BehaviorAnalyzer } from "@contractspec/lib.personalization/analyzer";
5
2
  import { Logger, LogLevel } from "@contractspec/lib.logger";
3
+ import { BehaviorAnalyzer } from "@contractspec/lib.personalization/analyzer";
4
+ import { InMemoryBehaviorStore } from "@contractspec/lib.personalization/store";
5
+ import { createBehaviorTracker } from "@contractspec/lib.personalization/tracker";
6
6
  var logger = new Logger({
7
7
  level: LogLevel.INFO,
8
8
  environment: "production",
@@ -112,13 +112,13 @@ var example = defineExample({
112
112
  var example_default = example;
113
113
 
114
114
  // src/overlay-customization.ts
115
- import { defineOverlay } from "@contractspec/lib.overlay-engine/spec";
116
- import { signOverlay } from "@contractspec/lib.overlay-engine/signer";
115
+ import { Logger as Logger2, LogLevel as LogLevel2 } from "@contractspec/lib.logger";
117
116
  import {
118
117
  OverlayEngine,
119
118
  OverlayRegistry
120
119
  } from "@contractspec/lib.overlay-engine";
121
- import { Logger as Logger2, LogLevel as LogLevel2 } from "@contractspec/lib.logger";
120
+ import { signOverlay } from "@contractspec/lib.overlay-engine/signer";
121
+ import { defineOverlay } from "@contractspec/lib.overlay-engine/spec";
122
122
  var logger2 = new Logger2({
123
123
  level: LogLevel2.INFO,
124
124
  environment: "production",
@@ -162,10 +162,152 @@ async function runOverlayCustomizationExample() {
162
162
  logger2.info("Overlay applied", { fields: result.target.fields });
163
163
  }
164
164
 
165
+ // src/personalization.experiment.ts
166
+ import {
167
+ OwnersEnum,
168
+ StabilityEnum
169
+ } from "@contractspec/lib.contracts-spec/ownership";
170
+ var PersonalizationExperiment = {
171
+ meta: {
172
+ key: "personalization.experiment.overlay-copy",
173
+ version: "1.0.0",
174
+ title: "Personalization Overlay Copy Experiment",
175
+ description: "Tests a control onboarding copy against a personalized overlay variant.",
176
+ domain: "personalization",
177
+ owners: [OwnersEnum.PlatformCore],
178
+ tags: ["personalization", "experiment", "overlay"],
179
+ stability: StabilityEnum.Experimental
180
+ },
181
+ controlVariant: "control",
182
+ variants: [
183
+ {
184
+ id: "control",
185
+ key: "control",
186
+ description: "Default onboarding copy and standard workflow."
187
+ },
188
+ {
189
+ id: "personalized-overlay",
190
+ key: "personalized-overlay",
191
+ description: "Personalized copy with a branded theme override.",
192
+ overrides: [
193
+ {
194
+ type: "theme",
195
+ target: "personalization.theme.guided-onboarding",
196
+ version: "1.0.0"
197
+ },
198
+ {
199
+ type: "workflow",
200
+ target: "billing.invoiceApproval",
201
+ version: "1.0.0"
202
+ }
203
+ ]
204
+ }
205
+ ],
206
+ allocation: {
207
+ type: "sticky",
208
+ attribute: "userId",
209
+ salt: "personalization-overlay-copy"
210
+ },
211
+ successMetrics: [
212
+ {
213
+ key: "checklist-completion-rate",
214
+ telemetryEvent: {
215
+ key: "personalization.assignment.completed",
216
+ version: "1.0.0"
217
+ },
218
+ aggregation: "count",
219
+ target: 1
220
+ }
221
+ ],
222
+ tags: ["personalization", "experiment"]
223
+ };
224
+
225
+ // src/personalization.feature.ts
226
+ import { defineFeature } from "@contractspec/lib.contracts-spec";
227
+ var PersonalizationFeature = defineFeature({
228
+ meta: {
229
+ key: "personalization",
230
+ version: "1.0.0",
231
+ title: "Personalization Patterns",
232
+ description: "Behavior tracking, overlay customization, and workflow extension patterns",
233
+ domain: "personalization",
234
+ owners: ["@examples"],
235
+ tags: ["personalization", "behavior", "overlay", "workflow"],
236
+ stability: "experimental"
237
+ },
238
+ telemetry: [{ key: "personalization.telemetry", version: "1.0.0" }],
239
+ docs: [
240
+ "docs.examples.personalization",
241
+ "docs.examples.personalization.usage"
242
+ ]
243
+ });
244
+
245
+ // src/personalization.theme.ts
246
+ import {
247
+ OwnersEnum as OwnersEnum2,
248
+ StabilityEnum as StabilityEnum2
249
+ } from "@contractspec/lib.contracts-spec/ownership";
250
+ var PersonalizationTheme = {
251
+ meta: {
252
+ key: "personalization.theme.guided-onboarding",
253
+ version: "1.0.0",
254
+ title: "Guided Onboarding Theme",
255
+ description: "Theme tokens used when the personalized onboarding experience is active.",
256
+ domain: "personalization",
257
+ owners: [OwnersEnum2.PlatformCore],
258
+ tags: ["personalization", "theme", "onboarding"],
259
+ stability: StabilityEnum2.Experimental,
260
+ scopes: ["tenant", "user"]
261
+ },
262
+ tokens: {
263
+ colors: {
264
+ surface: { value: "#FCF6E8" },
265
+ accent: { value: "#C8742A" },
266
+ text: { value: "#2F2419" }
267
+ },
268
+ radii: {
269
+ card: { value: 18 }
270
+ },
271
+ space: {
272
+ panel: { value: 24 }
273
+ },
274
+ typography: {
275
+ body: { value: 16 },
276
+ title: { value: 28 }
277
+ },
278
+ motion: {
279
+ stagger: { value: "180ms" }
280
+ }
281
+ },
282
+ components: [
283
+ {
284
+ component: "OnboardingChecklist",
285
+ variants: {
286
+ guided: {
287
+ props: {
288
+ emphasis: "warm"
289
+ }
290
+ }
291
+ }
292
+ }
293
+ ],
294
+ overrides: [
295
+ {
296
+ scope: "tenant",
297
+ target: "tenant:acme",
298
+ tokens: {
299
+ colors: {
300
+ accent: { value: "#8A4B12" }
301
+ }
302
+ }
303
+ }
304
+ ]
305
+ };
306
+
165
307
  // src/workflow-extension.ts
166
- import { StabilityEnum } from "@contractspec/lib.contracts-spec";
167
- import { WorkflowComposer } from "@contractspec/lib.workflow-composer";
308
+ import { StabilityEnum as StabilityEnum3 } from "@contractspec/lib.contracts-spec";
168
309
  import { Logger as Logger3, LogLevel as LogLevel3 } from "@contractspec/lib.logger";
310
+ import { WorkflowComposer } from "@contractspec/lib.workflow-composer";
169
311
  var logger3 = new Logger3({
170
312
  level: LogLevel3.INFO,
171
313
  environment: "production",
@@ -180,7 +322,7 @@ var BaseWorkflow = {
180
322
  tags: [],
181
323
  description: "",
182
324
  domain: "billing",
183
- stability: StabilityEnum.Stable
325
+ stability: StabilityEnum3.Stable
184
326
  },
185
327
  definition: {
186
328
  steps: [
@@ -218,31 +360,13 @@ function logTenantWorkflowSteps(workflow) {
218
360
  steps: workflow.definition.steps.map((step) => step.id)
219
361
  });
220
362
  }
221
-
222
- // src/personalization.feature.ts
223
- import { defineFeature } from "@contractspec/lib.contracts-spec";
224
- var PersonalizationFeature = defineFeature({
225
- meta: {
226
- key: "personalization",
227
- version: "1.0.0",
228
- title: "Personalization Patterns",
229
- description: "Behavior tracking, overlay customization, and workflow extension patterns",
230
- domain: "personalization",
231
- owners: ["@examples"],
232
- tags: ["personalization", "behavior", "overlay", "workflow"],
233
- stability: "experimental"
234
- },
235
- telemetry: [{ key: "personalization.telemetry", version: "1.0.0" }],
236
- docs: [
237
- "docs.examples.personalization",
238
- "docs.examples.personalization.usage"
239
- ]
240
- });
241
363
  export {
242
364
  runOverlayCustomizationExample,
243
365
  runBehaviorTrackingExample,
244
366
  logTenantWorkflowSteps,
245
367
  example_default as example,
246
368
  composeTenantWorkflowExample,
247
- PersonalizationFeature
369
+ PersonalizationTheme,
370
+ PersonalizationFeature,
371
+ PersonalizationExperiment
248
372
  };
@@ -1,11 +1,11 @@
1
1
  // src/overlay-customization.ts
2
- import { defineOverlay } from "@contractspec/lib.overlay-engine/spec";
3
- import { signOverlay } from "@contractspec/lib.overlay-engine/signer";
2
+ import { Logger, LogLevel } from "@contractspec/lib.logger";
4
3
  import {
5
4
  OverlayEngine,
6
5
  OverlayRegistry
7
6
  } from "@contractspec/lib.overlay-engine";
8
- import { Logger, LogLevel } from "@contractspec/lib.logger";
7
+ import { signOverlay } from "@contractspec/lib.overlay-engine/signer";
8
+ import { defineOverlay } from "@contractspec/lib.overlay-engine/spec";
9
9
  var logger = new Logger({
10
10
  level: LogLevel.INFO,
11
11
  environment: "production",
@@ -0,0 +1,62 @@
1
+ // src/personalization.experiment.ts
2
+ import {
3
+ OwnersEnum,
4
+ StabilityEnum
5
+ } from "@contractspec/lib.contracts-spec/ownership";
6
+ var PersonalizationExperiment = {
7
+ meta: {
8
+ key: "personalization.experiment.overlay-copy",
9
+ version: "1.0.0",
10
+ title: "Personalization Overlay Copy Experiment",
11
+ description: "Tests a control onboarding copy against a personalized overlay variant.",
12
+ domain: "personalization",
13
+ owners: [OwnersEnum.PlatformCore],
14
+ tags: ["personalization", "experiment", "overlay"],
15
+ stability: StabilityEnum.Experimental
16
+ },
17
+ controlVariant: "control",
18
+ variants: [
19
+ {
20
+ id: "control",
21
+ key: "control",
22
+ description: "Default onboarding copy and standard workflow."
23
+ },
24
+ {
25
+ id: "personalized-overlay",
26
+ key: "personalized-overlay",
27
+ description: "Personalized copy with a branded theme override.",
28
+ overrides: [
29
+ {
30
+ type: "theme",
31
+ target: "personalization.theme.guided-onboarding",
32
+ version: "1.0.0"
33
+ },
34
+ {
35
+ type: "workflow",
36
+ target: "billing.invoiceApproval",
37
+ version: "1.0.0"
38
+ }
39
+ ]
40
+ }
41
+ ],
42
+ allocation: {
43
+ type: "sticky",
44
+ attribute: "userId",
45
+ salt: "personalization-overlay-copy"
46
+ },
47
+ successMetrics: [
48
+ {
49
+ key: "checklist-completion-rate",
50
+ telemetryEvent: {
51
+ key: "personalization.assignment.completed",
52
+ version: "1.0.0"
53
+ },
54
+ aggregation: "count",
55
+ target: 1
56
+ }
57
+ ],
58
+ tags: ["personalization", "experiment"]
59
+ };
60
+ export {
61
+ PersonalizationExperiment
62
+ };
@@ -0,0 +1,64 @@
1
+ // src/personalization.theme.ts
2
+ import {
3
+ OwnersEnum,
4
+ StabilityEnum
5
+ } from "@contractspec/lib.contracts-spec/ownership";
6
+ var PersonalizationTheme = {
7
+ meta: {
8
+ key: "personalization.theme.guided-onboarding",
9
+ version: "1.0.0",
10
+ title: "Guided Onboarding Theme",
11
+ description: "Theme tokens used when the personalized onboarding experience is active.",
12
+ domain: "personalization",
13
+ owners: [OwnersEnum.PlatformCore],
14
+ tags: ["personalization", "theme", "onboarding"],
15
+ stability: StabilityEnum.Experimental,
16
+ scopes: ["tenant", "user"]
17
+ },
18
+ tokens: {
19
+ colors: {
20
+ surface: { value: "#FCF6E8" },
21
+ accent: { value: "#C8742A" },
22
+ text: { value: "#2F2419" }
23
+ },
24
+ radii: {
25
+ card: { value: 18 }
26
+ },
27
+ space: {
28
+ panel: { value: 24 }
29
+ },
30
+ typography: {
31
+ body: { value: 16 },
32
+ title: { value: 28 }
33
+ },
34
+ motion: {
35
+ stagger: { value: "180ms" }
36
+ }
37
+ },
38
+ components: [
39
+ {
40
+ component: "OnboardingChecklist",
41
+ variants: {
42
+ guided: {
43
+ props: {
44
+ emphasis: "warm"
45
+ }
46
+ }
47
+ }
48
+ }
49
+ ],
50
+ overrides: [
51
+ {
52
+ scope: "tenant",
53
+ target: "tenant:acme",
54
+ tokens: {
55
+ colors: {
56
+ accent: { value: "#8A4B12" }
57
+ }
58
+ }
59
+ }
60
+ ]
61
+ };
62
+ export {
63
+ PersonalizationTheme
64
+ };