@contractspec/example.personalization 3.7.23 → 3.7.25

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,10 +2,10 @@ $ 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 32ms
5
+ Bundled 10 modules in 19ms
6
6
 
7
7
  ./behavior-tracking.js 0.95 KB (entry point)
8
- ./index.js 7.52 KB (entry point)
8
+ ./index.js 7.53 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)
@@ -16,10 +16,10 @@ Bundled 10 modules in 32ms
16
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 15ms
20
20
 
21
21
  ./behavior-tracking.js 0.94 KB (entry point)
22
- ./index.js 7.51 KB (entry point)
22
+ ./index.js 7.52 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)
@@ -30,10 +30,10 @@ Bundled 10 modules in 23ms
30
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 37ms
33
+ Bundled 10 modules in 18ms
34
34
 
35
35
  ./behavior-tracking.js 0.94 KB (entry point)
36
- ./index.js 7.51 KB (entry point)
36
+ ./index.js 7.52 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)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # @contractspec/example.personalization
2
2
 
3
+ ## 3.7.25
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 Remove avoidable Node crypto imports from ContractSpec runtime surfaces and keep signing helpers isolated.
10
+ - Updated dependencies because of Improve FormSpec autocomplete rendering and resolver-backed search.
11
+ - Updated dependencies because of Add first-class FormSpec email fields with native renderer affordances.
12
+ - Updated dependencies because of Add progressive FormSpec section and step layout metadata with shared React and design-system rendering support.
13
+ - @contractspec/lib.logger@3.7.18
14
+ - @contractspec/lib.overlay-engine@3.7.25
15
+ - @contractspec/lib.personalization@6.0.25
16
+ - @contractspec/lib.workflow-composer@3.7.25
17
+ - @contractspec/lib.contracts-spec@6.0.0
18
+
19
+ ## 3.7.24
20
+
21
+ ### Patch Changes
22
+
23
+ - chore: auto-bump internal dependents
24
+ - Updated dependencies because of chore: auto-bump internal dependents
25
+ - Updated dependencies because of Add mobile-safe FormSpec layout helpers and scoped DataView filters.
26
+
27
+ FormSpec authors can now use `responsiveFormColumns(...)` for explicit mobile-first column metadata without changing legacy numeric `layout.columns` behavior. DataView contracts can declare `filterScope.initial` and `filterScope.locked` filters so generic list/search contracts can be reused in context-restricted screens while keeping locked constraints out of user-editable URL state.
28
+
29
+ - Updated dependencies because of Add OSS harness CLI verification with deterministic Playwright, optional agent-browser visual runs, auth profile refs, visual diff evidence, replay bundles, and core scenario success semantics.
30
+ - @contractspec/lib.logger@3.7.17
31
+ - @contractspec/lib.overlay-engine@3.7.24
32
+ - @contractspec/lib.personalization@6.0.24
33
+ - @contractspec/lib.workflow-composer@3.7.24
34
+ - @contractspec/lib.contracts-spec@5.7.0
35
+
3
36
  ## 3.7.23
4
37
 
5
38
  ### Patch Changes
@@ -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."}];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};
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/ownership";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{StabilityEnum as j}from"@contractspec/lib.contracts-spec";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.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 I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
1
+ import{StabilityEnum as j}from"@contractspec/lib.contracts-spec/ownership";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.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 I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
package/dist/index.js CHANGED
@@ -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."}];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};
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/ownership";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};
@@ -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."}];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};
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/ownership";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{StabilityEnum as j}from"@contractspec/lib.contracts-spec";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.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 I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
1
+ import{StabilityEnum as j}from"@contractspec/lib.contracts-spec/ownership";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.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 I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{StabilityEnum as j}from"@contractspec/lib.contracts-spec";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.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 I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
2
+ import{StabilityEnum as j}from"@contractspec/lib.contracts-spec/ownership";import{Logger as q,LogLevel as x}from"@contractspec/lib.logger";import{WorkflowComposer as z}from"@contractspec/lib.workflow-composer";var A=new q({level:x.INFO,environment:"production",enableColors:!1}),D={meta:{key:"billing.invoiceApproval",version:"1.0.0",title:"Invoice Approval",owners:[],tags:[],description:"",domain:"billing",stability:j.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 I(){let d=new z;return d.register({workflow:"billing.invoiceApproval",tenantId:"acme",customSteps:[{after:"validate-invoice",inject:{id:"acme-legal",type:"human",label:"ACME Legal Review"},transitionTo:"final-approval"}]}),d.compose({base:D,tenantId:"acme"})}function J(d){A.info("Tenant workflow composed",{workflow:d.meta.key,steps:d.definition.steps.map((h)=>h.id)})}export{J as logTenantWorkflowSteps,I as composeTenantWorkflowExample};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/example.personalization",
3
- "version": "3.7.23",
3
+ "version": "3.7.25",
4
4
  "description": "Personalization examples: behavior tracking, overlay customization, workflow extension.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -92,11 +92,11 @@
92
92
  "typecheck": "tsc --noEmit"
93
93
  },
94
94
  "dependencies": {
95
- "@contractspec/lib.personalization": "6.0.23",
96
- "@contractspec/lib.overlay-engine": "3.7.23",
97
- "@contractspec/lib.workflow-composer": "3.7.23",
98
- "@contractspec/lib.contracts-spec": "5.6.0",
99
- "@contractspec/lib.logger": "3.7.16"
95
+ "@contractspec/lib.personalization": "6.0.25",
96
+ "@contractspec/lib.overlay-engine": "3.7.25",
97
+ "@contractspec/lib.workflow-composer": "3.7.25",
98
+ "@contractspec/lib.contracts-spec": "6.0.0",
99
+ "@contractspec/lib.logger": "3.7.18"
100
100
  },
101
101
  "devDependencies": {
102
102
  "@contractspec/tool.typescript": "3.7.13",
@@ -1,4 +1,4 @@
1
- import { StabilityEnum } from '@contractspec/lib.contracts-spec';
1
+ import { StabilityEnum } from '@contractspec/lib.contracts-spec/ownership';
2
2
  import type { WorkflowSpec } from '@contractspec/lib.contracts-spec/workflow/spec';
3
3
  import { Logger, LogLevel } from '@contractspec/lib.logger';
4
4
  import { WorkflowComposer } from '@contractspec/lib.workflow-composer';