@elevasis/sdk 1.44.3 → 1.46.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 (259) hide show
  1. package/dist/cli.cjs +35026 -30226
  2. package/dist/index.d.ts +1786 -808
  3. package/dist/index.js +789 -739
  4. package/dist/node/index.d.ts +105 -181
  5. package/dist/node/index.js +2 -2
  6. package/dist/test-utils/index.d.ts +901 -359
  7. package/dist/test-utils/index.js +587 -824
  8. package/dist/worker/index.d.ts +12685 -0
  9. package/dist/worker/index.js +188 -216
  10. package/package.json +4 -7
  11. package/reference/_navigation.md +161 -22
  12. package/reference/_reference-manifest.json +228 -4
  13. package/reference/claude-config.md +8 -0
  14. package/reference/core/exports.mdx +2 -0
  15. package/reference/core/index.mdx +3 -3
  16. package/reference/examples/organization-model.ts +117 -111
  17. package/reference/index.mdx +4 -4
  18. package/reference/packages/core/src/business/README.md +4 -1
  19. package/reference/packages/core/src/content/README.md +19 -0
  20. package/reference/packages/core/src/organization-model/README.md +148 -149
  21. package/reference/packages/core/src/organization-model/readiness/README.md +42 -0
  22. package/reference/packages/ui/src/features/README.md +28 -28
  23. package/reference/rules/active-change-index.md +40 -54
  24. package/reference/rules/agent-runtime.md +81 -0
  25. package/reference/rules/agent-start-here.md +71 -163
  26. package/reference/rules/deployment.md +33 -10
  27. package/reference/rules/error-handling.md +26 -0
  28. package/reference/rules/execution.md +13 -0
  29. package/reference/rules/frontend.md +10 -3
  30. package/reference/rules/observability.md +9 -1
  31. package/reference/rules/operations.md +26 -17
  32. package/reference/rules/organization-model.md +74 -88
  33. package/reference/rules/organization-os.md +71 -88
  34. package/reference/rules/package-taxonomy.md +11 -2
  35. package/reference/rules/platform.md +13 -7
  36. package/reference/rules/shared-types.md +36 -0
  37. package/reference/rules/task-tracking.md +30 -5
  38. package/reference/rules/ui.md +145 -3
  39. package/reference/rules/vibe-intents.md +271 -0
  40. package/reference/rules/vibe.md +17 -243
  41. package/reference/scaffold/core/organization-graph.mdx +112 -99
  42. package/reference/scaffold/core/organization-model.mdx +231 -215
  43. package/reference/scaffold/operations/propagation-pipeline.md +16 -17
  44. package/reference/scaffold/operations/scaffold-maintenance.md +22 -20
  45. package/reference/scaffold/operations/workflow-recipes.md +72 -20
  46. package/reference/scaffold/recipes/add-a-feature.md +156 -146
  47. package/reference/scaffold/recipes/add-a-resource.md +123 -117
  48. package/reference/scaffold/recipes/customize-crm-actions.md +28 -13
  49. package/reference/scaffold/recipes/customize-knowledge-browser.md +52 -117
  50. package/reference/scaffold/recipes/customize-organization-model.md +161 -149
  51. package/reference/scaffold/recipes/extend-a-base-entity.md +156 -140
  52. package/reference/scaffold/recipes/extend-content.md +265 -0
  53. package/reference/scaffold/recipes/extend-crm.md +16 -11
  54. package/reference/scaffold/recipes/extend-lead-gen.md +37 -21
  55. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +160 -118
  56. package/reference/scaffold/recipes/index.md +6 -3
  57. package/reference/scaffold/recipes/query-the-knowledge-graph.md +23 -23
  58. package/reference/scaffold/reference/contracts.md +30 -56
  59. package/reference/scaffold/reference/feature-registry.md +3 -0
  60. package/reference/scaffold/reference/glossary.md +4 -4
  61. package/reference/scaffold/reference/system-interface-capabilities.md +5 -4
  62. package/reference/scaffold/ui/composition-extensibility.mdx +271 -232
  63. package/reference/scaffold/ui/customization.md +2 -2
  64. package/reference/scaffold/ui/feature-flags-and-gating.md +14 -6
  65. package/reference/scaffold/ui/feature-shell.mdx +277 -62
  66. package/reference/scaffold/ui/recipes.md +229 -197
  67. package/reference/sdk/cli-management.mdx +166 -33
  68. package/reference/sdk/cli.mdx +90 -13
  69. package/reference/sdk/concepts.mdx +2 -0
  70. package/reference/sdk/define-builders.mdx +76 -0
  71. package/reference/sdk/deployment/command-center.mdx +6 -2
  72. package/reference/sdk/deployment/execution-reference.mdx +64 -186
  73. package/reference/sdk/deployment/index.mdx +2 -0
  74. package/reference/sdk/exports.mdx +4 -4
  75. package/reference/sdk/framework/agent.mdx +52 -116
  76. package/reference/sdk/framework/index.mdx +46 -65
  77. package/reference/sdk/framework/project-structure.mdx +150 -205
  78. package/reference/sdk/framework/tutorial-system.mdx +2 -2
  79. package/reference/sdk/human-in-the-loop.mdx +152 -0
  80. package/reference/sdk/index.mdx +6 -7
  81. package/reference/sdk/platform-tools/adapters-platform.mdx +3 -1
  82. package/reference/sdk/platform-tools/index.mdx +12 -0
  83. package/reference/sdk/platform-tools/type-safety.mdx +4 -0
  84. package/reference/sdk/project-deployment-spec.mdx +131 -0
  85. package/reference/sdk/resources/index.mdx +21 -7
  86. package/reference/sdk/resources/patterns.mdx +54 -24
  87. package/reference/sdk/resources/types.mdx +7 -4
  88. package/reference/sdk/templates/data-enrichment.mdx +7 -3
  89. package/reference/sdk/templates/email-sender.mdx +139 -135
  90. package/reference/sdk/templates/lead-scorer.mdx +5 -1
  91. package/reference/sdk/templates/pdf-generator.mdx +155 -151
  92. package/reference/sdk/templates/recurring-job.mdx +195 -189
  93. package/reference/sdk/templates/text-classifier.mdx +4 -0
  94. package/reference/sdk/templates/web-scraper.mdx +139 -135
  95. package/reference/spine/spine-primer.md +135 -96
  96. package/reference/ui/exports.mdx +1 -0
  97. package/reference/ui/index.mdx +14 -7
  98. package/dist/types/worker/adapters/anymailfinder.d.ts +0 -14
  99. package/dist/types/worker/adapters/apify.d.ts +0 -14
  100. package/dist/types/worker/adapters/approval.d.ts +0 -23
  101. package/dist/types/worker/adapters/attio.d.ts +0 -22
  102. package/dist/types/worker/adapters/clickup.d.ts +0 -22
  103. package/dist/types/worker/adapters/create-adapter.d.ts +0 -41
  104. package/dist/types/worker/adapters/crm.d.ts +0 -20
  105. package/dist/types/worker/adapters/dropbox.d.ts +0 -14
  106. package/dist/types/worker/adapters/email.d.ts +0 -25
  107. package/dist/types/worker/adapters/execution.d.ts +0 -22
  108. package/dist/types/worker/adapters/gmail.d.ts +0 -14
  109. package/dist/types/worker/adapters/google-sheets.d.ts +0 -14
  110. package/dist/types/worker/adapters/index.d.ts +0 -33
  111. package/dist/types/worker/adapters/instantly.d.ts +0 -14
  112. package/dist/types/worker/adapters/lead.d.ts +0 -28
  113. package/dist/types/worker/adapters/list.d.ts +0 -9
  114. package/dist/types/worker/adapters/llm.d.ts +0 -45
  115. package/dist/types/worker/adapters/millionverifier.d.ts +0 -14
  116. package/dist/types/worker/adapters/notification.d.ts +0 -28
  117. package/dist/types/worker/adapters/pdf.d.ts +0 -22
  118. package/dist/types/worker/adapters/projects.d.ts +0 -20
  119. package/dist/types/worker/adapters/resend.d.ts +0 -14
  120. package/dist/types/worker/adapters/scheduler.d.ts +0 -25
  121. package/dist/types/worker/adapters/signature-api.d.ts +0 -14
  122. package/dist/types/worker/adapters/storage.d.ts +0 -33
  123. package/dist/types/worker/adapters/stripe.d.ts +0 -14
  124. package/dist/types/worker/adapters/tomba.d.ts +0 -14
  125. package/dist/types/worker/index.d.ts +0 -60
  126. package/dist/types/worker/platform.d.ts +0 -90
  127. package/dist/types/worker/utils.d.ts +0 -9
  128. package/reference/claude-config/Overview.md +0 -230
  129. package/reference/claude-config/hooks/post-edit-validate.mjs +0 -98
  130. package/reference/claude-config/hooks/scaffold-registry-reminder.mjs +0 -187
  131. package/reference/claude-config/hooks/tool-failure-recovery.mjs +0 -73
  132. package/reference/claude-config/registries/graph-skills.json +0 -4
  133. package/reference/claude-config/registries/knowledge-flags.json +0 -154
  134. package/reference/claude-config/registries/skill-coverage.json +0 -20
  135. package/reference/claude-config/rules/active-change-index.md +0 -22
  136. package/reference/claude-config/rules/agent-start-here.md +0 -22
  137. package/reference/claude-config/rules/deployment.md +0 -22
  138. package/reference/claude-config/rules/error-handling.md +0 -22
  139. package/reference/claude-config/rules/execution.md +0 -22
  140. package/reference/claude-config/rules/frontend.md +0 -22
  141. package/reference/claude-config/rules/observability.md +0 -22
  142. package/reference/claude-config/rules/operations.md +0 -22
  143. package/reference/claude-config/rules/organization-model.md +0 -22
  144. package/reference/claude-config/rules/organization-os.md +0 -22
  145. package/reference/claude-config/rules/package-taxonomy.md +0 -22
  146. package/reference/claude-config/rules/platform.md +0 -22
  147. package/reference/claude-config/rules/shared-types.md +0 -22
  148. package/reference/claude-config/rules/task-tracking.md +0 -22
  149. package/reference/claude-config/rules/topbar-actions.md +0 -70
  150. package/reference/claude-config/rules/ui.md +0 -22
  151. package/reference/claude-config/rules/vibe.md +0 -22
  152. package/reference/claude-config/scripts/statusline-command.js +0 -18
  153. package/reference/claude-config/settings.json +0 -30
  154. package/reference/claude-config/skills/client/SKILL.md +0 -201
  155. package/reference/claude-config/skills/deploy/SKILL.md +0 -159
  156. package/reference/claude-config/skills/dsp/SKILL.md +0 -66
  157. package/reference/claude-config/skills/elevasis/SKILL.md +0 -251
  158. package/reference/claude-config/skills/explore/SKILL.md +0 -78
  159. package/reference/claude-config/skills/git-sync/SKILL.md +0 -166
  160. package/reference/claude-config/skills/om/SKILL.md +0 -475
  161. package/reference/claude-config/skills/om/operations/build.md +0 -237
  162. package/reference/claude-config/skills/om/operations/codify-level-a.md +0 -109
  163. package/reference/claude-config/skills/om/operations/codify-level-b.md +0 -159
  164. package/reference/claude-config/skills/om/operations/customers.md +0 -114
  165. package/reference/claude-config/skills/om/operations/features.md +0 -88
  166. package/reference/claude-config/skills/om/operations/goals.md +0 -123
  167. package/reference/claude-config/skills/om/operations/identity.md +0 -97
  168. package/reference/claude-config/skills/om/operations/labels.md +0 -110
  169. package/reference/claude-config/skills/om/operations/offerings.md +0 -114
  170. package/reference/claude-config/skills/om/operations/roles.md +0 -104
  171. package/reference/claude-config/skills/om/operations/scaffold.md +0 -163
  172. package/reference/claude-config/skills/om/operations/techStack.md +0 -38
  173. package/reference/claude-config/skills/project/SKILL.md +0 -1114
  174. package/reference/claude-config/skills/run-ui/SKILL.md +0 -73
  175. package/reference/claude-config/skills/save/SKILL.md +0 -183
  176. package/reference/claude-config/skills/setup/SKILL.md +0 -290
  177. package/reference/claude-config/skills/status/SKILL.md +0 -59
  178. package/reference/claude-config/skills/submit-request/SKILL.md +0 -180
  179. package/reference/claude-config/skills/sync/SKILL.md +0 -47
  180. package/reference/claude-config/skills/tutorial/SKILL.md +0 -259
  181. package/reference/claude-config/skills/tutorial/progress-template.md +0 -74
  182. package/reference/claude-config/skills/tutorial/technical.md +0 -1303
  183. package/reference/claude-config/skills/tutorial/vibe-coder.md +0 -890
  184. package/reference/claude-config/sync-notes/2026-04-22-git-sync-and-sync-notes.md +0 -27
  185. package/reference/claude-config/sync-notes/2026-04-22-lead-gen-deliverability-removal.md +0 -30
  186. package/reference/claude-config/sync-notes/2026-04-24-test-utils-and-template-tests.md +0 -73
  187. package/reference/claude-config/sync-notes/2026-04-24-ui-consolidation-and-sdk-cli-train.md +0 -86
  188. package/reference/claude-config/sync-notes/2026-04-25-auth-role-system-and-settings-roles.md +0 -55
  189. package/reference/claude-config/sync-notes/2026-04-27-crm-hitl-action-layer-cutover.md +0 -97
  190. package/reference/claude-config/sync-notes/2026-04-27-lead-gen-substrate-train.md +0 -112
  191. package/reference/claude-config/sync-notes/2026-04-29-crm-state-and-lead-gen-processing-status.md +0 -93
  192. package/reference/claude-config/sync-notes/2026-05-02-crm-ownership-next-action.md +0 -58
  193. package/reference/claude-config/sync-notes/2026-05-02-template-hardcode-workos-config.md +0 -56
  194. package/reference/claude-config/sync-notes/2026-05-04-elevasis-workspace.md +0 -71
  195. package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +0 -83
  196. package/reference/claude-config/sync-notes/2026-05-04-template-skills-run-ui-and-tutorial.md +0 -59
  197. package/reference/claude-config/sync-notes/2026-05-05-list-builder.md +0 -42
  198. package/reference/claude-config/sync-notes/2026-05-06-crm-spine.md +0 -60
  199. package/reference/claude-config/sync-notes/2026-05-06-sdk-changes-release-train.md +0 -37
  200. package/reference/claude-config/sync-notes/2026-05-07-sdk-changes-release-train.md +0 -34
  201. package/reference/claude-config/sync-notes/2026-05-08-resource-governance-scaffold-guidance.md +0 -38
  202. package/reference/claude-config/sync-notes/2026-05-09-clients-domain.md +0 -32
  203. package/reference/claude-config/sync-notes/2026-05-09-command-system.md +0 -33
  204. package/reference/claude-config/sync-notes/2026-05-09-resource-governance-and-misc.md +0 -69
  205. package/reference/claude-config/sync-notes/2026-05-12-sdk-ready-release-train.md +0 -30
  206. package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +0 -45
  207. package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +0 -52
  208. package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +0 -33
  209. package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +0 -32
  210. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +0 -43
  211. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +0 -40
  212. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +0 -61
  213. package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +0 -49
  214. package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +0 -31
  215. package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +0 -42
  216. package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +0 -33
  217. package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +0 -37
  218. package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +0 -28
  219. package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +0 -43
  220. package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +0 -26
  221. package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +0 -33
  222. package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +0 -35
  223. package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +0 -49
  224. package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +0 -47
  225. package/reference/claude-config/sync-notes/2026-05-28-om-snapshot-sdk-workflow-config.md +0 -33
  226. package/reference/claude-config/sync-notes/2026-05-30-client-source-and-om-profiles.md +0 -39
  227. package/reference/claude-config/sync-notes/2026-06-02-knowledge-nested-group-routing.md +0 -27
  228. package/reference/claude-config/sync-notes/2026-06-02-nest-projects-under-platform.md +0 -45
  229. package/reference/claude-config/sync-notes/2026-06-03-skill-autogen-and-client-skill.md +0 -34
  230. package/reference/claude-config/sync-notes/2026-06-04-scaffold-registry-lane-severity.md +0 -34
  231. package/reference/claude-config/sync-notes/2026-06-05-appearance-app-mode-decouple.md +0 -29
  232. package/reference/claude-config/sync-notes/2026-06-05-ontology-endpoint-rename-and-knowledge-browser-ui.md +0 -86
  233. package/reference/claude-config/sync-notes/2026-06-06-om-build-systems-scaffold.md +0 -47
  234. package/reference/claude-config/sync-notes/2026-06-06-om-item-copy-references.md +0 -50
  235. package/reference/claude-config/sync-notes/2026-06-08-knowledge-base-page-not-found-fix.md +0 -76
  236. package/reference/claude-config/sync-notes/2026-06-09-agent-sessions-public-agent-chat-route.md +0 -75
  237. package/reference/claude-config/sync-notes/2026-06-09-sdk-cli-load-org-model-resolution.md +0 -42
  238. package/reference/claude-config/sync-notes/2026-06-12-agent-grants-visualizer-operations.md +0 -30
  239. package/reference/claude-config/sync-notes/2026-06-14-session-ux-and-project-cli-json.md +0 -33
  240. package/reference/claude-config/sync-notes/2026-06-14-shared-session-conversation-view.md +0 -26
  241. package/reference/claude-config/sync-notes/2026-06-15-session-chat-zero-wiring.md +0 -46
  242. package/reference/claude-config/sync-notes/2026-06-17-agent-session-ux-features.md +0 -34
  243. package/reference/claude-config/sync-notes/2026-06-25-shared-page-scroll-contract-guard.md +0 -52
  244. package/reference/claude-config/sync-notes/2026-06-26-leadgen-overview-om-telemetry.md +0 -47
  245. package/reference/claude-config/sync-notes/2026-07-21-agent-scaffold-hardening.md +0 -75
  246. package/reference/claude-config/sync-notes/2026-07-23-agent-session-memory.md +0 -49
  247. package/reference/claude-config/sync-notes/2026-07-23-workos-org-marker.md +0 -50
  248. package/reference/claude-config/sync-notes/2026-07-24-claude-5-models-and-session-surface-fixes.md +0 -116
  249. package/reference/claude-config/sync-notes/2026-07-27-agent-strict-output-and-turn-drift.md +0 -73
  250. package/reference/claude-config/sync-notes/2026-07-28-agent-reply-is-its-own-field.md +0 -84
  251. package/reference/claude-config/sync-notes/2026-07-30-login-screen-and-member-provisioning-state.md +0 -114
  252. package/reference/claude-config/sync-notes/2026-08-02-auth-guard-defaults-and-truncation-fix.md +0 -122
  253. package/reference/claude-config/sync-notes/2026-08-03-agent-prose-escape-normalization.md +0 -88
  254. package/reference/claude-config/sync-notes/2026-08-03-cli-gateway-errors-and-request-timeout.md +0 -120
  255. package/reference/claude-config/sync-notes/README.md +0 -43
  256. package/reference/sdk/framework/interaction-guidance.mdx +0 -182
  257. package/reference/sdk/framework/memory.mdx +0 -326
  258. package/reference/sdk/framework/resource-documentation.mdx +0 -90
  259. package/reference/sdk/roadmap.mdx +0 -164
@@ -4,7 +4,13 @@
4
4
  // Pure reference file -- NOT imported anywhere.
5
5
  // Copy individual examples into core/config/organization-model.ts or resource definitions as needed.
6
6
 
7
- import { defineOrganizationModel, defineResources } from '@elevasis/core/organization-model'
7
+ import {
8
+ defineOrganizationModel,
9
+ defineResources,
10
+ defineTopology,
11
+ topologyRef,
12
+ topologyRelationship
13
+ } from '@elevasis/core/organization-model'
8
14
 
9
15
  // ---------------------------------------------------------------------------
10
16
  // Identity and branding override
@@ -206,36 +212,36 @@ export const identityExample = defineOrganizationModel({
206
212
  // Customers and offerings
207
213
  // ---------------------------------------------------------------------------
208
214
  export const customersAndOfferingsExample = defineOrganizationModel({
215
+ // Both domains are id-keyed records, not arrays. The map key must equal the entry's `id`,
216
+ // and `order` is required on every entry.
209
217
  customers: {
210
- segments: [
211
- {
212
- id: 'segment-smb-agencies',
213
- name: 'SMB Marketing Agencies',
214
- description: 'Growth-oriented digital agencies with 5-50 staff.',
215
- jobsToBeDone: 'Run more client campaigns without growing headcount.',
216
- pains: ['Manual data entry', 'Slow lead qualification'],
217
- gains: ['Automated pipelines', 'Structured human review'],
218
- firmographics: {
219
- industry: 'Marketing / Digital Agency',
220
- companySize: '5-50',
221
- region: 'North America'
222
- },
223
- valueProp: 'Automate agency operations so the team focuses on strategy and clients.'
224
- }
225
- ]
218
+ 'segment-smb-agencies': {
219
+ id: 'segment-smb-agencies',
220
+ order: 10,
221
+ name: 'SMB Marketing Agencies',
222
+ description: 'Growth-oriented digital agencies with 5-50 staff.',
223
+ jobsToBeDone: 'Run more client campaigns without growing headcount.',
224
+ pains: ['Manual data entry', 'Slow lead qualification'],
225
+ gains: ['Automated pipelines', 'Structured human review'],
226
+ firmographics: {
227
+ industry: 'Marketing / Digital Agency',
228
+ companySize: '5-50',
229
+ region: 'North America'
230
+ },
231
+ valueProp: 'Automate agency operations so the team focuses on strategy and clients.'
232
+ }
226
233
  },
227
234
  offerings: {
228
- products: [
229
- {
230
- id: 'product-starter',
231
- name: 'Starter Automation Pack',
232
- description: 'Workflow bundle for lead enrichment, CRM follow-up, and project delivery automation.',
233
- pricingModel: 'subscription',
234
- price: 299,
235
- currency: 'USD',
236
- targetSegmentIds: ['segment-smb-agencies']
237
- }
238
- ]
235
+ 'product-starter': {
236
+ id: 'product-starter',
237
+ order: 10,
238
+ name: 'Starter Automation Pack',
239
+ description: 'Workflow bundle for lead enrichment, CRM follow-up, and project delivery automation.',
240
+ pricingModel: 'subscription',
241
+ price: 299,
242
+ currency: 'USD',
243
+ targetSegmentIds: ['segment-smb-agencies']
244
+ }
239
245
  }
240
246
  })
241
247
 
@@ -245,6 +251,7 @@ export const customersAndOfferingsExample = defineOrganizationModel({
245
251
  export const workflowResourceDescriptorsExample = defineResources({
246
252
  leadEnrichment: {
247
253
  id: 'lead-enrichment-workflow',
254
+ order: 10,
248
255
  title: 'Lead Enrichment',
249
256
  description: 'Enriches lead records and writes qualified opportunities into CRM.',
250
257
  kind: 'workflow',
@@ -286,67 +293,66 @@ export const compatibilityGraphLinksExample = {
286
293
  ]
287
294
  }
288
295
 
296
+ // `topology.relationships` is an id-keyed record, and each relationship uses `from`/`to`.
297
+ // Author it through `defineTopology` so the refs are compiled and validated for you.
289
298
  export const topologyRelationshipsExample = defineOrganizationModel({
290
- topology: {
291
- relationships: [
292
- {
293
- source: { kind: 'trigger', id: 'daily-lead-enrichment' },
294
- target: { kind: 'resource', id: workflowResourceDescriptorsExample.leadEnrichment.id },
295
- kind: 'triggers'
296
- },
297
- {
298
- source: { kind: 'resource', id: workflowResourceDescriptorsExample.leadEnrichment.id },
299
- target: { kind: 'externalResource', id: 'apollo' },
300
- kind: 'uses'
301
- },
302
- {
303
- source: { kind: 'resource', id: workflowResourceDescriptorsExample.leadEnrichment.id },
304
- target: { kind: 'role', id: 'role-ops-lead' },
305
- kind: 'approval'
306
- }
307
- ]
308
- }
299
+ topology: defineTopology({
300
+ dailyEnrichmentTrigger: topologyRelationship.triggers(
301
+ topologyRef.trigger('daily-lead-enrichment'),
302
+ topologyRef.resource(workflowResourceDescriptorsExample.leadEnrichment.id)
303
+ ),
304
+ enrichmentUsesApollo: topologyRelationship.uses(
305
+ topologyRef.resource(workflowResourceDescriptorsExample.leadEnrichment.id),
306
+ topologyRef.externalResource('apollo')
307
+ ),
308
+ enrichmentApprovedByOpsLead: topologyRelationship.approval(
309
+ topologyRef.resource(workflowResourceDescriptorsExample.leadEnrichment.id),
310
+ topologyRef.role('role-ops-lead')
311
+ )
312
+ })
309
313
  })
310
314
 
311
315
  // ---------------------------------------------------------------------------
312
316
  // Roles and goals
313
317
  // ---------------------------------------------------------------------------
314
318
  export const rolesAndGoalsExample = defineOrganizationModel({
319
+ // Both domains are id-keyed records with a required `order`.
320
+ // `heldBy` is a discriminated union on `kind`, not a display name.
315
321
  roles: {
316
- roles: [
317
- {
318
- id: 'role-ceo',
319
- title: 'CEO',
320
- responsibilities: ['Set company direction', 'Approve strategic initiatives'],
321
- heldBy: 'Alex Johnson'
322
- },
323
- {
324
- id: 'role-head-of-ops',
325
- title: 'Head of Operations',
326
- responsibilities: ['Manage workflow deployments', 'Review human-in-the-loop queue'],
327
- reportsToId: 'role-ceo',
328
- heldBy: 'Jordan Lee'
329
- }
330
- ]
322
+ 'role-ceo': {
323
+ id: 'role-ceo',
324
+ order: 10,
325
+ title: 'CEO',
326
+ responsibilities: ['Set company direction', 'Approve strategic initiatives'],
327
+ heldBy: { kind: 'human', userId: 'user-alex-johnson' }
328
+ },
329
+ 'role-head-of-ops': {
330
+ id: 'role-head-of-ops',
331
+ order: 20,
332
+ title: 'Head of Operations',
333
+ responsibilities: ['Manage workflow deployments', 'Review human-in-the-loop queue'],
334
+ reportsToId: 'role-ceo',
335
+ heldBy: { kind: 'human', userId: 'user-jordan-lee' }
336
+ }
331
337
  },
332
338
  goals: {
333
- objectives: [
334
- {
335
- id: 'goal-grow-arr-q2-2026',
336
- description: 'Grow monthly recurring revenue by end of Q2 2026.',
337
- periodStart: '2026-04-01',
338
- periodEnd: '2026-06-30',
339
- keyResults: [
340
- {
341
- id: 'kr-mrr-10k',
342
- description: 'Reach $10K MRR',
343
- targetMetric: 'Monthly recurring revenue',
344
- currentValue: 2800,
345
- targetValue: 10000
346
- }
347
- ]
348
- }
349
- ]
339
+ 'goal-grow-arr-q2-2026': {
340
+ id: 'goal-grow-arr-q2-2026',
341
+ order: 10,
342
+ description: 'Grow monthly recurring revenue by end of Q2 2026.',
343
+ periodStart: '2026-04-01',
344
+ periodEnd: '2026-06-30',
345
+ // `keyResults` genuinely is an array — it is nested inside the entry, not a domain map.
346
+ keyResults: [
347
+ {
348
+ id: 'kr-mrr-10k',
349
+ description: 'Reach $10K MRR',
350
+ targetMetric: 'Monthly recurring revenue',
351
+ currentValue: 2800,
352
+ targetValue: 10000
353
+ }
354
+ ]
355
+ }
350
356
  }
351
357
  })
352
358
 
@@ -354,38 +360,38 @@ export const rolesAndGoalsExample = defineOrganizationModel({
354
360
  // Knowledge nodes
355
361
  // ---------------------------------------------------------------------------
356
362
  export const knowledgeExample = defineOrganizationModel({
363
+ // `knowledge` is a flat id-keyed record. The old `{ version, lastModified, nodes[] }`
364
+ // wrapper was removed in the Phase 4 cut.
357
365
  knowledge: {
358
- nodes: [
359
- {
360
- id: 'knowledge.example-outreach-playbook',
361
- kind: 'playbook',
362
- title: 'Example Outreach Playbook',
363
- summary: 'Step-by-step runbook for launching a cold outreach campaign.',
364
- body: '## Overview\n\nThis playbook walks through prospect sourcing, message templates, scheduling, and reply triage.\n\n## Steps\n\n1. Source prospects from the lead-gen list.\n2. Personalize the cold email template.\n3. Schedule the sending campaign.\n4. Triage replies in the CRM.',
365
- links: [{ nodeId: 'system:sales.crm' }, { nodeId: 'system:sales.lead-gen' }],
366
- ownerIds: [],
367
- updatedAt: '2026-05-01'
368
- },
369
- {
370
- id: 'knowledge.example-icp-strategy',
371
- kind: 'strategy',
372
- title: 'Example ICP Strategy',
373
- summary: 'Describes the ideal customer profile and qualification thresholds.',
374
- body: '## ICP Profile\n\n- **Industry:** SMB marketing agencies\n- **Size:** 5-50 employees\n- **Region:** North America\n\nProspects scoring \\<60 are excluded from outreach.',
375
- links: [{ nodeId: 'system:sales' }],
376
- ownerIds: [],
377
- updatedAt: '2026-05-01'
378
- },
379
- {
380
- id: 'knowledge.example-org-model-reference',
381
- kind: 'reference',
382
- title: 'Example Organization Model Reference',
383
- summary: 'Glossary of OM domains and how they relate to systems and resources.',
384
- body: '## Domains\n\nThe organization model separates semantic contracts in ontology, system-local settings in config, executable governance in resources, and explanatory material in knowledge. Secrets and runtime state stay outside the Organization Model.',
385
- links: [],
386
- ownerIds: [],
387
- updatedAt: '2026-05-01'
388
- }
389
- ]
366
+ 'knowledge.example-outreach-playbook': {
367
+ id: 'knowledge.example-outreach-playbook',
368
+ kind: 'playbook',
369
+ title: 'Example Outreach Playbook',
370
+ summary: 'Step-by-step runbook for launching a cold outreach campaign.',
371
+ body: '## Overview\n\nThis playbook walks through prospect sourcing, message templates, scheduling, and reply triage.\n\n## Steps\n\n1. Source prospects from the lead-gen list.\n2. Personalize the cold email template.\n3. Schedule the sending campaign.\n4. Triage replies in the CRM.',
372
+ links: [{ nodeId: 'system:sales.crm' }, { nodeId: 'system:sales.lead-gen' }],
373
+ ownerIds: [],
374
+ updatedAt: '2026-05-01'
375
+ },
376
+ 'knowledge.example-icp-strategy': {
377
+ id: 'knowledge.example-icp-strategy',
378
+ kind: 'strategy',
379
+ title: 'Example ICP Strategy',
380
+ summary: 'Describes the ideal customer profile and qualification thresholds.',
381
+ body: '## ICP Profile\n\n- **Industry:** SMB marketing agencies\n- **Size:** 5-50 employees\n- **Region:** North America\n\nProspects scoring \\<60 are excluded from outreach.',
382
+ links: [{ nodeId: 'system:sales' }],
383
+ ownerIds: [],
384
+ updatedAt: '2026-05-01'
385
+ },
386
+ 'knowledge.example-org-model-reference': {
387
+ id: 'knowledge.example-org-model-reference',
388
+ kind: 'reference',
389
+ title: 'Example Organization Model Reference',
390
+ summary: 'Glossary of OM domains and how they relate to systems and resources.',
391
+ body: '## Domains\n\nThe organization model separates semantic contracts in ontology, system-local settings in config, executable governance in resources, and explanatory material in knowledge. Secrets and runtime state stay outside the Organization Model.',
392
+ links: [],
393
+ ownerIds: [],
394
+ updatedAt: '2026-05-01'
395
+ }
390
396
  }
391
397
  })
@@ -31,7 +31,7 @@ You do not need all three packages. A pure automation project needs only `@eleva
31
31
 
32
32
  ## Packages
33
33
 
34
- ### @elevasis/sdk (v1.30.2)
34
+ ### @elevasis/sdk (v1.45.0)
35
35
 
36
36
  The primary developer package. Provides the TypeScript API for defining workflows and agents, the `elevasis-sdk` CLI for validation and deployment, and typed worker adapters for 25 platform and integration tools.
37
37
 
@@ -41,7 +41,7 @@ The primary developer package. Provides the TypeScript API for defining workflow
41
41
 
42
42
  See [@elevasis/sdk](sdk/index.mdx) for the full group overview, getting started guide, CLI reference, adapter catalog, and more.
43
43
 
44
- ### @elevasis/core (v0.39.0)
44
+ ### @elevasis/core (v0.60.0)
45
45
 
46
46
  The shared contract layer. Exports Zod schemas and TypeScript types that are shared between the SDK, the UI, and the platform API. Useful when you need the typed contracts (organization model, entities, knowledge, auth) in a package that does not pull in the full SDK runtime.
47
47
 
@@ -51,9 +51,9 @@ The shared contract layer. Exports Zod schemas and TypeScript types that are sha
51
51
 
52
52
  See [@elevasis/core](core/index.mdx) for subpath details, browser/server split, and when to use it.
53
53
 
54
- ### @elevasis/ui (v2.42.0)
54
+ ### @elevasis/ui (v2.68.0)
55
55
 
56
- The shared React feature-shell. Provides an `ElevasisProvider` and manifest-backed feature modules that a host UI embeds. Many peer dependencies are optional -- pull only what the features you use require.
56
+ The shared React feature-shell. Provides `ElevasisCoreProvider` / `ElevasisSystemsProvider` and manifest-backed feature modules that a host UI embeds. Many peer dependencies are optional -- pull only what the features you use require.
57
57
 
58
58
  **Install:** `pnpm add @elevasis/ui`
59
59
 
@@ -47,6 +47,9 @@ export type Deal = BaseDeal
47
47
 
48
48
  ## Recipe
49
49
 
50
- The full pattern is documented in the SDK scaffold bundle: `operations/node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-a-base-entity.md`.
50
+ The full pattern is documented in the SDK scaffold bundle. Internally, read the workspace source at
51
+ `packages/sdk/docs/scaffold/recipes/extend-a-base-entity.md`; a tenant reads the published mirror at
52
+ `operations/node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-a-base-entity.md`, which does
53
+ not resolve from the monorepo root.
51
54
 
52
55
  The canonical template demo lives at `external/_template/core/types/entities.ts`.
@@ -0,0 +1,19 @@
1
+ # @elevasis/core/content
2
+
3
+ Content pipeline API schemas and platform-content typed interfaces. Browser-safe (no Node APIs).
4
+
5
+ ## Surface
6
+
7
+ | Export | Purpose |
8
+ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
9
+ | `ContentItemResponseSchema`, `CreateContentItemRequestSchema`, `UpdateContentItemRequestSchema` | `content_items` transport shape. `processingState` is intentionally absent from create/update — factory-write-only. |
10
+ | `ContentProcessingStateSchema` | `{ stepKey: { status, data? } }`, keyed by `ContentStepKeySchema` — a content-specific key, not lead-gen's `LeadGenStageKeySchema`. |
11
+ | `ContentPayloadEnvelopeSchema` | The producer's immutable emission stored in `payload`. Never edited — `body` is the human's canonical text. |
12
+ | `ReviewContentItemRequestSchema` | Approve, or reject with a required `rejectReason`. Writes `reviewed_at` / `reviewed_by`. |
13
+ | `ContentItemAttemptResponseSchema`, `CreateContentItemAttemptRequestSchema` | `content_item_attempts` transport shape. No `attemptNumber` field on create — the API service assigns it inside the write. `stepKey` is producer-supplied and nullable. |
14
+ | `ContentDistributionResponseSchema`, `CreateContentDistributionRequestSchema`, `UpdateContentDistributionRequestSchema` | `content_distributions` transport shape, including the manual-publish fields (`publishMethod`, `platformPostId`, `platformUrl`). |
15
+ | `PlatformContent`, `YouTubeContent`, `LinkedInContent`, `InstagramContent`, `XContent`, `AnyPlatformContent`, `PlatformContentMap`, `Platform` | Typed interfaces for platform-specific content stored in `content_distributions.platform_content`. |
16
+
17
+ ## Step catalog reconciliation
18
+
19
+ `ContentStepKeySchema` is free text today — the content System's step catalog (`content:catalog/<pipeline>-steps`) is authored separately in `packages/elevasis/core/config/organization-model`. Closed-catalog membership is enforced by the caller/API layer via model-injected validators once that catalog lands, mirroring how `LeadGenStageKeySchema` and `CrmStageKeySchema` are validated today.
@@ -1,149 +1,148 @@
1
- # Organization Model
2
-
3
- The organization model is the published semantic contract that maps a tenant's System hierarchy, shell navigation, business semantics, resource governance, and graph bindings.
4
-
5
- Use this module when resolving or validating an organization's contract before wiring UI shells, routing, system gates, or domain-specific capability checks.
6
-
7
- ## Published Exports
8
-
9
- The public entry point exposes:
10
-
11
- - `OrganizationModelSchema`
12
- - `DEFAULT_ORGANIZATION_MODEL`
13
- - `defineOrganizationModel`
14
- - `resolveOrganizationModel`
15
- - `createFoundationOrganizationModel`
16
- - node ID and System helper types
17
- - `OrganizationModel` and supporting domain types
18
-
19
- Import it from the published subpath:
20
-
21
- ```ts
22
- import {
23
- DEFAULT_ORGANIZATION_MODEL,
24
- createFoundationOrganizationModel,
25
- defineOrganizationModel,
26
- resolveOrganizationModel,
27
- type OrganizationModel
28
- } from '@elevasis/core/organization-model'
29
- ```
30
-
31
- ## Contract Shape
32
-
33
- The model is versioned and currently validates against `version: 1`.
34
-
35
- Top-level fields:
36
-
37
- - `version`
38
- - `domainMetadata`
39
- - `branding`
40
- - `navigation`
41
- - `sales`
42
- - `prospecting`
43
- - `projects`
44
- - `identity`
45
- - `customers`
46
- - `offerings`
47
- - `roles`
48
- - `goals`
49
- - `systems`
50
- - `resources`
51
- - `capabilities`
52
- - `policies`
53
- - `statuses`
54
- - `knowledge`
55
-
56
- The pure collection domains are id-keyed maps: `systems`, `roles`, `goals`, `customers`, `offerings`, `resources`, `capabilities`, `policies`, and `statuses`. The map key must match the entry `id`. Entries carry `order` for deterministic ordered views; use `listDomain(record)` when order matters.
57
-
58
- Resource identity is authored in `resources`. Runtime workflows, agents, integrations, and scripts import those descriptors, derive `resourceId` and kind from them, and attach executable behavior in operations code.
59
-
60
- ## System Set
61
-
62
- System hierarchy is authored as an id-keyed `systems` map. Dotted IDs and `parentSystemId` define parent/child relationships:
63
-
64
- ```ts
65
- systems: {
66
- dashboard: { id: 'dashboard', order: 10, label: 'Dashboard', lifecycle: 'active' },
67
- sales: { id: 'sales', order: 20, label: 'Sales', lifecycle: 'active' },
68
- clients: { id: 'clients', order: 30, label: 'Clients', lifecycle: 'active' },
69
- projects: { id: 'projects', order: 40, label: 'Projects', lifecycle: 'active' }
70
- }
71
- ```
72
-
73
- Systems describe semantic ownership, hierarchy, lifecycle, access, and governance. Sidebar presentation is authored separately under `navigation.sidebar`; UI-backed Systems may still provide `ui.path` for route matching during the migration, but they do not author composed surface lists. Lifecycle values such as `active`, `beta`, `deprecated`, and `archived` replace the old feature enabled/dev-only split.
74
-
75
- ## Sidebar Navigation
76
-
77
- Shell navigation is authored as a recursive sidebar tree:
78
-
79
- ```ts
80
- navigation: {
81
- sidebar: {
82
- primary: {
83
- dashboard: {
84
- type: 'surface',
85
- order: 10,
86
- label: 'Dashboard',
87
- path: '/',
88
- surfaceType: 'dashboard',
89
- targets: { systems: ['dashboard'] }
90
- },
91
- business: {
92
- type: 'group',
93
- order: 20,
94
- label: 'Business',
95
- children: {
96
- clients: {
97
- type: 'surface',
98
- order: 20,
99
- label: 'Clients',
100
- path: '/clients',
101
- surfaceType: 'list',
102
- targets: { systems: ['clients'] }
103
- }
104
- }
105
- }
106
- },
107
- bottom: {}
108
- }
109
- }
110
- ```
111
-
112
- Routeable sidebar leaves are projected into flat semantic surface DTOs by `projectOrganizationSurfaces(model)`. Do not author top-level `surfaces` or `navigationGroups` fields on `OrganizationModel`.
113
-
114
- ## Graph IDs
115
-
116
- Cross-collection links use kind-prefixed IDs:
117
-
118
- - `system:sales.crm`
119
- - `integration:instantly`
120
- - `resource:lead-import`
121
- - `action:operations.queue.review`
122
-
123
- ## Resource Descriptors
124
-
125
- The OM Resources domain is governance-only. Descriptors declare canonical `id`, required `systemPath`, governance `status`, and optional role ownership. `DeploymentSpec` remains the runtime/deploy assembly around those descriptors, not a second resource identity catalog.
126
-
127
- ## Resolution Semantics
128
-
129
- - `defineOrganizationModel()` is a typed helper.
130
- - `resolveOrganizationModel()` deep-merges a partial override into the default model, then validates it.
131
- - `createFoundationOrganizationModel()` resolves the canonical model and returns UI-facing helper outputs.
132
- - Plain objects merge recursively.
133
- - Id-keyed domain maps merge additively by key.
134
- - Arrays replace the default value.
135
- - Missing fields fall back to `DEFAULT_ORGANIZATION_MODEL`.
136
-
137
- ## Referential Integrity
138
-
139
- - System IDs must be unique.
140
- - Child System IDs require valid ancestors or `parentSystemId` links.
141
- - Systems with UI provide `ui.path`.
142
- - Systems, resources, roles, knowledge nodes, and goals must resolve their declared cross-references.
143
-
144
- ## Practical Guidance
145
-
146
- - Use `resolveOrganizationModel()` when you need a runtime-safe model.
147
- - Use `defineOrganizationModel()` when authoring static overrides.
148
- - Keep System IDs stable because shell routing, gating, breadcrumbs, and docs depend on them.
149
- - Put resource identity and governance in `resources`; attach executable behavior in operations.
1
+ # Organization Model
2
+
3
+ The organization model is the published semantic contract that maps a tenant's System hierarchy, shell navigation, business semantics, resource governance, and graph bindings.
4
+
5
+ Use this module when resolving or validating an organization's contract before wiring UI shells, routing, system gates, or domain-specific capability checks.
6
+
7
+ ## Published Exports
8
+
9
+ The public entry point exposes:
10
+
11
+ - `OrganizationModelSchema`
12
+ - `DEFAULT_ORGANIZATION_MODEL`
13
+ - `defineOrganizationModel`
14
+ - `resolveOrganizationModel`
15
+ - `createFoundationOrganizationModel`
16
+ - node ID and System helper types
17
+ - `OrganizationModel` and supporting domain types
18
+
19
+ Import it from the published subpath:
20
+
21
+ ```ts
22
+ import {
23
+ DEFAULT_ORGANIZATION_MODEL,
24
+ createFoundationOrganizationModel,
25
+ defineOrganizationModel,
26
+ resolveOrganizationModel,
27
+ type OrganizationModel
28
+ } from '@elevasis/core/organization-model'
29
+ ```
30
+
31
+ ## Contract Shape
32
+
33
+ The model is versioned and currently validates against `version: 1`.
34
+
35
+ Top-level fields:
36
+
37
+ - `version`
38
+ - `domainMetadata`
39
+ - `branding`
40
+ - `navigation`
41
+ - `sales`
42
+ - `prospecting`
43
+ - `projects`
44
+ - `identity`
45
+ - `customers`
46
+ - `offerings`
47
+ - `roles`
48
+ - `goals`
49
+ - `systems`
50
+ - `resources`
51
+ - `capabilities`
52
+ - `statuses`
53
+ - `knowledge`
54
+
55
+ The pure collection domains are id-keyed maps: `systems`, `roles`, `goals`, `customers`, `offerings`, `resources`, `capabilities`, and `statuses`. The map key must match the entry `id`. Entries carry `order` for deterministic ordered views; use `listDomain(record)` when order matters.
56
+
57
+ Resource identity is authored in `resources`. Runtime workflows, agents, integrations, and scripts import those descriptors, derive `resourceId` and kind from them, and attach executable behavior in operations code.
58
+
59
+ ## System Set
60
+
61
+ System hierarchy is authored as an id-keyed `systems` map. Dotted IDs and `parentSystemId` define parent/child relationships:
62
+
63
+ ```ts
64
+ systems: {
65
+ dashboard: { id: 'dashboard', order: 10, label: 'Dashboard', lifecycle: 'active' },
66
+ sales: { id: 'sales', order: 20, label: 'Sales', lifecycle: 'active' },
67
+ clients: { id: 'clients', order: 30, label: 'Clients', lifecycle: 'active' },
68
+ projects: { id: 'projects', order: 40, label: 'Projects', lifecycle: 'active' }
69
+ }
70
+ ```
71
+
72
+ Systems describe semantic ownership, hierarchy, lifecycle, access, and governance. Sidebar presentation is authored separately under `navigation.sidebar`; UI-backed Systems may still provide `ui.path` for route matching during the migration, but they do not author composed surface lists. Lifecycle values such as `active`, `beta`, `deprecated`, and `archived` replace the old feature enabled/dev-only split.
73
+
74
+ ## Sidebar Navigation
75
+
76
+ Shell navigation is authored as a recursive sidebar tree:
77
+
78
+ ```ts
79
+ navigation: {
80
+ sidebar: {
81
+ primary: {
82
+ dashboard: {
83
+ type: 'surface',
84
+ order: 10,
85
+ label: 'Dashboard',
86
+ path: '/',
87
+ surfaceType: 'dashboard',
88
+ targets: { systems: ['dashboard'] }
89
+ },
90
+ business: {
91
+ type: 'group',
92
+ order: 20,
93
+ label: 'Business',
94
+ children: {
95
+ clients: {
96
+ type: 'surface',
97
+ order: 20,
98
+ label: 'Clients',
99
+ path: '/clients',
100
+ surfaceType: 'list',
101
+ targets: { systems: ['clients'] }
102
+ }
103
+ }
104
+ }
105
+ },
106
+ bottom: {}
107
+ }
108
+ }
109
+ ```
110
+
111
+ Routeable sidebar leaves are projected into flat semantic surface DTOs by `projectOrganizationSurfaces(model)`. Do not author top-level `surfaces` or `navigationGroups` fields on `OrganizationModel`.
112
+
113
+ ## Graph IDs
114
+
115
+ Cross-collection links use kind-prefixed IDs:
116
+
117
+ - `system:sales.crm`
118
+ - `integration:instantly`
119
+ - `resource:lead-import`
120
+ - `action:operations.queue.review`
121
+
122
+ ## Resource Descriptors
123
+
124
+ The OM Resources domain is governance-only. Descriptors declare canonical `id`, required `systemPath`, governance `status`, and optional role ownership. `DeploymentSpec` remains the runtime/deploy assembly around those descriptors, not a second resource identity catalog.
125
+
126
+ ## Resolution Semantics
127
+
128
+ - `defineOrganizationModel()` is a typed helper.
129
+ - `resolveOrganizationModel()` deep-merges a partial override into the default model, then validates it.
130
+ - `createFoundationOrganizationModel()` resolves the canonical model and returns UI-facing helper outputs.
131
+ - Plain objects merge recursively.
132
+ - Id-keyed domain maps merge additively by key.
133
+ - Arrays replace the default value.
134
+ - Missing fields fall back to `DEFAULT_ORGANIZATION_MODEL`.
135
+
136
+ ## Referential Integrity
137
+
138
+ - System IDs must be unique.
139
+ - Child System IDs require valid ancestors or `parentSystemId` links.
140
+ - Systems with UI provide `ui.path`.
141
+ - Systems, resources, roles, knowledge nodes, and goals must resolve their declared cross-references.
142
+
143
+ ## Practical Guidance
144
+
145
+ - Use `resolveOrganizationModel()` when you need a runtime-safe model.
146
+ - Use `defineOrganizationModel()` when authoring static overrides.
147
+ - Keep System IDs stable because shell routing, gating, breadcrumbs, and docs depend on them.
148
+ - Put resource identity and governance in `resources`; attach executable behavior in operations.