@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
@@ -2,40 +2,46 @@ $ contractspec-bun-build prebuild
2
2
  $ bun run prebuild && bun run build:bundle && bun run build:types
3
3
  $ contractspec-bun-build prebuild
4
4
  $ contractspec-bun-build transpile
5
- [contractspec-bun-build] transpile target=bun root=src entries=8 noBundle=false
6
- Bundled 8 modules in 17ms
5
+ [contractspec-bun-build] transpile target=bun root=src entries=10 noBundle=false
6
+ Bundled 10 modules in 10ms
7
7
 
8
- ./behavior-tracking.js 1.33 KB (entry point)
9
- ./index.js 7.60 KB (entry point)
10
- docs/index.js 1.48 KB (entry point)
11
- docs/personalization.docblock.js 1.48 KB (entry point)
12
- ./example.js 0.99 KB (entry point)
13
- ./overlay-customization.js 1.53 KB (entry point)
14
- ./personalization.feature.js 0.71 KB (entry point)
15
- ./workflow-extension.js 1.59 KB (entry point)
8
+ ./behavior-tracking.js 1.33 KB (entry point)
9
+ ./index.js 10.57 KB (entry point)
10
+ ./personalization.theme.js 1.35 KB (entry point)
11
+ ./workflow-extension.js 1.59 KB (entry point)
12
+ docs/index.js 1.48 KB (entry point)
13
+ docs/personalization.docblock.js 1.48 KB (entry point)
14
+ ./example.js 0.99 KB (entry point)
15
+ ./overlay-customization.js 1.53 KB (entry point)
16
+ ./personalization.experiment.js 1.60 KB (entry point)
17
+ ./personalization.feature.js 0.71 KB (entry point)
16
18
 
17
- [contractspec-bun-build] transpile target=node root=src entries=8 noBundle=false
18
- Bundled 8 modules in 7ms
19
+ [contractspec-bun-build] transpile target=node root=src entries=10 noBundle=false
20
+ Bundled 10 modules in 4ms
19
21
 
20
- ./behavior-tracking.js 1.32 KB (entry point)
21
- ./index.js 7.59 KB (entry point)
22
- docs/index.js 1.47 KB (entry point)
23
- docs/personalization.docblock.js 1.47 KB (entry point)
24
- ./example.js 0.99 KB (entry point)
25
- ./overlay-customization.js 1.52 KB (entry point)
26
- ./personalization.feature.js 0.70 KB (entry point)
27
- ./workflow-extension.js 1.58 KB (entry point)
22
+ ./behavior-tracking.js 1.32 KB (entry point)
23
+ ./index.js 10.56 KB (entry point)
24
+ ./personalization.theme.js 1.34 KB (entry point)
25
+ ./workflow-extension.js 1.58 KB (entry point)
26
+ docs/index.js 1.47 KB (entry point)
27
+ docs/personalization.docblock.js 1.47 KB (entry point)
28
+ ./example.js 0.99 KB (entry point)
29
+ ./overlay-customization.js 1.52 KB (entry point)
30
+ ./personalization.experiment.js 1.60 KB (entry point)
31
+ ./personalization.feature.js 0.70 KB (entry point)
28
32
 
29
- [contractspec-bun-build] transpile target=browser root=src entries=8 noBundle=false
30
- Bundled 8 modules in 7ms
33
+ [contractspec-bun-build] transpile target=browser root=src entries=10 noBundle=false
34
+ Bundled 10 modules in 3ms
31
35
 
32
- ./behavior-tracking.js 1.32 KB (entry point)
33
- ./index.js 7.59 KB (entry point)
34
- docs/index.js 1.47 KB (entry point)
35
- docs/personalization.docblock.js 1.47 KB (entry point)
36
- ./example.js 0.99 KB (entry point)
37
- ./overlay-customization.js 1.52 KB (entry point)
38
- ./personalization.feature.js 0.70 KB (entry point)
39
- ./workflow-extension.js 1.58 KB (entry point)
36
+ ./behavior-tracking.js 1.32 KB (entry point)
37
+ ./index.js 10.56 KB (entry point)
38
+ ./personalization.theme.js 1.34 KB (entry point)
39
+ ./workflow-extension.js 1.58 KB (entry point)
40
+ docs/index.js 1.47 KB (entry point)
41
+ docs/personalization.docblock.js 1.47 KB (entry point)
42
+ ./example.js 0.99 KB (entry point)
43
+ ./overlay-customization.js 1.52 KB (entry point)
44
+ ./personalization.experiment.js 1.60 KB (entry point)
45
+ ./personalization.feature.js 0.70 KB (entry point)
40
46
 
41
47
  $ contractspec-bun-build types
package/AGENTS.md CHANGED
@@ -1,32 +1,56 @@
1
- # AI Agent Guide -- `@contractspec/example.personalization`
1
+ # AI Agent Guide `@contractspec/example.personalization`
2
2
 
3
3
  Scope: `packages/examples/personalization/*`
4
4
 
5
- Personalization examples: behavior tracking, overlay customization, and workflow extension.
5
+ Personalization examples: behavior tracking, overlay customization, workflow extension.
6
6
 
7
7
  ## Quick Context
8
8
 
9
- - **Layer**: example
10
- - **Related Packages**: `lib.personalization`, `lib.overlay-engine`, `lib.workflow-composer`, `lib.contracts-spec`, `lib.logger`
9
+ - Layer: `example`.
10
+ - Package visibility: published package.
11
+ - Primary consumers are example explorers, template authors, and documentation readers.
12
+ - Related packages: `@contractspec/lib.contracts-spec`, `@contractspec/lib.logger`, `@contractspec/lib.overlay-engine`, `@contractspec/lib.personalization`, `@contractspec/lib.workflow-composer`, `@contractspec/tool.bun`, ...
11
13
 
12
- ## What This Demonstrates
14
+ ## Architecture
13
15
 
14
- - Behavior tracking integration pattern
15
- - Overlay customization via overlay-engine
16
- - Workflow extension via workflow-composer
17
- - Multi-lib composition in a single example
16
+ - `src/behavior-tracking.ts` is part of the package's public or composition surface.
17
+ - `src/docs/` contains docblocks and documentation-facing exports.
18
+ - `src/example.ts` is the runnable example entrypoint.
19
+ - `src/index.ts` is the root public barrel and package entrypoint.
20
+ - `src/overlay-customization.ts` is part of the package's public or composition surface.
21
+ - `src/personalization.feature.ts` defines a feature entrypoint.
22
+ - `src/workflow-extension.ts` is part of the package's public or composition surface.
18
23
 
19
- ## Public Exports
24
+ ## Public Surface
20
25
 
21
- - `.` -- root barrel
22
- - `./behavior-tracking` -- tracking patterns
23
- - `./overlay-customization` -- overlay config
24
- - `./workflow-extension` -- workflow extension
25
- - `./docs`, `./example`
26
+ - Export `.` resolves through `./src/index.ts`.
27
+ - Export `./behavior-tracking` resolves through `./src/behavior-tracking.ts`.
28
+ - Export `./docs` resolves through `./src/docs/index.ts`.
29
+ - Export `./docs/personalization.docblock` resolves through `./src/docs/personalization.docblock.ts`.
30
+ - Export `./example` resolves through `./src/example.ts`.
31
+ - Export `./overlay-customization` resolves through `./src/overlay-customization.ts`.
32
+ - Export `./personalization.feature` resolves through `./src/personalization.feature.ts`.
33
+ - Export `./workflow-extension` resolves through `./src/workflow-extension.ts`.
34
+
35
+ ## Guardrails
36
+
37
+ - Keep the example package demonstrative, buildable, and aligned with the exported feature surface.
38
+ - Do not add hidden production assumptions that are not actually implemented in the example.
39
+ - Changes here can affect downstream packages such as `@contractspec/lib.contracts-spec`, `@contractspec/lib.logger`, `@contractspec/lib.overlay-engine`, `@contractspec/lib.personalization`, `@contractspec/lib.workflow-composer`, `@contractspec/tool.bun`, ....
40
+ - Changes here can affect downstream packages such as `@contractspec/lib.contracts-spec`, `@contractspec/lib.logger`, `@contractspec/lib.overlay-engine`, `@contractspec/lib.personalization`, `@contractspec/lib.workflow-composer`, `@contractspec/tool.bun`, ...
26
41
 
27
42
  ## Local Commands
28
43
 
29
- - Build: `bun run build`
30
- - Dev: `bun run dev`
31
- - Test: `bun test --pass-with-no-tests`
32
- - Typecheck: `bun run typecheck`
44
+ - `bun run dev` — contractspec-bun-build dev
45
+ - `bun run build`bun run prebuild && bun run build:bundle && bun run build:types
46
+ - `bun run test`bun test --pass-with-no-tests
47
+ - `bun run lint` — bun lint:fix
48
+ - `bun run lint:check` — biome check .
49
+ - `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
50
+ - `bun run typecheck` — tsc --noEmit
51
+ - `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose
52
+ - `bun run publish:pkg:canary` — bun publish:pkg --tag canary
53
+ - `bun run clean` — rimraf dist .turbo
54
+ - `bun run build:bundle` — contractspec-bun-build transpile
55
+ - `bun run build:types` — contractspec-bun-build types
56
+ - `bun run prebuild` — contractspec-bun-build prebuild
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @contractspec/example.personalization
2
2
 
3
+ ## 3.7.10
4
+
5
+ ### Patch Changes
6
+
7
+ - 1a44cb6: feat: improve examples to increase coverage of Contracts type
8
+ - Updated dependencies [1a44cb6]
9
+ - @contractspec/lib.workflow-composer@3.7.10
10
+ - @contractspec/lib.personalization@6.0.10
11
+ - @contractspec/lib.contracts-spec@4.1.2
12
+ - @contractspec/lib.overlay-engine@3.7.10
13
+ - @contractspec/lib.logger@3.7.8
14
+
15
+ ## 3.7.9
16
+
17
+ ### Patch Changes
18
+
19
+ - fix: release
20
+ - Updated dependencies
21
+ - @contractspec/lib.workflow-composer@3.7.9
22
+ - @contractspec/lib.personalization@6.0.9
23
+ - @contractspec/lib.contracts-spec@4.1.1
24
+ - @contractspec/lib.overlay-engine@3.7.9
25
+ - @contractspec/lib.logger@3.7.7
26
+
3
27
  ## 3.7.6
4
28
 
5
29
  ### Patch Changes
@@ -483,6 +507,7 @@
483
507
  - 7f3203a: fix: make workspace test runs resilient when packages have no tests
484
508
 
485
509
  Updates package test scripts to pass cleanly when no matching test files exist:
510
+
486
511
  - Uses `bun test --pass-with-no-tests` in Bun-based packages that currently ship without test files.
487
512
  - Uses `jest --passWithNoTests` for the UI kit web package.
488
513
  - Adds `.vscode-test.mjs` for `vscode-contractspec` so VS Code extension test runs have an explicit config and stop failing on missing default configuration.
@@ -901,14 +926,17 @@
901
926
  feat: Contract layers support (features, examples, app-configs)
902
927
 
903
928
  ### New CLI Commands
929
+
904
930
  - `contractspec list layers` - List all contract layers with filtering
905
931
 
906
932
  ### Enhanced Commands
933
+
907
934
  - `contractspec ci` - New `layers` check category validates features/examples/config
908
935
  - `contractspec doctor` - New `layers` health checks
909
936
  - `contractspec integrity` - Now shows layer statistics
910
937
 
911
938
  ### New APIs
939
+
912
940
  - `discoverLayers()` - Scan workspace for all layer files
913
941
  - `scanExampleSource()` - Parse ExampleSpec from source code
914
942
  - `isExampleFile()` - Check if file is an example spec
package/README.md CHANGED
@@ -1,27 +1,78 @@
1
1
  # @contractspec/example.personalization
2
2
 
3
- Website: https://contractspec.io/
3
+ Website: https://contractspec.io
4
4
 
5
- **Personalization patterns** -- behavior tracking, overlay customization, and workflow extension examples.
5
+ **Personalization examples: behavior tracking, overlay customization, workflow extension.**
6
6
 
7
7
  ## What This Demonstrates
8
8
 
9
- - Behavior tracking with the personalization lib tracker
10
- - Overlay customization using the overlay-engine
11
- - Workflow extension patterns for adaptive UX
9
+ - Behavior tracking integration pattern.
10
+ - Canonical `experiment` export via `PersonalizationExperiment`.
11
+ - Overlay customization via overlay-engine.
12
+ - Canonical `theme` export via `PersonalizationTheme`.
13
+ - Workflow extension via workflow-composer.
14
+ - Multi-lib composition in a single example.
15
+ - `src/docs/` contains docblocks and documentation-facing exports.
12
16
 
13
- ## Exports
17
+ ## Running Locally
14
18
 
15
- - `.` -- aggregated re-exports
16
- - `./behavior-tracking` -- behavior tracking example
17
- - `./overlay-customization` -- overlay customization example
18
- - `./workflow-extension` -- workflow extension example
19
- - `./docs` -- DocBlock documentation
20
- - `./example` -- example spec definition
19
+ From `packages/examples/personalization`:
20
+ - `bun run dev`
21
+ - `bun run build`
22
+ - `bun run test`
23
+ - `bun run typecheck`
21
24
 
22
25
  ## Usage
23
26
 
24
- ```ts
25
- import { behaviorTrackingExample } from "@contractspec/example.personalization/behavior-tracking";
26
- import { overlayCustomizationExample } from "@contractspec/example.personalization/overlay-customization";
27
- ```
27
+ Use `@contractspec/example.personalization` as a reference implementation, or import its exported surfaces into a workspace that composes ContractSpec examples and bundles.
28
+
29
+ ## Architecture
30
+
31
+ - `src/behavior-tracking.ts` is part of the package's public or composition surface.
32
+ - `src/docs/` contains docblocks and documentation-facing exports.
33
+ - `src/example.ts` is the runnable example entrypoint.
34
+ - `src/index.ts` is the root public barrel and package entrypoint.
35
+ - `src/overlay-customization.ts` is part of the package's public or composition surface.
36
+ - `src/personalization.experiment.ts` defines the exported experiment spec.
37
+ - `src/personalization.feature.ts` defines a feature entrypoint.
38
+ - `src/personalization.theme.ts` defines the exported theme spec.
39
+ - `src/workflow-extension.ts` is part of the package's public or composition surface.
40
+
41
+ ## Public Entry Points
42
+
43
+ - Export `.` resolves through `./src/index.ts`.
44
+ - Export `./behavior-tracking` resolves through `./src/behavior-tracking.ts`.
45
+ - Export `./docs` resolves through `./src/docs/index.ts`.
46
+ - Export `./docs/personalization.docblock` resolves through `./src/docs/personalization.docblock.ts`.
47
+ - Export `./example` resolves through `./src/example.ts`.
48
+ - Export `./overlay-customization` resolves through `./src/overlay-customization.ts`.
49
+ - Export `./personalization.experiment` resolves through `./src/personalization.experiment.ts`.
50
+ - Export `./personalization.feature` resolves through `./src/personalization.feature.ts`.
51
+ - Export `./personalization.theme` resolves through `./src/personalization.theme.ts`.
52
+ - Export `./workflow-extension` resolves through `./src/workflow-extension.ts`.
53
+ - The package publishes 9 total export subpaths; keep docs aligned with `package.json`.
54
+
55
+ ## Local Commands
56
+
57
+ - `bun run dev` — contractspec-bun-build dev
58
+ - `bun run build` — bun run prebuild && bun run build:bundle && bun run build:types
59
+ - `bun run test` — bun test --pass-with-no-tests
60
+ - `bun run lint` — bun lint:fix
61
+ - `bun run lint:check` — biome check .
62
+ - `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
63
+ - `bun run typecheck` — tsc --noEmit
64
+ - `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose
65
+ - `bun run publish:pkg:canary` — bun publish:pkg --tag canary
66
+ - `bun run clean` — rimraf dist .turbo
67
+ - `bun run build:bundle` — contractspec-bun-build transpile
68
+ - `bun run build:types` — contractspec-bun-build types
69
+ - `bun run prebuild` — contractspec-bun-build prebuild
70
+
71
+ ## Recent Updates
72
+
73
+ - Replace eslint+prettier by biomejs to optimize speed.
74
+ - Missing contract layers.
75
+
76
+ ## Notes
77
+
78
+ - Works alongside `@contractspec/lib.contracts-spec`, `@contractspec/lib.logger`, `@contractspec/lib.overlay-engine`, `@contractspec/lib.personalization`, `@contractspec/lib.workflow-composer`, ...
@@ -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",
@@ -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
+ };