@elevasis/sdk 1.24.0 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/cli.cjs +875 -834
  2. package/dist/index.d.ts +4857 -4547
  3. package/dist/index.js +564 -2338
  4. package/dist/node/index.d.ts +693 -1356
  5. package/dist/node/index.js +1 -1
  6. package/dist/test-utils/index.d.ts +4186 -4139
  7. package/dist/test-utils/index.js +694 -2769
  8. package/dist/types/worker/adapters/clickup.d.ts +22 -0
  9. package/dist/types/worker/adapters/index.d.ts +1 -0
  10. package/dist/types/worker/index.d.ts +3 -2
  11. package/dist/types/worker/platform.d.ts +2 -2
  12. package/dist/worker/index.js +427 -2803
  13. package/package.json +2 -2
  14. package/reference/_navigation.md +11 -1
  15. package/reference/_reference-manifest.json +70 -0
  16. package/reference/claude-config/rules/organization-model.md +12 -1
  17. package/reference/claude-config/rules/organization-os.md +12 -1
  18. package/reference/claude-config/skills/om/SKILL.md +13 -5
  19. package/reference/claude-config/skills/om/operations/codify-level-a.md +109 -100
  20. package/reference/claude-config/skills/om/operations/customers.md +10 -6
  21. package/reference/claude-config/skills/om/operations/features.md +7 -3
  22. package/reference/claude-config/skills/om/operations/goals.md +10 -6
  23. package/reference/claude-config/skills/om/operations/identity.md +8 -5
  24. package/reference/claude-config/skills/om/operations/labels.md +17 -1
  25. package/reference/claude-config/skills/om/operations/offerings.md +11 -7
  26. package/reference/claude-config/skills/om/operations/roles.md +11 -7
  27. package/reference/claude-config/skills/om/operations/techStack.md +10 -2
  28. package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +32 -0
  29. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +43 -0
  30. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +40 -0
  31. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +61 -0
  32. package/reference/cli-management.mdx +539 -0
  33. package/reference/cli.mdx +579 -808
  34. package/reference/concepts.mdx +134 -146
  35. package/reference/deployment/api.mdx +296 -297
  36. package/reference/deployment/command-center.mdx +208 -209
  37. package/reference/deployment/index.mdx +194 -195
  38. package/reference/deployment/provided-features.mdx +110 -107
  39. package/reference/deployment/ui-execution.mdx +249 -250
  40. package/reference/framework/index.mdx +111 -195
  41. package/reference/framework/resource-documentation.mdx +90 -0
  42. package/reference/framework/tutorial-system.mdx +135 -135
  43. package/reference/getting-started.mdx +141 -142
  44. package/reference/index.mdx +95 -106
  45. package/reference/packages/ui/src/auth/README.md +6 -6
  46. package/reference/platform-tools/adapters-integration.mdx +300 -301
  47. package/reference/platform-tools/adapters-platform.mdx +552 -553
  48. package/reference/platform-tools/index.mdx +216 -217
  49. package/reference/platform-tools/type-safety.mdx +82 -82
  50. package/reference/resources/index.mdx +348 -349
  51. package/reference/resources/patterns.mdx +446 -449
  52. package/reference/resources/types.mdx +115 -116
  53. package/reference/roadmap.mdx +164 -165
  54. package/reference/rules/organization-model.md +14 -0
  55. package/reference/runtime.mdx +172 -173
  56. package/reference/scaffold/operations/propagation-pipeline.md +1 -1
  57. package/reference/scaffold/recipes/customize-crm-actions.md +45 -46
  58. package/reference/scaffold/recipes/extend-crm.md +253 -255
  59. package/reference/scaffold/recipes/extend-lead-gen.md +130 -77
  60. package/reference/scaffold/recipes/index.md +43 -44
  61. package/reference/scaffold/reference/contracts.md +1275 -1432
  62. package/reference/scaffold/reference/glossary.md +8 -6
  63. package/reference/scaffold/ui/feature-flags-and-gating.md +59 -46
  64. package/reference/scaffold/ui/feature-shell.mdx +11 -11
  65. package/reference/scaffold/ui/recipes.md +24 -24
  66. package/reference/troubleshooting.mdx +222 -223
@@ -3,7 +3,7 @@
3
3
 
4
4
  ---
5
5
  title: Build and Extend Lead Gen
6
- description: Map the lead-gen platform primitives available to SDK projects: shared UI pages, sidebar composition, data hooks, list/member state, artifacts, workflow adapters, contracts, and org-model extension boundaries.
6
+ description: Map the lead-gen platform primitives available to SDK projects: shared UI pages, provider-injected Organization Model config, data hooks, list/member state, artifacts, workflow adapters, contracts, and tenant-owned extension boundaries.
7
7
  ---
8
8
 
9
9
  # Build and Extend Lead Gen
@@ -19,42 +19,48 @@ Good trigger phrases:
19
19
  - "Read or update lead-gen lists from a workflow."
20
20
  - "Change the lead-gen lifecycle for this business."
21
21
 
22
- Lead gen is a layered platform surface, not one component:
23
-
24
- - **Organization OS:** prospecting semantics, System access, pipeline labels, and quick access live in the organization model.
25
- - **Shared UI:** lead-gen overview, lists, list detail, companies, contacts, sidebars, and drawer components live in `@elevasis/ui`.
26
- - **Headless hooks:** lists, companies, contacts, artifacts, list members, transitions, and derived actions live under `@elevasis/ui/hooks`.
27
- - **Acquisition substrate:** `acq_lists`, `acq_companies`, `acq_contacts`, `acq_artifacts`, list members, list companies, telemetry, and stateful transition shapes are exposed through generated contracts.
28
- - **Workflow adapters:** `acqDb` and `list` from `@elevasis/sdk/worker` let workflows read and mutate lead-gen data through platform tools.
29
- - **Contracts:** generated contract docs expose the current lead-gen shapes in `node_modules/@elevasis/sdk/reference/scaffold/reference/contracts.md`.
22
+ Lead gen is a layered platform surface, not one component. Shared packages own shapes, readers, runtime mechanics, and reusable UI. Tenant projects own the values that make a list builder specific to a business.
23
+
24
+ - **Organization OS:** prospecting semantics, System access, pipeline labels, quick access, stage catalogs, build templates, workflow actions, resources, and topology live in the tenant organization model.
25
+ - **Shared UI:** lead-gen overview, lists, list detail, companies, contacts, sidebars, drawer components, `useLeadGenConfig`, and list-builder state derivation live in `@elevasis/ui`.
26
+ - **Headless hooks:** lists, companies, contacts, artifacts, list members, transitions, and derived actions live under `@elevasis/ui/hooks`.
27
+ - **Acquisition substrate:** `acq_lists`, `acq_companies`, `acq_contacts`, `acq_artifacts`, list members, list companies, telemetry, and stateful transition shapes are exposed through generated contracts.
28
+ - **Core readers:** `getLeadGenStageCatalog`, `getAllBuildTemplates`, `getProspectingBuildTemplateOptions`, and `createBuildPlanSnapshotFromTemplateId` from `@elevasis/core` read caller-supplied Organization Model/template values. They do not ship tenant catalogs or default templates.
29
+ - **Workflow adapters:** `acqDb`, `list`, and `listBuilderWorkflow` from `@elevasis/sdk/worker` let workflows read and mutate lead-gen data through platform tools.
30
+ - **Contracts:** generated contract docs expose the current lead-gen shapes in `node_modules/@elevasis/sdk/reference/scaffold/reference/contracts.md`.
30
31
 
31
32
  ## Decision Table
32
33
 
33
34
  | User wants | Start here | Notes |
34
35
  | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
35
- | Change lead-gen System availability, labels, quick access, pipeline semantics, or resource descriptors | `core/config/organization-model.ts` | Treat this as Organization OS work. Use the project's configure ceremony if available. |
36
- | Add lead-gen sidebar nav or a lead-gen route | `@elevasis/ui/features/lead-gen` and `node_modules/@elevasis/sdk/reference/scaffold/ui/customization.md` | Prefer manifest/sidebar composition. Do not fork shared source first. |
37
- | Wrap a shared lead-gen page with project chrome | `LeadGenOverviewPage`, `LeadGenListsPage`, `LeadGenListDetailPage`, `ListBuilderPage`, `LeadGenCompaniesPage`, `LeadGenContactsPage` | Keep route files thin and put project-specific behavior in local feature modules. |
38
- | Build a custom campaign/list workspace | `ListBuilderPage`, `useLists`, `useList`, `useListProgress`, `useListExecutions`, `useWorkflowExecution`, `useExecutionSSE` from `@elevasis/ui` | Use the shared builder when possible; otherwise compose hooks for platform data and workflow execution. |
39
- | Render artifacts or list-member detail | `LeadGenListDetailPage`, `useArtifacts`, `useCreateArtifact`, `useListMember` | Artifacts are a substrate primitive. Keep vertical-specific rendering local until there are repeated use cases. |
40
- | Read or mutate lead-gen data inside a workflow | `acqDb` or `list` from `@elevasis/sdk/worker` | `organizationId` is injected server-side by the platform dispatcher. Do not pass it from workflow code. |
41
- | Add a new persisted lead-gen field, artifact kind, or transition API | Platform/API migration work, not just scaffold work | Update DB, core schemas/types, API service/handlers, hooks, docs, and scaffold contracts together. |
36
+ | Change lead-gen System availability, labels, quick access, stage catalogs, build templates, workflow actions, resources, or topology | `core/config/organization-model.ts` | Treat this as Organization OS work. Tenant projects own these values. Use the project's configure ceremony if available. |
37
+ | Add lead-gen sidebar nav or a lead-gen route | `@elevasis/ui/features/lead-gen` and `node_modules/@elevasis/sdk/reference/scaffold/ui/customization.md` | Prefer manifest/sidebar composition. Do not fork shared source first. |
38
+ | Wrap a shared lead-gen page with project chrome | `LeadGenOverviewPage`, `LeadGenListsPage`, `LeadGenListDetailPage`, `ListBuilderPage`, `LeadGenCompaniesPage`, `LeadGenContactsPage` | Keep route files thin and put project-specific behavior in local feature modules. |
39
+ | Build a custom campaign/list workspace | `ListBuilderPage`, `useLists`, `useList`, `useListProgress`, `useListExecutions`, `useWorkflowExecution`, `useExecutionSSE` from `@elevasis/ui` | Use the shared builder when possible; otherwise compose hooks for platform data and workflow execution. |
40
+ | Add or change list-builder workflow buttons/forms | `ui/src/config/listActions.ts` plus `ElevasisUIProvider listActions={listActions}` / `createElevasisApp({ listActions })` | The shared UI owns the registry contract. The project owns workflow ids, action keys, Zod schemas, layouts, and default inputs. |
41
+ | Render artifacts or list-member detail | `LeadGenListDetailPage`, `useArtifacts`, `useCreateArtifact`, `useListMember` | Artifacts are a substrate primitive. Keep vertical-specific rendering local until there are repeated use cases. |
42
+ | Read or mutate lead-gen data inside a workflow | `acqDb` or `list` from `@elevasis/sdk/worker` | `organizationId` is injected server-side by the platform dispatcher. Do not pass it from workflow code. |
43
+ | Add a new persisted lead-gen field, artifact kind, or transition API | Platform/API migration work, not just scaffold work | Update DB, core schemas/types, API service/handlers, hooks, docs, and scaffold contracts together. |
42
44
 
43
45
  ## Published Lead-Gen Surfaces
44
46
 
45
47
  | Surface | Import from | Use for |
46
48
  | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
47
49
  | `leadGenManifest`, `LEAD_GEN_ITEMS`, `LeadGenSidebar`, `LeadGenSidebarTop`, `LeadGenSidebarMiddle` | `@elevasis/ui/features/lead-gen` | Feature registration and sidebar composition |
48
- | `LeadGenOverviewPage`, `LeadGenListsPage`, `LeadGenListDetailPage`, `ListBuilderPage`, `LeadGenCompaniesPage`, `LeadGenContactsPage` | `@elevasis/ui/features/lead-gen` | Shared lead-gen pages you can route to or wrap |
49
- | `ListActionsProvider`, `useListActions`, `ListBuilderWorkflow`, `ListBuilderRegistry`, `LeadGenActionKey` | `@elevasis/ui/features/lead-gen` | List Builder workflow registry, slot-based field contracts, and project-owned action wiring |
50
- | `LeadGenRouteShell`, `LIST_TEMPLATE_OPTIONS`, `buildListConfig` | `@elevasis/ui/features/lead-gen` | Route shell helpers and list creation config helpers (contact/company detail surfaces are now `ContactDetailPage` / `CompanyDetailPage` from `@elevasis/ui/features/crm`) |
51
- | `useLists`, `useList`, `useListsTelemetry`, `useListProgress`, `useListExecutions`, `useCreateList`, `useUpdateList`, `useUpdateListConfig`, `useDeleteList` | `@elevasis/ui/hooks` | Headless list and telemetry data access |
50
+ | `LeadGenOverviewPage`, `LeadGenListsPage`, `LeadGenListDetailPage`, `ListBuilderPage`, `LeadGenCompaniesPage`, `LeadGenContactsPage` | `@elevasis/ui/features/lead-gen` | Shared lead-gen pages you can route to or wrap |
51
+ | `useLeadGenConfig`, `LeadGenBuildConfig`, build-state helpers | `@elevasis/ui/features/lead-gen` | Provider-backed derivation of stage catalog, build templates, default build steps, default template id, and export workflow id |
52
+ | `ListActionsProvider`, `useListActions`, `ListBuilderWorkflow`, `ListBuilderRegistry`, `LeadGenActionKey` | `@elevasis/ui/features/lead-gen` | List Builder workflow registry, slot-based field contracts, and project-owned action wiring |
53
+ | `LeadGenRouteShell` | `@elevasis/ui/features/lead-gen` | Route shell helper (contact/company detail surfaces are now `ContactDetailPage` / `CompanyDetailPage` from `@elevasis/ui/features/crm`) |
54
+ | `useLists`, `useList`, `useListsTelemetry`, `useListProgress`, `useListExecutions`, `useCreateList`, `useUpdateList`, `useUpdateListConfig`, `useDeleteList` | `@elevasis/ui/hooks` | Headless list and telemetry data access |
52
55
  | `useWorkflowExecution`, `useExecutionSSE`, `useAddCompaniesToList`, `useRemoveCompaniesFromList`, `useAddContactsToList` | `@elevasis/ui/hooks` | List Builder workflow triggering, live execution tailing, and list membership mutations |
53
56
  | `useCompanies`, `useCompany`, `useContacts`, `useContact` | `@elevasis/ui/hooks` | Acquisition company/contact data access |
54
57
  | `useArtifacts`, `useCreateArtifact`, `useListMembers`, `useListMember` | `@elevasis/ui/hooks` | Lead-gen substrate data access |
55
58
  | `useTransitionList`, `useTransitionListMember`, `useTransitionListCompany`, `useDeriveActions` | `@elevasis/ui/hooks` | Stateful transition mutations and contextual action derivation |
56
- | `ElevasisUIProvider`, `ElevasisCoreProvider`, `useElevasisServices` | `@elevasis/ui/provider` | Provider setup, API access, organization context, and `listActions` registry injection |
57
- | `acqDb`, `list` | `@elevasis/sdk/worker` | Workflow-side acquisition and list-scoped platform adapters |
59
+ | `ElevasisUIProvider`, `ElevasisCoreProvider`, `useElevasisServices` | `@elevasis/ui/provider` | Provider setup, API access, organization context, and `listActions` registry injection |
60
+ | `ElevasisSystemsProvider`, `ElevasisAuthenticatedShell` | `@elevasis/ui/provider`, `@elevasis/ui/app` | Organization Model injection for system-aware surfaces such as lead-gen config, sidebar projection, and Organization OS views |
61
+ | `getLeadGenStageCatalog`, `getAllBuildTemplates`, `getProspectingBuildTemplateOptions`, `createBuildPlanSnapshotFromTemplateId` | `@elevasis/core` | Generic Organization Model and template readers. Supply tenant templates/model values from the project. |
62
+ | `listBuilderWorkflow` | `@elevasis/sdk/worker` | Generic list-builder workflow runtime for tenant-owned step handlers |
63
+ | `acqDb`, `list` | `@elevasis/sdk/worker` | Workflow-side acquisition and list-scoped platform adapters |
58
64
 
59
65
  Read the generated contracts before changing typed boundaries:
60
66
 
@@ -137,7 +143,7 @@ function ListDetailRoute() {
137
143
 
138
144
  Use the same wrapping pattern for `LeadGenOverviewPage`, `LeadGenCompaniesPage`, and `LeadGenContactsPage`.
139
145
 
140
- For the real-time List Builder workspace, add a thin route that passes the route param into `ListBuilderPage`:
146
+ For the real-time List Builder workspace, add a thin route that passes the route param into `ListBuilderPage`:
141
147
 
142
148
  ```tsx
143
149
  import { createFileRoute } from '@tanstack/react-router'
@@ -153,26 +159,65 @@ function ListBuilderRoute() {
153
159
  }
154
160
  ```
155
161
 
156
- Register project workflow actions at the provider boundary. The shared UI owns the contract; each project owns workflow ids, action keys, default inputs, and field components.
162
+ Register project workflow actions at the provider boundary. The shared UI owns the contract; each project owns workflow ids, action keys, default inputs, and field components.
163
+
164
+ The shared pages call `useLeadGenConfig()` internally. That hook reads the provider-injected `organizationModel` and derives:
165
+
166
+ - `stageCatalog` from `getLeadGenStageCatalog(organizationModel)`
167
+ - `buildTemplates` and `defaultBuildSteps` from `getAllBuildTemplates(organizationModel)`
168
+ - `defaultBuildTemplateId` from the `sales.lead-gen` system config or first available template
169
+ - `exportWorkflowId` from the lead-gen workflow resource whose action matches export semantics
170
+
171
+ If the provider has no Organization Model, shared UI renders with empty config instead of falling back to Elevasis-owned defaults. A tenant that wants list creation and the build runner to be useful must provide lead-gen catalogs/templates/actions/resources/topology in `core/config/organization-model.ts`.
172
+
173
+ In external projects, pass the local list-action registry through the app factory and the tenant Organization Model through the authenticated shell:
174
+
175
+ ```tsx
176
+ // ui/src/main.tsx
177
+ import { createElevasisApp } from '@elevasis/ui/app'
178
+ import { listActions } from '@/config/listActions'
179
+
180
+ const App = createElevasisApp({
181
+ listActions,
182
+ // other app config...
183
+ })
184
+ ```
185
+
186
+ ```tsx
187
+ // ui/src/routes/__root.tsx
188
+ import { ElevasisAuthenticatedShell } from '@elevasis/ui/app'
189
+ import { canonicalOrganizationModel } from '@core/config/organization-model'
190
+
191
+ export function RootLayout() {
192
+ return (
193
+ <ElevasisAuthenticatedShell
194
+ systems={SYSTEM_MANIFESTS}
195
+ organizationModel={canonicalOrganizationModel}
196
+ // other shell config...
197
+ />
198
+ )
199
+ }
200
+ ```
201
+
202
+ Data sourcing mode is list-wide. Read `list.pipelineConfig.dataMode` or the workflow-side `list.getConfig()` result when a workflow must choose mock versus live sourcing. Do not add per-action `mock` / `live` controls for Apollo, crawl, enrichment, or scoring steps. Export mode is separate: `preview` versus `export` controls whether a destination write happens.
157
203
 
158
- Each registry entry declares a Zod `schema` and a `layout` of declarative field hints (`StepConfigLayout<Input>`). The shared `StepConfigForm` renders the layout, validates against the schema, and wires `value`/`onChange` for you — no per-action React components. The List Builder right column renders the form as `Configuration | Advanced | Runs` tabs with a sticky action footer; `RunWorkflowModal` renders the same form inline. Omit the `advanced:` section when a step has none.
204
+ Each registry entry declares a Zod `schema` and a `layout` of declarative field hints (`StepConfigLayout<Input>`). The shared `StepConfigForm` renders the layout, validates against the schema, and wires `value`/`onChange` for you — no per-action React components. The List Builder right column renders the form as `Configuration | Advanced | Runs` tabs with a sticky action footer. Omit the `advanced:` section when a step has none.
159
205
 
160
206
  Available field component variants: `textinput`, `textarea`, `numberinput`, `switch`, `segmented`, `select`, `multiselect`, `tags`, `json`. Field hints support `label`, `description`, `placeholder`, `min`/`max`/`step` (numbers), `options` (selects), and `when: (values) => boolean` for conditional visibility.
161
207
 
162
208
  ```tsx
163
- import * as z from 'zod'
164
- import { type ListBuilderRegistry } from '@elevasis/ui/features/lead-gen'
165
- import type { StepConfigLayout } from '@elevasis/ui/components/forms'
166
- import { ElevasisUIProvider } from '@elevasis/ui/provider'
167
- import { resourceDescriptors } from '@core/config/organization-model'
168
-
169
- const companyCleanupInputSchema = z.object({
170
- listId: z.string().uuid(),
171
- targetDescription: z.string(),
172
- dryRun: z.boolean().default(true),
173
- batchSize: z.number().int().min(1).default(20),
174
- mode: z.enum(['mock', 'live']).default('live')
175
- })
209
+ import * as z from 'zod'
210
+ import { leadGenManifest, type ListBuilderRegistry } from '@elevasis/ui/features/lead-gen'
211
+ import type { StepConfigLayout } from '@elevasis/ui/components/forms'
212
+ import { ElevasisSystemsProvider, ElevasisUIProvider } from '@elevasis/ui/provider'
213
+ import { organizationModel, resourceDescriptors } from '@core/config/organization-model'
214
+
215
+ const companyCleanupInputSchema = z.object({
216
+ listId: z.string().uuid(),
217
+ targetDescription: z.string(),
218
+ dryRun: z.boolean().default(true),
219
+ batchSize: z.number().int().min(1).default(20)
220
+ })
176
221
 
177
222
  type CompanyCleanupInput = z.infer<typeof companyCleanupInputSchema>
178
223
  const companyCleanupResource = resourceDescriptors.companyCleanup
@@ -192,24 +237,13 @@ const companyCleanupLayout: StepConfigLayout<CompanyCleanupInput> = {
192
237
  ]
193
238
  }
194
239
  ],
195
- advanced: {
196
- id: 'advanced',
197
- fields: [
198
- { path: 'batchSize', component: 'numberinput', label: 'Batch size', min: 1 },
199
- {
200
- path: 'mode',
201
- component: 'segmented',
202
- options: [
203
- { value: 'mock', label: 'Mock' },
204
- { value: 'live', label: 'Live' }
205
- ],
206
- when: () => import.meta.env.DEV
207
- }
208
- ]
209
- }
210
- }
240
+ advanced: {
241
+ id: 'advanced',
242
+ fields: [{ path: 'batchSize', component: 'numberinput', label: 'Batch size', min: 1 }]
243
+ }
244
+ }
211
245
 
212
- const listActions: ListBuilderRegistry = [
246
+ const listActions: ListBuilderRegistry = [
213
247
  {
214
248
  resourceId: companyCleanupResource.id,
215
249
  workflowId: companyCleanupResource.id,
@@ -226,24 +260,33 @@ const listActions: ListBuilderRegistry = [
226
260
  dryRun: true,
227
261
  batchSize: 20
228
262
  })
229
- }
230
- ]
231
-
232
- export function App() {
233
- return (
234
- <ElevasisUIProvider listActions={listActions} {...providerProps}>
235
- {children}
236
- </ElevasisUIProvider>
237
- )
238
- }
239
- ```
240
-
241
- Author the `schema` in a browser-safe sibling file (no Node-only imports) so it can be reused by the workflow runtime AND the UI form. See `apollo-import-schema.ts` in the platform for the canonical split pattern.
263
+ }
264
+ ]
265
+
266
+ const SYSTEM_MANIFESTS = [
267
+ leadGenManifest,
268
+ // Add any other shared/local system manifests here.
269
+ ]
270
+
271
+ export function App() {
272
+ return (
273
+ <ElevasisUIProvider listActions={listActions} {...providerProps}>
274
+ <ElevasisSystemsProvider systems={SYSTEM_MANIFESTS} organizationModel={organizationModel}>
275
+ {children}
276
+ </ElevasisSystemsProvider>
277
+ </ElevasisUIProvider>
278
+ )
279
+ }
280
+ ```
281
+
282
+ Author the `schema` in a browser-safe sibling file (no Node-only imports) so it can be reused by the workflow runtime AND the UI form. See `apollo-import-schema.ts` in the platform for the canonical split pattern.
283
+
284
+ Keep the registry in the external project, usually `ui/src/config/listActions.ts`. Do not add client workflow ids, client action keys, or client default inputs to `@elevasis/ui`.
242
285
 
243
286
  Per-section split rule (operator-grade vs power-user):
244
287
 
245
- - **Configuration:** target/limit, dry-run toggle, mode (preview/finalize), and any field an operator changes between runs.
246
- - **Advanced:** concurrency, batch size, timeouts, credential names, workflow chaining, dev-only mode toggles. Omit the `advanced:` key entirely when a step has none.
288
+ - **Configuration:** target/limit, dry-run toggle, export mode (`preview` / `export`) when the action writes to an external destination, and any field an operator changes between runs.
289
+ - **Advanced:** concurrency, batch size, timeouts, credential names, and workflow chaining. Do not put mock/live controls here; data sourcing mode is list-wide. Omit the `advanced:` key entirely when a step has none.
247
290
  - **`defaultInput`:** seeds the form before the user touches anything; must include `listId: list.id`.
248
291
 
249
292
  ## 3. Build a Custom Campaign Workspace
@@ -367,13 +410,23 @@ Keep these boundaries straight:
367
410
  - `organizationId` is injected by the platform dispatcher. Do not pass it from workflow code.
368
411
  - Persisted API shapes are owned by core/API contracts, not route-local TypeScript.
369
412
 
370
- ## 5. Customize Lead-Gen Semantics
371
-
372
- The lead-gen shell module key is `lead-gen`, the Organization OS System id is `sales.lead-gen`, and the action currently used by the shared manifest is `leadgen.lists.manage`.
373
-
374
- For feature toggles, labels, lifecycle semantics, or resource descriptors, update the project model:
375
-
376
- `core/config/organization-model.ts`
413
+ ## 5. Customize Lead-Gen Semantics
414
+
415
+ The lead-gen shell module key is `lead-gen`, the Organization OS System id is `sales.lead-gen`, and the action currently used by the shared manifest is `leadgen.lists.manage`.
416
+
417
+ For feature toggles, labels, lifecycle semantics, stage catalogs, build templates, actions, resource descriptors, or runtime topology, update the project model:
418
+
419
+ `core/config/organization-model.ts`
420
+
421
+ Tenant-owned list-builder values belong in the main Organization Model:
422
+
423
+ - stage vocabulary in lead-gen ontology catalogs
424
+ - build templates and template-step catalogs in lead-gen ontology catalogs
425
+ - action ids in the tenant action layer
426
+ - workflow resources in the tenant resources map with ontology bindings and `primaryAction`
427
+ - topology relationships in the tenant topology map
428
+
429
+ Use `core/config/extensions/*` for entity schema variants, not for list-builder stage catalogs or workflow bindings.
377
430
 
378
431
  The platform-side lead-gen stateful vocabulary is defined for:
379
432
 
@@ -1,51 +1,50 @@
1
1
  <!-- @generated by packages/sdk/scripts/copy-reference-docs.mjs -- DO NOT EDIT -->
2
2
  <!-- Regenerate: pnpm scaffold:sync -->
3
3
 
4
- ---
5
- title: Pathway Recipes
6
- description: Terse end-to-end walkthroughs for the three most common authoring tasks -- adding a system, adding a resource, and gating access.
7
- ---
8
-
9
- # Pathway Recipes
10
-
11
- Three sequential walkthroughs for common authoring tasks. Each recipe links into the reference docs rather than duplicating them.
12
-
13
- Before starting, read [glossary.md](../reference/glossary.md) to disambiguate overloaded terms (System, Resource, systemId, Settings asymmetry, Topology).
14
-
15
- ---
16
-
17
- ## Recipes
18
-
4
+ ---
5
+ title: Pathway Recipes
6
+ description: Terse end-to-end walkthroughs for the three most common authoring tasks -- adding a system, adding a resource, and gating access.
7
+ ---
8
+
9
+ # Pathway Recipes
10
+
11
+ Three sequential walkthroughs for common authoring tasks. Each recipe links into the reference docs rather than duplicating them.
12
+
13
+ Before starting, read [glossary.md](../reference/glossary.md) to disambiguate overloaded terms (System, Resource, systemId, Settings asymmetry, Topology).
14
+
15
+ ---
16
+
17
+ ## Recipes
18
+
19
19
  **[Add an OM-Backed System](add-a-feature.md)**
20
20
  You want a new system with cohesive Organization Model semantics, executable resources, and optional UI. Covers Systems, System-owned ontology and config, Resource descriptors with `title`, `description`, `resource.ontology.actions`, `primaryAction`, `codeRefs`, OM topology, runtime assembly, manifests, routes, guards, tests, and compatibility notes for old `System.content` consumers.
21
-
22
- **[Add a Resource](add-a-resource.md)**
23
- You want a new workflow or agent deployed to the platform. Covers OM Resource descriptor authoring, descriptor-backed `WorkflowDefinition` binding, `DeploymentSpec` assembly, relationship declarations, and CLI verification.
24
-
25
- **[Gate by System or Admin](gate-by-feature-or-admin.md)**
26
- You want to restrict a route, nav item, or UI element by system flag or admin role. Covers the decision table, `SystemGuard`, `AdminGuard`, nav-entry visibility fields, per-member system overrides, and the settings-asymmetry gotcha.
27
-
28
- **[Build and Extend CRM](extend-crm.md)**
29
- You want to build on the shared CRM without forking it: add CRM routes, compose sidebars/pages, use deal/company/contact hooks, mutate CRM data from workflows, or understand which contracts and adapters form the extension surface.
30
-
31
- **[Build and Extend Lead Gen](extend-lead-gen.md)**
32
- You want to build on the shared lead-gen system without forking it: add lead-gen routes, compose sidebars/pages, use list/company/contact/artifact hooks, mutate list data from workflows, or understand which contracts and adapters form the extension surface.
33
-
34
- **[Customize CRM Actions](customize-crm-actions.md)**
35
- You want to add, hide, or replace CRM deal action buttons, configure the shared `crmActions` provider path, or call a project-owned workflow from custom UI when server-side action dispatch constraints require it. Covers `ActionDef`, `DEFAULT_CRM_ACTIONS`, provider wiring, and the current v1 boundary for custom action dispatch.
36
-
37
- **[Customize Knowledge Browser](customize-knowledge-browser.md)**
38
- You want to mount, extend, or replace the default Knowledge Browser. Covers the three customization tiers (default manifest mount, sidebar composition via `KnowledgeSidebarMiddle` + `KNOWLEDGE_ITEMS`, and direct query access via `@elevasis/core/knowledge`), the one-line `vite.config.ts` plugin add (`knowledgePlugin()` from `@elevasis/ui/vite-plugin-knowledge`), and the CSS import requirement.
39
-
21
+
22
+ **[Add a Resource](add-a-resource.md)**
23
+ You want a new workflow or agent deployed to the platform. Covers OM Resource descriptor authoring, descriptor-backed `WorkflowDefinition` binding, `DeploymentSpec` assembly, relationship declarations, and CLI verification.
24
+
25
+ **[Gate by System or Admin](gate-by-feature-or-admin.md)**
26
+ You want to restrict a route, nav item, or UI element by system flag or admin role. Covers the decision table, `SystemGuard`, `AdminGuard`, nav-entry visibility fields, per-member system overrides, and the settings-asymmetry gotcha.
27
+
28
+ **[Build and Extend CRM](extend-crm.md)**
29
+ You want to build on the shared CRM without forking it: add CRM routes, compose sidebars/pages, use deal/company/contact hooks, mutate CRM data from workflows, or understand which contracts and adapters form the extension surface.
30
+
31
+ **[Build and Extend Lead Gen](extend-lead-gen.md)**
32
+ You want to build on the shared lead-gen system without forking it: add lead-gen routes, compose sidebars/pages, use list/company/contact/artifact hooks, mutate list data from workflows, or understand which contracts and adapters form the extension surface.
33
+
34
+ **[Customize CRM Actions](customize-crm-actions.md)**
35
+ You want to add, hide, or replace CRM deal action buttons, configure the shared `crmActions` provider path, or call a project-owned workflow from custom UI when server-side action dispatch constraints require it. Covers `ActionDef`, the caller-supplied `crmActions` catalog, provider wiring, and the current v1 boundary for custom action dispatch.
36
+
37
+ **[Customize Knowledge Browser](customize-knowledge-browser.md)**
38
+ You want to mount, extend, or replace the default Knowledge Browser. Covers the three customization tiers (default manifest mount, sidebar composition via `KnowledgeSidebarMiddle` + `KNOWLEDGE_ITEMS`, and direct query access via `@elevasis/core/knowledge`), the one-line `vite.config.ts` plugin add (`knowledgePlugin()` from `@elevasis/ui/vite-plugin-knowledge`), and the CSS import requirement.
39
+
40
40
  **[Query the Knowledge Graph](query-the-knowledge-graph.md)**
41
41
  You want to browse, inspect, or traverse the OrganizationModel knowledge graph from the command line. Covers the three verbs (`knowledge:ls`, `knowledge:cat`, `knowledge:graph`), all six mount axes (`/by-system/`, `/by-ontology/`, `/by-kind/`, `/by-owner/`, `/graph/.../governs/`, `/graph/.../governed-by/`), dual-CLI invocation patterns (`elevasis-sdk` for external projects, `elevasis` for the monorepo), JSON output shapes, and the Windows/MSYS PowerShell gotcha.
42
-
43
- ---
44
-
45
- ## Reference docs these recipes link into
46
-
47
- - [glossary.md](../reference/glossary.md) -- term disambiguation for System, Resource, systemId, Topology, Settings asymmetry
48
- - [contracts.md](../reference/contracts.md) -- TypeScript shapes: `SystemModule`, `OrganizationModel`, CRM deal types, lead-gen list/member/artifact types, `CrmToolMap`, `LeadToolMap`, `ListToolMap`, `ActionDef`
49
- - [feature-flags-and-gating.md](../ui/feature-flags-and-gating.md) -- full three-concept gating model
50
- - [workflow-recipes.md](../operations/workflow-recipes.md) -- workflow anatomy, adapters, trigger patterns
51
-
42
+
43
+ ---
44
+
45
+ ## Reference docs these recipes link into
46
+
47
+ - [glossary.md](../reference/glossary.md) -- term disambiguation for System, Resource, systemId, Topology, Settings asymmetry
48
+ - [contracts.md](../reference/contracts.md) -- TypeScript shapes: `SystemModule`, `OrganizationModel`, CRM deal types, lead-gen list/member/artifact types, `CrmToolMap`, `LeadToolMap`, `ListToolMap`, `ActionDef`
49
+ - [feature-flags-and-gating.md](../ui/feature-flags-and-gating.md) -- full three-concept gating model
50
+ - [workflow-recipes.md](../operations/workflow-recipes.md) -- workflow anatomy, adapters, trigger patterns