@contractspec/example.personalization 3.7.20 → 3.7.21

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.
@@ -2,45 +2,45 @@ $ contractspec-bun-build prebuild
2
2
  $ bun run build:bundle && bun run build:types
3
3
  $ contractspec-bun-build transpile
4
4
  [contractspec-bun-build] transpile target=bun root=src entries=10 noBundle=false
5
- Bundled 10 modules in 21ms
5
+ Bundled 10 modules in 37ms
6
6
 
7
7
  ./behavior-tracking.js 0.95 KB (entry point)
8
- ./index.js 7.59 KB (entry point)
8
+ ./index.js 7.52 KB (entry point)
9
9
  ./personalization.theme.js 0.88 KB (entry point)
10
10
  ./workflow-extension.js 1.1 KB (entry point)
11
11
  docs/index.js 1.29 KB (entry point)
12
12
  docs/personalization.docblock.js 1.29 KB (entry point)
13
- ./example.js 0.75 KB (entry point)
13
+ ./example.js 0.67 KB (entry point)
14
14
  ./overlay-customization.js 1.0 KB (entry point)
15
15
  ./personalization.experiment.js 1.15 KB (entry point)
16
- ./personalization.feature.js 0.55 KB (entry point)
16
+ ./personalization.feature.js 0.56 KB (entry point)
17
17
 
18
18
  [contractspec-bun-build] transpile target=node root=src entries=10 noBundle=false
19
- Bundled 10 modules in 23ms
19
+ Bundled 10 modules in 21ms
20
20
 
21
21
  ./behavior-tracking.js 0.94 KB (entry point)
22
- ./index.js 7.58 KB (entry point)
22
+ ./index.js 7.51 KB (entry point)
23
23
  ./personalization.theme.js 0.87 KB (entry point)
24
24
  ./workflow-extension.js 1.1 KB (entry point)
25
25
  docs/index.js 1.28 KB (entry point)
26
26
  docs/personalization.docblock.js 1.28 KB (entry point)
27
- ./example.js 0.74 KB (entry point)
27
+ ./example.js 0.66 KB (entry point)
28
28
  ./overlay-customization.js 1.0 KB (entry point)
29
29
  ./personalization.experiment.js 1.14 KB (entry point)
30
- ./personalization.feature.js 0.55 KB (entry point)
30
+ ./personalization.feature.js 0.56 KB (entry point)
31
31
 
32
32
  [contractspec-bun-build] transpile target=browser root=src entries=10 noBundle=false
33
- Bundled 10 modules in 28ms
33
+ Bundled 10 modules in 13ms
34
34
 
35
35
  ./behavior-tracking.js 0.94 KB (entry point)
36
- ./index.js 7.58 KB (entry point)
36
+ ./index.js 7.51 KB (entry point)
37
37
  ./personalization.theme.js 0.87 KB (entry point)
38
38
  ./workflow-extension.js 1.1 KB (entry point)
39
39
  docs/index.js 1.28 KB (entry point)
40
40
  docs/personalization.docblock.js 1.28 KB (entry point)
41
- ./example.js 0.74 KB (entry point)
41
+ ./example.js 0.66 KB (entry point)
42
42
  ./overlay-customization.js 1.0 KB (entry point)
43
43
  ./personalization.experiment.js 1.14 KB (entry point)
44
- ./personalization.feature.js 0.55 KB (entry point)
44
+ ./personalization.feature.js 0.56 KB (entry point)
45
45
 
46
46
  $ contractspec-bun-build types
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @contractspec/example.personalization
2
2
 
3
+ ## 3.7.21
4
+
5
+ ### Patch Changes
6
+
7
+ - chore: auto-bump internal dependents
8
+ - Updated dependencies because of chore: auto-bump internal dependents
9
+ - Updated dependencies because of Add FormSpec layout hints, semantic field rendering, and portable text/textarea input-group addons.
10
+ - Updated dependencies because of Add ThemeSpec light/dark modes and a design-system Tailwind bridge for CSS variables, presets, CSS text, and OKLCH color pass-through.
11
+ - Updated dependencies because of Add a canonical typed result system for ContractSpec success and failure propagation across operations, workflows, jobs, server adapters, MCP, GraphQL, and React clients.
12
+ - @contractspec/lib.logger@3.7.14
13
+ - @contractspec/lib.overlay-engine@3.7.21
14
+ - @contractspec/lib.personalization@6.0.21
15
+ - @contractspec/lib.workflow-composer@3.7.21
16
+ - @contractspec/lib.contracts-spec@5.5.0
17
+
3
18
  ## 3.7.20
4
19
 
5
20
  ### Patch Changes
@@ -1 +1 @@
1
- import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Small examples for behavior tracking, overlay-based UI customization, and tenant workflow extension.",kind:"library",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["personalization","overlays","behavior","workflows"]},docs:{rootDocId:"docs.examples.personalization",usageDocId:"docs.examples.personalization.usage"},entrypoints:{packageName:"@contractspec/example.personalization",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),q=h;export{q as default};
1
+ import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),q=h;export{q as default,h as ExamplesPersonalizationExample};
@@ -1,4 +1,4 @@
1
- import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as P}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as Q}from"@contractspec/lib.personalization/tracker";var U=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new P,j=Q({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});U.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as V}from"@contractspec/lib.contracts-spec/docs";var X=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
1
+ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as Q}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as U}from"@contractspec/lib.personalization/tracker";var V=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new Q,j=U({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});V.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as X}from"@contractspec/lib.contracts-spec/docs";var Y=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
2
2
  - Behavior tracking + insight analysis.
3
3
  - Overlay customization (hide fields, rename labels).
4
4
  - Workflow extension (inject tenant-specific steps).
@@ -6,4 +6,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
6
6
  ## Guardrails
7
7
  - Keep tracking events structured and non-PII.
8
8
  - Keep overlays signed and scoped.
9
- - Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];V(X);import{defineExample as Y}from"@contractspec/lib.contracts-spec";var Z=Y({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Small examples for behavior tracking, overlay-based UI customization, and tenant workflow extension.",kind:"library",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["personalization","overlays","behavior","workflows"]},docs:{rootDocId:"docs.examples.personalization",usageDocId:"docs.examples.personalization.usage"},entrypoints:{packageName:"@contractspec/example.personalization",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),_=Z;import{Logger as $,LogLevel as A}from"@contractspec/lib.logger";import{OverlayEngine as C,OverlayRegistry as D}from"@contractspec/lib.overlay-engine";import{signOverlay as F}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as I}from"@contractspec/lib.overlay-engine/spec";var M=new $({level:A.INFO,environment:"production",enableColors:!1});async function t(){let x=new D({allowUnsigned:!0}),j=new C({registry:x}),G=I({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await F(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});M.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as R,StabilityEnum as T}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[R.PlatformCore],tags:["personalization","experiment","overlay"],stability:T.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as f}from"@contractspec/lib.contracts-spec";var xx=f({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as m,StabilityEnum as z}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[m.PlatformCore],tags:["personalization","theme","onboarding"],stability:z.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as W}from"@contractspec/lib.contracts-spec";import{Logger as d,LogLevel as S}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new d({level:S.INFO,environment:"production",enableColors:!1}),u={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:W.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Px(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:u,tenantId:"acme"})}function Qx(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{t as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Qx as logTenantWorkflowSteps,_ as example,Px as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment};
9
+ - Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
@@ -1 +1 @@
1
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
1
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
package/dist/example.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- declare const example: import("@contractspec/lib.contracts-spec").ExampleSpec;
2
- export default example;
1
+ declare const ExamplesPersonalizationExample: import("@contractspec/lib.contracts-spec").ExampleSpec;
2
+ export default ExamplesPersonalizationExample;
3
+ export { ExamplesPersonalizationExample };
package/dist/example.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Small examples for behavior tracking, overlay-based UI customization, and tenant workflow extension.",kind:"library",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["personalization","overlays","behavior","workflows"]},docs:{rootDocId:"docs.examples.personalization",usageDocId:"docs.examples.personalization.usage"},entrypoints:{packageName:"@contractspec/example.personalization",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),q=h;export{q as default};
2
+ import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),q=h;export{q as default,h as ExamplesPersonalizationExample};
package/dist/index.d.ts CHANGED
@@ -6,3 +6,4 @@ export * from './personalization.feature';
6
6
  export * from './personalization.theme';
7
7
  export * from './workflow-extension';
8
8
  import './docs';
9
+ export * from './example';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as P}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as Q}from"@contractspec/lib.personalization/tracker";var U=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new P,j=Q({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});U.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as V}from"@contractspec/lib.contracts-spec/docs";var X=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
2
+ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as Q}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as U}from"@contractspec/lib.personalization/tracker";var V=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new Q,j=U({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});V.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as X}from"@contractspec/lib.contracts-spec/docs";var Y=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
3
3
  - Behavior tracking + insight analysis.
4
4
  - Overlay customization (hide fields, rename labels).
5
5
  - Workflow extension (inject tenant-specific steps).
@@ -7,4 +7,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
7
7
  ## Guardrails
8
8
  - Keep tracking events structured and non-PII.
9
9
  - Keep overlays signed and scoped.
10
- - Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization \u2014 Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];V(X);import{defineExample as Y}from"@contractspec/lib.contracts-spec";var Z=Y({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Small examples for behavior tracking, overlay-based UI customization, and tenant workflow extension.",kind:"library",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["personalization","overlays","behavior","workflows"]},docs:{rootDocId:"docs.examples.personalization",usageDocId:"docs.examples.personalization.usage"},entrypoints:{packageName:"@contractspec/example.personalization",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),_=Z;import{Logger as $,LogLevel as A}from"@contractspec/lib.logger";import{OverlayEngine as C,OverlayRegistry as D}from"@contractspec/lib.overlay-engine";import{signOverlay as F}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as I}from"@contractspec/lib.overlay-engine/spec";var M=new $({level:A.INFO,environment:"production",enableColors:!1});async function t(){let x=new D({allowUnsigned:!0}),j=new C({registry:x}),G=I({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await F(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});M.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as R,StabilityEnum as T}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[R.PlatformCore],tags:["personalization","experiment","overlay"],stability:T.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as f}from"@contractspec/lib.contracts-spec";var xx=f({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as m,StabilityEnum as z}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[m.PlatformCore],tags:["personalization","theme","onboarding"],stability:z.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as W}from"@contractspec/lib.contracts-spec";import{Logger as d,LogLevel as S}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new d({level:S.INFO,environment:"production",enableColors:!1}),u={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:W.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Px(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:u,tenantId:"acme"})}function Qx(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{t as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Qx as logTenantWorkflowSteps,_ as example,Px as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment};
10
+ - Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization \u2014 Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
@@ -1 +1 @@
1
- import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Small examples for behavior tracking, overlay-based UI customization, and tenant workflow extension.",kind:"library",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["personalization","overlays","behavior","workflows"]},docs:{rootDocId:"docs.examples.personalization",usageDocId:"docs.examples.personalization.usage"},entrypoints:{packageName:"@contractspec/example.personalization",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),q=h;export{q as default};
1
+ import{defineExample as g}from"@contractspec/lib.contracts-spec/examples";var h=g({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),q=h;export{q as default,h as ExamplesPersonalizationExample};
@@ -1,4 +1,4 @@
1
- import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as P}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as Q}from"@contractspec/lib.personalization/tracker";var U=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new P,j=Q({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});U.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as V}from"@contractspec/lib.contracts-spec/docs";var X=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
1
+ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorAnalyzer as N}from"@contractspec/lib.personalization/analyzer";import{InMemoryBehaviorStore as Q}from"@contractspec/lib.personalization/store";import{createBehaviorTracker as U}from"@contractspec/lib.personalization/tracker";var V=new J({level:K.INFO,environment:"production",enableColors:!1});async function v(){let x=new Q,j=U({store:x,context:{tenantId:"acme",userId:"user-123"}});j.trackFieldAccess({operation:"billing.createOrder",field:"internalNotes"}),j.trackFieldAccess({operation:"billing.createOrder",field:"customerReference"}),j.trackFeatureUsage({feature:"workflow-editor",action:"opened"}),j.trackWorkflowStep({workflow:"invoice-approval",step:"review",status:"entered"}),await j.flush();let q=await new N(x).analyze({tenantId:"acme",userId:"user-123"});V.info("Behavior insights computed",{insights:q})}import{registerDocBlocks as X}from"@contractspec/lib.contracts-spec/docs";var Y=[{id:"docs.examples.personalization",title:"Personalization Patterns (example)",summary:"Behavior tracking, overlay-driven UI tweaks, and tenant workflow extension patterns.",kind:"reference",visibility:"public",route:"/docs/examples/personalization",tags:["personalization","overlays","workflows","example"],body:`## Includes
2
2
  - Behavior tracking + insight analysis.
3
3
  - Overlay customization (hide fields, rename labels).
4
4
  - Workflow extension (inject tenant-specific steps).
@@ -6,4 +6,4 @@ import{Logger as J,LogLevel as K}from"@contractspec/lib.logger";import{BehaviorA
6
6
  ## Guardrails
7
7
  - Keep tracking events structured and non-PII.
8
8
  - Keep overlays signed and scoped.
9
- - Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];V(X);import{defineExample as Y}from"@contractspec/lib.contracts-spec";var Z=Y({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Small examples for behavior tracking, overlay-based UI customization, and tenant workflow extension.",kind:"library",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["personalization","overlays","behavior","workflows"]},docs:{rootDocId:"docs.examples.personalization",usageDocId:"docs.examples.personalization.usage"},entrypoints:{packageName:"@contractspec/example.personalization",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),_=Z;import{Logger as $,LogLevel as A}from"@contractspec/lib.logger";import{OverlayEngine as C,OverlayRegistry as D}from"@contractspec/lib.overlay-engine";import{signOverlay as F}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as I}from"@contractspec/lib.overlay-engine/spec";var M=new $({level:A.INFO,environment:"production",enableColors:!1});async function t(){let x=new D({allowUnsigned:!0}),j=new C({registry:x}),G=I({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await F(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});M.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as R,StabilityEnum as T}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[R.PlatformCore],tags:["personalization","experiment","overlay"],stability:T.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as f}from"@contractspec/lib.contracts-spec";var xx=f({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as m,StabilityEnum as z}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[m.PlatformCore],tags:["personalization","theme","onboarding"],stability:z.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as W}from"@contractspec/lib.contracts-spec";import{Logger as d,LogLevel as S}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new d({level:S.INFO,environment:"production",enableColors:!1}),u={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:W.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Px(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:u,tenantId:"acme"})}function Qx(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{t as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Qx as logTenantWorkflowSteps,_ as example,Px as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment};
9
+ - Keep workflow composition deterministic.`},{id:"docs.examples.personalization.usage",title:"Personalization — Usage",summary:"How to run the small examples and swap adapters.",kind:"usage",visibility:"public",route:"/docs/examples/personalization/usage",tags:["personalization","usage"],body:"## Usage\n- Call `runBehaviorTrackingExample()` for insights.\n- Call `runOverlayCustomizationExample()` to apply overlays.\n- Call `composeTenantWorkflowExample()` and `logTenantWorkflowSteps()` to inspect steps.\n\n## Notes\n- Replace in-memory stores with app-layer storage.\n- Keep PII out of logs and markdown outputs."}];X(Y);import{defineExample as Z}from"@contractspec/lib.contracts-spec/examples";var _=Z({meta:{key:"examples.personalization",version:"1.0.0",title:"Personalization",description:"Personalization examples: behavior tracking, overlay customization, workflow extension.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","personalization"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.personalization"}}),$=_;import{Logger as A,LogLevel as C}from"@contractspec/lib.logger";import{OverlayEngine as D,OverlayRegistry as F}from"@contractspec/lib.overlay-engine";import{signOverlay as I}from"@contractspec/lib.overlay-engine/signer";import{defineOverlay as M}from"@contractspec/lib.overlay-engine/spec";var R=new A({level:C.INFO,environment:"production",enableColors:!1});async function a(){let x=new F({allowUnsigned:!0}),j=new D({registry:x}),G=M({overlayId:"demo-overlay",version:"1.0.0",appliesTo:{capability:"billing.createOrder",tenantId:"demo"},modifications:[{type:"hideField",field:"internalNotes"},{type:"renameLabel",field:"customerReference",newLabel:"PO Number"}]}),q=await I(G,process.env.PRIVATE_KEY_PEM??"");x.register(q);let H=j.apply({target:{fields:[{key:"customerReference",label:"Customer Reference",visible:!0},{key:"internalNotes",label:"Internal Notes",visible:!0}]},capability:"billing.createOrder",tenantId:"demo"});R.info("Overlay applied",{fields:H.target.fields})}import{OwnersEnum as T,StabilityEnum as f}from"@contractspec/lib.contracts-spec/ownership";var c={meta:{key:"personalization.experiment.overlay-copy",version:"1.0.0",title:"Personalization Overlay Copy Experiment",description:"Tests a control onboarding copy against a personalized overlay variant.",domain:"personalization",owners:[T.PlatformCore],tags:["personalization","experiment","overlay"],stability:f.Experimental},controlVariant:"control",variants:[{id:"control",key:"control",description:"Default onboarding copy and standard workflow."},{id:"personalized-overlay",key:"personalized-overlay",description:"Personalized copy with a branded theme override.",overrides:[{type:"theme",target:"personalization.theme.guided-onboarding",version:"1.0.0"},{type:"workflow",target:"billing.invoiceApproval",version:"1.0.0"}]}],allocation:{type:"sticky",attribute:"userId",salt:"personalization-overlay-copy"},successMetrics:[{key:"checklist-completion-rate",telemetryEvent:{key:"personalization.assignment.completed",version:"1.0.0"},aggregation:"count",target:1}],tags:["personalization","experiment"]};import{defineFeature as P}from"@contractspec/lib.contracts-spec/features";var xx=P({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});import{OwnersEnum as W,StabilityEnum as d}from"@contractspec/lib.contracts-spec/ownership";var Gx={meta:{key:"personalization.theme.guided-onboarding",version:"1.0.0",title:"Guided Onboarding Theme",description:"Theme tokens used when the personalized onboarding experience is active.",domain:"personalization",owners:[W.PlatformCore],tags:["personalization","theme","onboarding"],stability:d.Experimental,scopes:["tenant","user"]},tokens:{colors:{surface:{value:"#FCF6E8"},accent:{value:"#C8742A"},text:{value:"#2F2419"}},radii:{card:{value:18}},space:{panel:{value:24}},typography:{body:{value:16},title:{value:28}},motion:{stagger:{value:"180ms"}}},components:[{component:"OnboardingChecklist",variants:{guided:{props:{emphasis:"warm"}}}}],overrides:[{scope:"tenant",target:"tenant:acme",tokens:{colors:{accent:{value:"#8A4B12"}}}}]};import{StabilityEnum as z}from"@contractspec/lib.contracts-spec";import{Logger as S,LogLevel as m}from"@contractspec/lib.logger";import{WorkflowComposer as B}from"@contractspec/lib.workflow-composer";var h=new S({level:m.INFO,environment:"production",enableColors:!1}),O={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:z.Stable},definition:{steps:[{id:"validate-invoice",type:"automation",label:"Validate Invoice"},{id:"final-approval",type:"human",label:"Final Approval"}],transitions:[{from:"validate-invoice",to:"final-approval"}]}};function Qx(){let x=new B;return x.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),x.compose({base:O,tenantId:"acme"})}function Ux(x){h.info("Tenant workflow composed",{workflow:x.meta.key,steps:x.definition.steps.map((j)=>j.id)})}export{a as runOverlayCustomizationExample,v as runBehaviorTrackingExample,Ux as logTenantWorkflowSteps,$ as example,Qx as composeTenantWorkflowExample,Gx as PersonalizationTheme,xx as PersonalizationFeature,c as PersonalizationExperiment,_ as ExamplesPersonalizationExample};
@@ -1 +1 @@
1
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
1
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
2
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"personalization",version:"1.0.0",title:"Personalization Patterns",description:"Behavior tracking, overlay customization, and workflow extension patterns",domain:"personalization",owners:["@examples"],tags:["personalization","behavior","overlay","workflow"],stability:"experimental"},telemetry:[{key:"personalization.telemetry",version:"1.0.0"}],docs:["docs.examples.personalization","docs.examples.personalization.usage"]});export{j as PersonalizationFeature};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/example.personalization",
3
- "version": "3.7.20",
3
+ "version": "3.7.21",
4
4
  "description": "Personalization examples: behavior tracking, overlay customization, workflow extension.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -92,16 +92,16 @@
92
92
  "typecheck": "tsc --noEmit"
93
93
  },
94
94
  "dependencies": {
95
- "@contractspec/lib.personalization": "6.0.20",
96
- "@contractspec/lib.overlay-engine": "3.7.20",
97
- "@contractspec/lib.workflow-composer": "3.7.20",
98
- "@contractspec/lib.contracts-spec": "5.4.0",
99
- "@contractspec/lib.logger": "3.7.13"
95
+ "@contractspec/lib.personalization": "6.0.21",
96
+ "@contractspec/lib.overlay-engine": "3.7.21",
97
+ "@contractspec/lib.workflow-composer": "3.7.21",
98
+ "@contractspec/lib.contracts-spec": "5.5.0",
99
+ "@contractspec/lib.logger": "3.7.14"
100
100
  },
101
101
  "devDependencies": {
102
102
  "@contractspec/tool.typescript": "3.7.13",
103
103
  "typescript": "^5.9.3",
104
- "@contractspec/tool.bun": "3.7.14"
104
+ "@contractspec/tool.bun": "3.7.15"
105
105
  },
106
106
  "publishConfig": {
107
107
  "access": "public",
package/src/example.ts CHANGED
@@ -1,32 +1,28 @@
1
- import { defineExample } from '@contractspec/lib.contracts-spec';
1
+ import { defineExample } from '@contractspec/lib.contracts-spec/examples';
2
2
 
3
- const example = defineExample({
3
+ const ExamplesPersonalizationExample = defineExample({
4
4
  meta: {
5
- key: 'personalization',
5
+ key: 'examples.personalization',
6
6
  version: '1.0.0',
7
- title: 'Personalization Patterns',
7
+ title: 'Personalization',
8
8
  description:
9
- 'Small examples for behavior tracking, overlay-based UI customization, and tenant workflow extension.',
10
- kind: 'library',
11
- visibility: 'public',
9
+ 'Personalization examples: behavior tracking, overlay customization, workflow extension.',
10
+ kind: 'template',
11
+ visibility: 'experimental',
12
12
  stability: 'experimental',
13
- owners: ['@platform.core'],
14
- tags: ['personalization', 'overlays', 'behavior', 'workflows'],
13
+ owners: ['@contractspec-core'],
14
+ tags: ['package', 'examples', 'personalization'],
15
15
  },
16
- docs: {
17
- rootDocId: 'docs.examples.personalization',
18
- usageDocId: 'docs.examples.personalization.usage',
16
+ surfaces: {
17
+ templates: true,
18
+ sandbox: { enabled: true, modes: ['playground', 'specs'] },
19
+ studio: { enabled: false, installable: false },
20
+ mcp: { enabled: false },
19
21
  },
20
22
  entrypoints: {
21
23
  packageName: '@contractspec/example.personalization',
22
- docs: './docs',
23
- },
24
- surfaces: {
25
- templates: true,
26
- sandbox: { enabled: true, modes: ['markdown', 'specs'] },
27
- studio: { enabled: true, installable: true },
28
- mcp: { enabled: true },
29
24
  },
30
25
  });
31
26
 
32
- export default example;
27
+ export default ExamplesPersonalizationExample;
28
+ export { ExamplesPersonalizationExample };
package/src/index.ts CHANGED
@@ -6,3 +6,5 @@ export * from './personalization.feature';
6
6
  export * from './personalization.theme';
7
7
  export * from './workflow-extension';
8
8
  import './docs';
9
+
10
+ export * from './example';
@@ -1,4 +1,4 @@
1
- import { defineFeature } from '@contractspec/lib.contracts-spec';
1
+ import { defineFeature } from '@contractspec/lib.contracts-spec/features';
2
2
 
3
3
  export const PersonalizationFeature = defineFeature({
4
4
  meta: {