@elevasis/core 0.24.1 → 0.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 (82) hide show
  1. package/dist/index.d.ts +239 -86
  2. package/dist/index.js +474 -1346
  3. package/dist/knowledge/index.d.ts +57 -39
  4. package/dist/knowledge/index.js +1 -1
  5. package/dist/organization-model/index.d.ts +239 -86
  6. package/dist/organization-model/index.js +474 -1346
  7. package/dist/test-utils/index.d.ts +24 -31
  8. package/dist/test-utils/index.js +76 -1238
  9. package/package.json +1 -1
  10. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +108 -96
  11. package/src/business/acquisition/api-schemas.test.ts +70 -77
  12. package/src/business/acquisition/api-schemas.ts +21 -42
  13. package/src/business/acquisition/derive-actions.test.ts +11 -21
  14. package/src/business/acquisition/derive-actions.ts +61 -14
  15. package/src/business/acquisition/ontology-validation.ts +4 -4
  16. package/src/business/acquisition/types.ts +7 -8
  17. package/src/execution/engine/llm/adapters/__tests__/openrouter.integration.test.ts +10 -10
  18. package/src/knowledge/__tests__/queries.test.ts +960 -546
  19. package/src/knowledge/format.ts +322 -100
  20. package/src/knowledge/index.ts +18 -5
  21. package/src/knowledge/queries.ts +1004 -240
  22. package/src/organization-model/__tests__/content-kinds-registry.test.ts +35 -210
  23. package/src/organization-model/__tests__/defaults.test.ts +4 -4
  24. package/src/organization-model/__tests__/deprecate-helpers.test.ts +71 -0
  25. package/src/organization-model/__tests__/domains/actions.test.ts +12 -36
  26. package/src/organization-model/__tests__/domains/offerings.test.ts +13 -6
  27. package/src/organization-model/__tests__/domains/resources.test.ts +497 -350
  28. package/src/organization-model/__tests__/domains/systems.test.ts +6 -7
  29. package/src/organization-model/__tests__/flatten-additive-merge.test.ts +68 -80
  30. package/src/organization-model/__tests__/foundation.test.ts +81 -14
  31. package/src/organization-model/__tests__/graph.test.ts +662 -694
  32. package/src/organization-model/__tests__/knowledge.test.ts +31 -17
  33. package/src/organization-model/__tests__/lookup-helpers.test.ts +128 -438
  34. package/src/organization-model/__tests__/migration-helpers.test.ts +362 -591
  35. package/src/organization-model/__tests__/prospecting-ssot.test.ts +68 -103
  36. package/src/organization-model/__tests__/published-zero-leak.test.ts +17 -0
  37. package/src/organization-model/__tests__/recursive-system-schema.test.ts +159 -532
  38. package/src/organization-model/__tests__/resolve.test.ts +88 -49
  39. package/src/organization-model/__tests__/scaffolders.test.ts +93 -0
  40. package/src/organization-model/__tests__/schema.test.ts +65 -56
  41. package/src/organization-model/catalogs/lead-gen.ts +0 -103
  42. package/src/organization-model/defaults.ts +17 -702
  43. package/src/organization-model/domains/actions.ts +116 -333
  44. package/src/organization-model/domains/knowledge.ts +15 -7
  45. package/src/organization-model/domains/projects.ts +4 -4
  46. package/src/organization-model/domains/prospecting.ts +405 -395
  47. package/src/organization-model/domains/resources.ts +206 -135
  48. package/src/organization-model/domains/sales.ts +5 -5
  49. package/src/organization-model/domains/systems.ts +8 -23
  50. package/src/organization-model/graph/build.ts +223 -294
  51. package/src/organization-model/graph/schema.ts +2 -3
  52. package/src/organization-model/graph/types.ts +12 -14
  53. package/src/organization-model/helpers.ts +120 -141
  54. package/src/organization-model/icons.ts +1 -0
  55. package/src/organization-model/index.ts +107 -126
  56. package/src/organization-model/migration-helpers.ts +211 -249
  57. package/src/organization-model/ontology.ts +0 -60
  58. package/src/organization-model/organization-graph.mdx +4 -5
  59. package/src/organization-model/organization-model.mdx +1 -1
  60. package/src/organization-model/published.ts +251 -228
  61. package/src/organization-model/resolve.ts +4 -5
  62. package/src/organization-model/scaffolders/helpers.ts +84 -0
  63. package/src/organization-model/scaffolders/index.ts +19 -0
  64. package/src/organization-model/scaffolders/scaffoldKnowledgeNode.ts +48 -0
  65. package/src/organization-model/scaffolders/scaffoldOntologyRecord.ts +38 -0
  66. package/src/organization-model/scaffolders/scaffoldResource.ts +59 -0
  67. package/src/organization-model/scaffolders/scaffoldSystem.ts +110 -0
  68. package/src/organization-model/scaffolders/types.ts +81 -0
  69. package/src/organization-model/schema.ts +610 -704
  70. package/src/organization-model/types.ts +167 -161
  71. package/src/platform/constants/versions.ts +1 -1
  72. package/src/platform/registry/__tests__/validation.test.ts +23 -0
  73. package/src/platform/registry/validation.ts +13 -2
  74. package/src/reference/_generated/contracts.md +108 -96
  75. package/src/reference/glossary.md +71 -69
  76. package/src/organization-model/content-kinds/config.ts +0 -36
  77. package/src/organization-model/content-kinds/index.ts +0 -78
  78. package/src/organization-model/content-kinds/pipeline.ts +0 -68
  79. package/src/organization-model/content-kinds/registry.ts +0 -44
  80. package/src/organization-model/content-kinds/status.ts +0 -71
  81. package/src/organization-model/content-kinds/template.ts +0 -83
  82. package/src/organization-model/content-kinds/types.ts +0 -117
@@ -306,7 +306,7 @@ export type OrganizationModelSystemLifecycle = z.infer<typeof SystemLifecycleSch
306
306
  ### `OrganizationModelSystemStatus`
307
307
 
308
308
  ```typescript
309
- /** @deprecated Use OrganizationModelSystemLifecycle. Accepted for one publish cycle. */
309
+ /** @deprecated Use OrganizationModelSystemLifecycle. Accepted for one publish cycle. */
310
310
  export type OrganizationModelSystemStatus = z.infer<typeof SystemStatusSchema>
311
311
  ```
312
312
 
@@ -376,6 +376,18 @@ export type OrganizationModelResourceGovernanceStatus = z.infer<typeof ResourceG
376
376
  export type OrganizationModelResourceOntologyBinding = z.infer<typeof ResourceOntologyBindingSchema>
377
377
  ```
378
378
 
379
+ ### `OrganizationModelContractRef`
380
+
381
+ ```typescript
382
+ export type OrganizationModelContractRef = z.infer<typeof ContractRefSchema>
383
+ ```
384
+
385
+ ### `OrganizationModelResourceOntologyBindingContract`
386
+
387
+ ```typescript
388
+ export type OrganizationModelResourceOntologyBindingContract = ResourceOntologyBindingContract
389
+ ```
390
+
379
391
  ### `OrganizationModelAgentKind`
380
392
 
381
393
  ```typescript
@@ -625,7 +637,7 @@ export type OrganizationModelBuiltinIconToken = z.infer<typeof OrganizationModel
625
637
  ### `DeepPartial`
626
638
 
627
639
  ```typescript
628
- export type DeepPartial<T> =
640
+ export type DeepPartial<T> =
629
641
  T extends Array<infer U> ? Array<DeepPartial<U>> : T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T
630
642
  ```
631
643
 
@@ -634,8 +646,8 @@ export type DeepPartial<T> =
634
646
  ### `ElevasisOrganizationModel`
635
647
 
636
648
  ```typescript
637
- export type ElevasisOrganizationModel = Omit<OrganizationModel, 'knowledge'> & {
638
- knowledge?: OrganizationModel['knowledge']
649
+ export type ElevasisOrganizationModel = Omit<OrganizationModel, 'knowledge'> & {
650
+ knowledge?: OrganizationModel['knowledge']
639
651
  }
640
652
  ```
641
653
 
@@ -660,107 +672,107 @@ export type SystemSidebarWidthResolver = number | ((context: { currentPath: stri
660
672
  ### `SystemModule`
661
673
 
662
674
  ```typescript
663
- export interface SystemModule {
664
- /** Unique stable identifier for this UI system module. */
665
- key: string
666
- /** Organization Model system id this module presents. Omit for navigation-only app surfaces. */
667
- systemId?: string
668
- /** Route prefixes owned by navigation-only app surfaces. */
669
- routePrefixes?: string[]
670
- /** Capability identifiers contributed by this system module. */
671
- capabilityIds?: string[]
672
- /** Icon used when this system node appears in shell navigation. */
673
- icon?: SystemIconComponent
674
- /** Sidebar component rendered when this system's subtree route is active. */
675
- sidebar?: SystemSidebarComponent
676
- /** Optional shell sidebar width override. Defaults to 250px. */
677
- sidebarWidth?: SystemSidebarWidthResolver
678
- /** Operations-only bridge connecting this system to the organization graph node. */
679
- organizationGraph?: OrganizationGraphSystemBridge
675
+ export interface SystemModule {
676
+ /** Unique stable identifier for this UI system module. */
677
+ key: string
678
+ /** Organization Model system id this module presents. Omit for navigation-only app surfaces. */
679
+ systemId?: string
680
+ /** Route prefixes owned by navigation-only app surfaces. */
681
+ routePrefixes?: string[]
682
+ /** Capability identifiers contributed by this system module. */
683
+ capabilityIds?: string[]
684
+ /** Icon used when this system node appears in shell navigation. */
685
+ icon?: SystemIconComponent
686
+ /** Sidebar component rendered when this system's subtree route is active. */
687
+ sidebar?: SystemSidebarComponent
688
+ /** Optional shell sidebar width override. Defaults to 250px. */
689
+ sidebarWidth?: SystemSidebarWidthResolver
690
+ /** Operations-only bridge connecting this system to the organization graph node. */
691
+ organizationGraph?: OrganizationGraphSystemBridge
680
692
  }
681
693
  ```
682
694
 
683
695
  ### `ResolvedSystemAccess`
684
696
 
685
697
  ```typescript
686
- export interface ResolvedSystemAccess {
687
- featureKey: string
688
- systemId?: string
689
- enabled: boolean
698
+ export interface ResolvedSystemAccess {
699
+ systemKey: string
700
+ systemId?: string
701
+ enabled: boolean
690
702
  }
691
703
  ```
692
704
 
693
705
  ### `ResolvedSystemSemantics`
694
706
 
695
707
  ```typescript
696
- export interface ResolvedSystemSemantics {
697
- capabilityIds: string[]
708
+ export interface ResolvedSystemSemantics {
709
+ capabilityIds: string[]
698
710
  }
699
711
  ```
700
712
 
701
713
  ### `ResolvedSystemModule`
702
714
 
703
715
  ```typescript
704
- export interface ResolvedSystemModule extends SystemModule {
705
- access: ResolvedSystemAccess
706
- semantics: ResolvedSystemSemantics
716
+ export interface ResolvedSystemModule extends SystemModule {
717
+ access: ResolvedSystemAccess
718
+ semantics: ResolvedSystemSemantics
707
719
  }
708
720
  ```
709
721
 
710
722
  ### `ResolvedShellSystem`
711
723
 
712
724
  ```typescript
713
- export type ResolvedShellSystem = OrganizationModelSystemEntry & {
714
- label: string
715
- iconComponent?: SystemIconComponent
725
+ export type ResolvedShellSystem = OrganizationModelSystemEntry & {
726
+ label: string
727
+ iconComponent?: SystemIconComponent
716
728
  }
717
729
  ```
718
730
 
719
731
  ### `ResolvedShellModel`
720
732
 
721
733
  ```typescript
722
- export interface ResolvedShellModel {
723
- systems: readonly ResolvedShellSystem[]
724
- findByPath: (path: string) => ResolvedShellSystem | undefined
725
- findById: (id: string) => ResolvedShellSystem | undefined
726
- childrenOf: (id: string) => ResolvedShellSystem[]
727
- ancestorsOf: (id: string) => ResolvedShellSystem[]
728
- parentOf: (id: string) => ResolvedShellSystem | undefined
729
- topLevel: () => ResolvedShellSystem[]
730
- requiresAdminFor: (id: string) => boolean
731
- devOnlyFor: (id: string) => boolean
734
+ export interface ResolvedShellModel {
735
+ systems: readonly ResolvedShellSystem[]
736
+ findByPath: (path: string) => ResolvedShellSystem | undefined
737
+ findById: (id: string) => ResolvedShellSystem | undefined
738
+ childrenOf: (id: string) => ResolvedShellSystem[]
739
+ ancestorsOf: (id: string) => ResolvedShellSystem[]
740
+ parentOf: (id: string) => ResolvedShellSystem | undefined
741
+ topLevel: () => ResolvedShellSystem[]
742
+ requiresAdminFor: (id: string) => boolean
743
+ devOnlyFor: (id: string) => boolean
732
744
  }
733
745
  ```
734
746
 
735
747
  ### `ShellSidebarLinkItem`
736
748
 
737
749
  ```typescript
738
- export interface ShellSidebarLinkItem {
739
- label: string
740
- link: string
741
- exact?: boolean
742
- activeMatchPaths?: string[]
750
+ export interface ShellSidebarLinkItem {
751
+ label: string
752
+ link: string
753
+ exact?: boolean
754
+ activeMatchPaths?: string[]
743
755
  }
744
756
  ```
745
757
 
746
758
  ### `ShellSidebarLinkGroup`
747
759
 
748
760
  ```typescript
749
- export interface ShellSidebarLinkGroup {
750
- icon: SystemIconComponent
751
- label: string
752
- links?: ShellSidebarLinkItem[]
753
- link?: string
761
+ export interface ShellSidebarLinkGroup {
762
+ icon: SystemIconComponent
763
+ label: string
764
+ links?: ShellSidebarLinkItem[]
765
+ link?: string
754
766
  }
755
767
  ```
756
768
 
757
769
  ### `ShellSidebarProjectionOptions`
758
770
 
759
771
  ```typescript
760
- export interface ShellSidebarProjectionOptions {
761
- isPlatformAdmin?: boolean
762
- isDev?: boolean
763
- section?: 'primary' | 'bottom'
772
+ export interface ShellSidebarProjectionOptions {
773
+ isPlatformAdmin?: boolean
774
+ isDev?: boolean
775
+ section?: 'primary' | 'bottom'
764
776
  }
765
777
  ```
766
778
 
@@ -773,75 +785,75 @@ export type ShellRouteMatchStatus = 'matched' | 'hidden' | 'unmatched'
773
785
  ### `ResolvedShellRouteMatch`
774
786
 
775
787
  ```typescript
776
- export interface ResolvedShellRouteMatch {
777
- status: ShellRouteMatchStatus
778
- path: string
779
- system?: ResolvedSystemModule
780
- node?: ResolvedShellSystem
788
+ export interface ResolvedShellRouteMatch {
789
+ status: ShellRouteMatchStatus
790
+ path: string
791
+ system?: ResolvedSystemModule
792
+ node?: ResolvedShellSystem
781
793
  }
782
794
  ```
783
795
 
784
796
  ### `ShellRuntime`
785
797
 
786
798
  ```typescript
787
- export interface ShellRuntime {
788
- resolveRoute: (path: string) => ResolvedShellRouteMatch
799
+ export interface ShellRuntime {
800
+ resolveRoute: (path: string) => ResolvedShellRouteMatch
789
801
  }
790
802
  ```
791
803
 
792
804
  ### `OrganizationGraphSystemBridge`
793
805
 
794
806
  ```typescript
795
- export interface OrganizationGraphSystemBridge {
796
- systemId?: string
807
+ export interface OrganizationGraphSystemBridge {
808
+ systemId?: string
797
809
  }
798
810
  ```
799
811
 
800
812
  ### `OrganizationGraphContextValue`
801
813
 
802
814
  ```typescript
803
- export interface OrganizationGraphContextValue {
804
- available: boolean
805
- systemId?: string
806
- systemPath?: string
815
+ export interface OrganizationGraphContextValue {
816
+ available: boolean
817
+ systemId?: string
818
+ systemPath?: string
807
819
  }
808
820
  ```
809
821
 
810
822
  ### `ElevasisSystemsProviderProps`
811
823
 
812
824
  ```typescript
813
- export interface ElevasisSystemsProviderProps {
814
- systems?: SystemModule[]
815
- organizationModel?: ElevasisOrganizationModel
816
- timeRange?: TimeRange
817
- operationsApiUrl?: string
818
- operationsSSEManager?: SSEConnectionManagerLike
819
- deliveryApiUrl?: string
820
- deliverySSEManager?: SSEConnectionManagerLike
821
- disabledSubsectionPaths?: string[]
822
- children: ReactNode
825
+ export interface ElevasisSystemsProviderProps {
826
+ systems?: SystemModule[]
827
+ organizationModel?: ElevasisOrganizationModel
828
+ timeRange?: TimeRange
829
+ operationsApiUrl?: string
830
+ operationsSSEManager?: SSEConnectionManagerLike
831
+ deliveryApiUrl?: string
832
+ deliverySSEManager?: SSEConnectionManagerLike
833
+ disabledSubsectionPaths?: string[]
834
+ children: ReactNode
823
835
  }
824
836
  ```
825
837
 
826
838
  ### `ElevasisSystemsContextValue`
827
839
 
828
840
  ```typescript
829
- export interface ElevasisSystemsContextValue {
830
- shellModel: ResolvedShellModel
831
- shellRuntime: ShellRuntime
832
- getSidebarLinks: (options?: ShellSidebarProjectionOptions) => ShellSidebarLinkGroup[]
833
- enabledResolvedSystems: ResolvedSystemModule[]
834
- resolvedSystems: ResolvedSystemModule[]
835
- organizationGraph: OrganizationGraphContextValue
836
- organizationModel?: OrganizationModel
837
- timeRange?: TimeRange
838
- operationsApiUrl?: string
839
- operationsSSEManager?: SSEConnectionManagerLike
840
- deliveryApiUrl?: string
841
- deliverySSEManager?: SSEConnectionManagerLike
842
- disabledSubsectionPaths: string[]
843
- isSystemEnabled: (key: string) => boolean
844
- getResolvedSystem: (key: string) => ResolvedSystemModule | undefined
841
+ export interface ElevasisSystemsContextValue {
842
+ shellModel: ResolvedShellModel
843
+ shellRuntime: ShellRuntime
844
+ getSidebarLinks: (options?: ShellSidebarProjectionOptions) => ShellSidebarLinkGroup[]
845
+ enabledResolvedSystems: ResolvedSystemModule[]
846
+ resolvedSystems: ResolvedSystemModule[]
847
+ organizationGraph: OrganizationGraphContextValue
848
+ organizationModel?: OrganizationModel
849
+ timeRange?: TimeRange
850
+ operationsApiUrl?: string
851
+ operationsSSEManager?: SSEConnectionManagerLike
852
+ deliveryApiUrl?: string
853
+ deliverySSEManager?: SSEConnectionManagerLike
854
+ disabledSubsectionPaths: string[]
855
+ isSystemEnabled: (key: string) => boolean
856
+ getResolvedSystem: (key: string) => ResolvedSystemModule | undefined
845
857
  }
846
858
  ```
847
859
 
@@ -1,76 +1,78 @@
1
- ---
2
- title: Glossary
3
- description: Terminology disambiguation for Organization OS concepts used in the template scaffold, core package, and published packages.
4
- ---
5
-
6
- # Glossary
7
-
8
- ## Terms
9
-
10
- **AdminGuard** -- route-level admin wrapper from `@elevasis/ui/features/auth`. Must nest inside `ProtectedRoute`.
11
-
12
- **Contract** -- the publishable boundary a consumer depends on: Zod schemas, TypeScript types, provider props, resource definitions, or workflow I/O schemas.
13
-
14
- **DeploymentSpec** -- runtime/deploy assembly for one organization: workflows, agents, triggers, integrations, relationships, external resources, and human checkpoints. It assembles executable behavior around Organization Model resource descriptors; it is not the source of resource identity.
15
-
16
- **Feature** -- legacy or UI-package wording for a platform capability area. In the current Organization Model, use **System** for semantic ownership and **navigation surface** for shell placement. Keep "feature" only when referring to existing UI package folders, exported manifest names, or legacy compatibility recipes.
17
-
18
- **SystemGuard** -- route-level System gate from `@elevasis/ui/features/auth`.
19
-
1
+ ---
2
+ title: Glossary
3
+ description: Terminology disambiguation for Organization OS concepts used in the template scaffold, core package, and published packages.
4
+ ---
5
+
6
+ # Glossary
7
+
8
+ ## Terms
9
+
10
+ **AdminGuard** -- route-level admin wrapper from `@elevasis/ui/features/auth`. Must nest inside `ProtectedRoute`.
11
+
12
+ **Contract** -- the publishable boundary a consumer depends on: Zod schemas, TypeScript types, provider props, resource definitions, or workflow I/O schemas.
13
+
14
+ **DeploymentSpec** -- runtime/deploy assembly for one organization: workflows, agents, triggers, integrations, relationships, external resources, and human checkpoints. It assembles executable behavior around Organization Model resource descriptors; it is not the source of resource identity.
15
+
16
+ **Feature** -- legacy or UI-package wording for a platform capability area. In the current Organization Model, use **System** for semantic ownership and **navigation surface** for shell placement. Keep "feature" only when referring to existing UI package folders, exported manifest names, or legacy compatibility recipes.
17
+
18
+ **SystemGuard** -- route-level System gate from `@elevasis/ui/features/auth`.
19
+
20
20
  **SystemModule** -- manifest contract a shell module provides to `ElevasisSystemsProvider`. Key fields are `key`, optional `systemId`, optional `routePrefixes`, optional `capabilityIds`, optional `icon`, optional `sidebar`, and optional `sidebarWidth`. Graph bridge metadata is compatibility-only; new semantic bindings belong in the Organization Model System, ontology, navigation, and Resource descriptors.
21
-
22
- **systemId** -- the `SystemModule` field that points to an `OrganizationModel.systems` entry. Navigation-only app modules may omit it and use route prefixes/surface metadata instead.
23
-
24
- **Foundations** -- local adapter layer in external projects that exports `canonicalOrganizationModel`, `organizationModel`, and workflow I/O schemas.
25
-
26
- **Graph node ID** -- kind-prefixed cross-collection identifier such as `system:sales.crm`, `integration:instantly`, or `resource:lead-import`.
27
-
28
- **Manifest** -- a runtime declaration for a feature or resource collection.
29
-
21
+
22
+ **systemId** -- the `SystemModule` field that points to an `OrganizationModel.systems` entry. Navigation-only app modules may omit it and use route prefixes/surface metadata instead.
23
+
24
+ **systemId (resource — deprecated)** -- the legacy `resource.systemId` field on Organization Model resource descriptors. Removed from the target contract; the canonical attachment is **`resource.systemPath`** (dot-separated path resolved against the system tree). Some external templates still ship a `systemId` compatibility mirror while published `@elevasis/core` releases catch up; treat that field as legacy adapter data only and author new resource relationships against `systemPath`. Query with `getResourcesForSystem(model, path)`.
25
+
26
+ **Foundations** -- local adapter layer in external projects that exports `canonicalOrganizationModel`, `organizationModel`, and workflow I/O schemas.
27
+
28
+ **Graph node ID** -- kind-prefixed cross-collection identifier such as `system:sales.crm`, `integration:instantly`, or `resource:lead-import`.
29
+
30
+ **Manifest** -- a runtime declaration for a feature or resource collection.
31
+
30
32
  **MembershipFeatureConfig** -- legacy per-member feature override config. Current System visibility should be authored through Organization Model System lifecycle/access metadata and resolved through provider compatibility layers for older consumers.
31
-
33
+
32
34
  **OrganizationModel** -- top-level semantic contract for an organization. Current primary fields include `version`, `domainMetadata`, `branding`, `navigation`, `ontology`, `systems`, `resources`, `topology`, `identity`, `customers`, `offerings`, `roles`, `goals`, `policies`, `statuses`, and `knowledge`. Legacy domain keys such as `sales`, `prospecting`, `projects`, `actions`, and `entities` remain compatibility inputs while projects migrate to System-owned ontology/config/resource contracts.
33
-
35
+
34
36
  **OrganizationModelSystemEntry** -- System node in `OrganizationModel.systems`. Primary authoring fields include `id`, `label`, `description`, `parentSystemId`, `systems`, `lifecycle`, `ui`, `requiresAdmin`, `devOnly`, `responsibleRoleId`, `governedByKnowledge`, `drivesGoals`, `actions`, `policies`, `ontology`, `config`, and `order`. `subsystems` and `content` are retained compatibility inputs for older projects and should not be used for new recursive Systems, schemas, catalogs, or config.
35
-
36
- **Provider / ElevasisSystemsProvider** -- runtime that registers System modules, resolves System access against the org model, projects sidebar navigation, and exposes shell helpers through `useElevasisSystems()`.
37
-
38
- **Resource** -- governance-only descriptor in `OrganizationModel.resources` for a workflow, agent, integration, or script. Runtime code derives `resourceId` and kind from the descriptor, then attaches executable behavior in operations.
39
-
37
+
38
+ **Provider / ElevasisSystemsProvider** -- runtime that registers System modules, resolves System access against the org model, projects sidebar navigation, and exposes shell helpers through `useElevasisSystems()`.
39
+
40
+ **Resource** -- governance-only descriptor in `OrganizationModel.resources` for a workflow, agent, integration, or script. Runtime code derives `resourceId` and kind from the descriptor, then attaches executable behavior in operations.
41
+
40
42
  **Resource descriptor** -- OM entry with canonical `id`, required `systemPath`, descriptor `title` / `description`, governance `status`, optional role ownership, `codeRefs`, and nested `ontology` bindings for `actions`, optional `primaryAction`, read/write objects, used catalogs, and emitted events. Top-level `emits` remains a compatibility mirror for older descriptors.
41
-
43
+
42
44
  **System** -- tenant-defined bounded context in `OrganizationModel.systems` that groups operational resources and carries governance metadata such as responsible role, governing knowledge, driven goals, kind, lifecycle, System-local ontology, and System-local config.
43
-
44
- **ResourceCategory** -- resource metadata category: `production`, `diagnostic`, `internal`, or `testing`.
45
-
46
- **ResourceLink** -- graph binding on resource metadata: `{ nodeId, kind }`.
47
-
48
- **Settings asymmetry** -- Settings is a navigation/app surface whose individual pages are normally governed by admin checks rather than user-facing System toggles.
49
-
50
- **Shell model** -- provider output used by sidebars and breadcrumbs. Includes `systems`, `childrenOf`, `ancestorsOf`, `parentOf`, `topLevel`, `findByPath`, `requiresAdminFor`, and `devOnlyFor`.
51
-
52
- **Subshell / Sidebar** -- System- or route-prefix-scoped UI region rendered when the current route matches a module whose manifest supplies a sidebar.
53
-
45
+
46
+ **ResourceCategory** -- resource metadata category: `production`, `diagnostic`, `internal`, or `testing`.
47
+
48
+ **ResourceLink** -- graph binding on resource metadata: `{ nodeId, kind }`.
49
+
50
+ **Settings asymmetry** -- Settings is a navigation/app surface whose individual pages are normally governed by admin checks rather than user-facing System toggles.
51
+
52
+ **Shell model** -- provider output used by sidebars and breadcrumbs. Includes `systems`, `childrenOf`, `ancestorsOf`, `parentOf`, `topLevel`, `findByPath`, `requiresAdminFor`, and `devOnlyFor`.
53
+
54
+ **Subshell / Sidebar** -- System- or route-prefix-scoped UI region rendered when the current route matches a module whose manifest supplies a sidebar.
55
+
54
56
  **Topology** -- durable OM operational wiring declared in `OrganizationModel.topology.relationships`. Initial relationship kinds are `triggers`, `uses`, and `approval`; relationships use typed refs such as `{ kind: 'resource', id: 'lead-import' }`.
55
-
56
- ## Package Boundary
57
-
58
- **`@elevasis/core`**
59
-
60
- - `OrganizationModel`, `OrganizationModelSystemEntry`
61
- - `SystemEntry`, `ResourceEntry`
62
- - `resolveOrganizationModel`, `defineOrganizationModel`, `DEFAULT_ORGANIZATION_MODEL`
63
- - `MembershipFeatureConfig`
64
- - `DeploymentSpec`, `ResourceLink`, `ResourceCategory`
65
-
66
- **`@elevasis/ui`**
67
-
68
- - `SystemModule`
69
- - `SystemGuard`, `AdminGuard`, `ProtectedRoute`
70
- - `ElevasisSystemsProvider`, `ElevasisCoreProvider`, `useElevasisSystems`
71
-
72
- **External project source**
73
-
74
- - `canonicalOrganizationModel`
75
- - `organizationModel`
76
- - workflow I/O schemas
57
+
58
+ ## Package Boundary
59
+
60
+ **`@elevasis/core`**
61
+
62
+ - `OrganizationModel`, `OrganizationModelSystemEntry`
63
+ - `SystemEntry`, `ResourceEntry`
64
+ - `resolveOrganizationModel`, `defineOrganizationModel`, `DEFAULT_ORGANIZATION_MODEL`
65
+ - `MembershipFeatureConfig`
66
+ - `DeploymentSpec`, `ResourceLink`, `ResourceCategory`
67
+
68
+ **`@elevasis/ui`**
69
+
70
+ - `SystemModule`
71
+ - `SystemGuard`, `AdminGuard`, `ProtectedRoute`
72
+ - `ElevasisSystemsProvider`, `ElevasisCoreProvider`, `useElevasisSystems`
73
+
74
+ **External project source**
75
+
76
+ - `canonicalOrganizationModel`
77
+ - `organizationModel`
78
+ - workflow I/O schemas
@@ -1,36 +0,0 @@
1
- import { z } from 'zod'
2
- import { defineContentType } from './registry'
3
-
4
- // ---------------------------------------------------------------------------
5
- // config kinds (Phase 3, Wave 2A)
6
- // ---------------------------------------------------------------------------
7
- //
8
- // `config:kv` — a flat key-value configuration store co-located with a system.
9
- // Per L15: single starter config type; feature-flag semantics are
10
- // a usage pattern over kv, not a separate type.
11
- //
12
- // Per L15: `config` is a first-class registered meta-kind. Scope: NEW
13
- // tenant-defined settings co-located with a system. Strongly-typed platform
14
- // fields (system.ui.devOnly, system.ui.requiresAdmin, etc.) stay where they
15
- // are and are NOT hoisting destinations for existing typed fields.
16
-
17
- const ConfigKvPayloadSchema = z.object({
18
- /**
19
- * Flat key-value entries. Values are JSON primitives.
20
- * Keys are short identifiers (e.g. 'maxBatchSize', 'featureEnabled').
21
- */
22
- entries: z
23
- .record(z.string().trim().min(1).max(200), z.union([z.string(), z.number(), z.boolean(), z.null()]))
24
- .meta({ label: 'Entries', hint: 'Key-value configuration entries (string, number, boolean, or null values)' })
25
- })
26
-
27
- export type ConfigKvPayload = z.infer<typeof ConfigKvPayloadSchema>
28
-
29
- export const configKvKind = defineContentType({
30
- kind: 'config',
31
- type: 'kv',
32
- label: 'Key-Value Config',
33
- description: 'A flat key-value configuration store co-located with a system. Values are JSON primitives.',
34
- payloadSchema: ConfigKvPayloadSchema,
35
- parentTypes: []
36
- })
@@ -1,78 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // content-kinds barrel (Phase 3, Wave 2A)
3
- // ---------------------------------------------------------------------------
4
- //
5
- // Per D8 (locked): CONTENT_KIND_REGISTRY is populated via static import, not
6
- // side-effecting registration. This file is the single source of truth for
7
- // the populated registry. `registry.ts` exports the EMPTY registry constant
8
- // (kept for historical/import-chain reasons) — consumers MUST import from
9
- // this barrel, not from `registry.ts` directly, to get the populated registry.
10
- //
11
- // Registry keys follow the `<kind>:<type>` ContentTypeKey format (per L4, D8).
12
-
13
- export { defineContentType } from './registry'
14
- export type { ContentTypeKey, ContentTypeDefinition } from './types'
15
- export { ContentNodeBaseSchema, ContentNodeSchema, ExtensionNodeSchema } from './types'
16
- export type { ContentNodeBase, ContentNode, ExtensionNode } from './types'
17
-
18
- export { pipelineKind, stageKind } from './pipeline'
19
- export type { PipelinePayload, StagePayload } from './pipeline'
20
-
21
- export { templateKind, templateStepKind } from './template'
22
- export type { TemplatePayload, TemplateStepPayload } from './template'
23
-
24
- export { statusFlowKind, statusKind } from './status'
25
- export type { StatusFlowPayload, StatusPayload } from './status'
26
-
27
- export { configKvKind } from './config'
28
- export type { ConfigKvPayload } from './config'
29
-
30
- import { pipelineKind, stageKind } from './pipeline'
31
- import { templateKind, templateStepKind } from './template'
32
- import { statusFlowKind, statusKind } from './status'
33
- import { configKvKind } from './config'
34
- import type { ContentTypeDefinition, ContentTypeKey } from './types'
35
-
36
- /**
37
- * Compatibility registry for bridge-era System.content nodes.
38
- * New schema/catalog authoring should use System.ontology, and new
39
- * system-local settings should use System.config. These definitions remain so
40
- * old tenant content can parse, render, migrate, and project read-only.
41
- *
42
- * Per D8: static const object keyed by `'<kind>:<type>'` composite key.
43
- *
44
- * Bridge keys:
45
- * 'schema:pipeline' — projects to ontology catalog records
46
- * 'schema:stage' — projects to ontology catalog entries
47
- * 'schema:template' — projects to ontology/catalog or action metadata
48
- * 'schema:template-step' — projects to template metadata or catalog entries
49
- * 'schema:status-flow' — projects to ontology catalog records
50
- * 'schema:status' — projects to ontology catalog entries
51
- * 'config:kv' — projects into resolved System.config
52
- *
53
- * Wave 3A's `ContentNodeDescribeView` consumes `lookupContentType(kind, type)`
54
- * which indexes into this registry. Import `lookupContentType` from this barrel
55
- * to get the populated version.
56
- */
57
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
- export const CONTENT_KIND_REGISTRY: Readonly<Record<ContentTypeKey, ContentTypeDefinition<any>>> = {
59
- 'schema:pipeline': pipelineKind,
60
- 'schema:stage': stageKind,
61
- 'schema:template': templateKind,
62
- 'schema:template-step': templateStepKind,
63
- 'schema:status-flow': statusFlowKind,
64
- 'schema:status': statusKind,
65
- 'config:kv': configKvKind
66
- } as const
67
-
68
- /**
69
- * Look up a registered content-type definition by (kind, type).
70
- * Uses the populated CONTENT_KIND_REGISTRY from this barrel — wave 2A override
71
- * of the empty registry exported from registry.ts.
72
- * Returns `undefined` when the pair is not registered — per D2, this is not
73
- * an error; unregistered pairs render generically and skip payload validation.
74
- */
75
- export function lookupContentType(kind: string, type: string): ContentTypeDefinition | undefined {
76
- const key: ContentTypeKey = `${kind}:${type}`
77
- return CONTENT_KIND_REGISTRY[key]
78
- }
@@ -1,68 +0,0 @@
1
- import { z } from 'zod'
2
- import { defineContentType } from './registry'
3
-
4
- // ---------------------------------------------------------------------------
5
- // pipeline + stage kinds (Phase 3, Wave 2A)
6
- // ---------------------------------------------------------------------------
7
- //
8
- // `schema:pipeline` — a named pipeline that applies to an entity type.
9
- // `schema:stage` — a stage within a pipeline; parentTypes constrains it to
10
- // live under a `schema:pipeline` sibling.
11
- //
12
- // Per L19: `schema:stage` parents only under `schema:pipeline`.
13
- // Per L19 (parent kind constraint): both share the same meta-kind `schema`.
14
-
15
- const PipelinePayloadSchema = z.object({
16
- /**
17
- * Local NodeId of the entity this pipeline applies to (e.g. 'crm.deal').
18
- * `.meta({ ref: 'entity' })` enables SchemaDrivenFieldList to render a
19
- * clickable graph link to the referenced entity node.
20
- */
21
- entityId: z
22
- .string()
23
- .trim()
24
- .min(1)
25
- .max(200)
26
- .meta({ label: 'Entity', ref: 'entity', hint: 'The entity type this pipeline tracks' }),
27
- /**
28
- * Optional Kanban column color token for UI rendering.
29
- */
30
- kanbanColor: z.string().trim().min(1).max(40).optional().meta({ label: 'Kanban color', hint: 'UI color token' })
31
- })
32
-
33
- export type PipelinePayload = z.infer<typeof PipelinePayloadSchema>
34
-
35
- export const pipelineKind = defineContentType({
36
- kind: 'schema',
37
- type: 'pipeline',
38
- label: 'Pipeline',
39
- description: 'A named progression pipeline that applies to a specific entity type.',
40
- payloadSchema: PipelinePayloadSchema,
41
- parentTypes: []
42
- })
43
-
44
- // ---------------------------------------------------------------------------
45
-
46
- const StagePayloadSchema = z.object({
47
- /**
48
- * Semantic classification for this stage.
49
- * Drives color, icon, and CRM-priority logic in consuming views.
50
- * Optional — prospecting stages use data.entityKind instead.
51
- * Enum aligned with SalesStageSemanticClassSchema (sales.ts).
52
- */
53
- semanticClass: z
54
- .enum(['open', 'active', 'nurturing', 'closed_won', 'closed_lost', 'won', 'lost', 'closed'])
55
- .optional()
56
- .meta({ label: 'Semantic class', hint: 'Semantic meaning of this stage', color: 'blue' })
57
- })
58
-
59
- export type StagePayload = z.infer<typeof StagePayloadSchema>
60
-
61
- export const stageKind = defineContentType({
62
- kind: 'schema',
63
- type: 'stage',
64
- label: 'Stage',
65
- description: 'A stage within a pipeline. Must be parented under a schema:pipeline content node.',
66
- payloadSchema: StagePayloadSchema,
67
- parentTypes: ['schema:pipeline']
68
- })