@elevasis/sdk 1.32.0 → 1.33.1

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 (30) hide show
  1. package/dist/cli.cjs +617 -376
  2. package/dist/index.d.ts +3 -4
  3. package/dist/index.js +15 -3
  4. package/dist/node/index.d.ts +1 -2
  5. package/dist/test-utils/index.d.ts +0 -1
  6. package/dist/test-utils/index.js +14 -2
  7. package/package.json +3 -3
  8. package/reference/claude-config/Overview.md +123 -0
  9. package/reference/claude-config/registries/skill-coverage.json +19 -0
  10. package/reference/claude-config/skills/client/SKILL.md +201 -0
  11. package/reference/claude-config/skills/elevasis/SKILL.md +244 -235
  12. package/reference/claude-config/skills/om/SKILL.md +56 -5
  13. package/reference/claude-config/skills/om/operations/features.md +12 -5
  14. package/reference/claude-config/skills/om/operations/scaffold.md +10 -0
  15. package/reference/claude-config/skills/setup/SKILL.md +9 -0
  16. package/reference/claude-config/sync-notes/2026-06-02-knowledge-nested-group-routing.md +27 -0
  17. package/reference/claude-config/sync-notes/2026-06-02-nest-projects-under-platform.md +45 -0
  18. package/reference/claude-config/sync-notes/2026-06-03-skill-autogen-and-client-skill.md +34 -0
  19. package/reference/claude-config/sync-notes/2026-06-04-scaffold-registry-lane-severity.md +34 -0
  20. package/reference/rules/agent-start-here.md +8 -2
  21. package/reference/rules/organization-os.md +11 -7
  22. package/reference/rules/package-taxonomy.md +4 -0
  23. package/reference/scaffold/core/organization-graph.mdx +9 -8
  24. package/reference/scaffold/operations/propagation-pipeline.md +13 -9
  25. package/reference/scaffold/operations/scaffold-maintenance.md +8 -7
  26. package/reference/scaffold/recipes/customize-knowledge-browser.md +23 -26
  27. package/reference/scaffold/reference/feature-registry.md +1 -1
  28. package/reference/scaffold/ui/composition-extensibility.mdx +1 -1
  29. package/reference/sdk/cli-management.mdx +2 -2
  30. package/reference/sdk/framework/agent.mdx +1 -1
@@ -0,0 +1,45 @@
1
+ # Nest `projects` under `platform` (fleet-wide OM reparent)
2
+
3
+ ## Why this note exists
4
+
5
+ The shared `@elevasis/ui` `deliveryManifest` now emits `systemId: 'platform.projects'` (it consumes the republished `@elevasis/core` constant `PROJECTS_SYSTEM_ID`, which flipped from `'projects'` to `'platform.projects'`). Any tenant Organization Model that still declares a **root-level** `projects` system will fail `validateManifests` on boot once it installs the new `@elevasis/ui`, because the delivery manifest references a `systemId` that does not exist in the tenant OM.
6
+
7
+ This is a fleet-wide convention change: `projects` is now a child of `platform` (canonical id `platform.projects`) everywhere — Elevasis, the template, and every derived tenant.
8
+
9
+ ## Applies to
10
+
11
+ - Every tenant whose `core/config/organization-model/` declares a root `projects` system (work-item / checkpoint shape) and a root `platform` system to nest it under.
12
+ - Confirmed in this train: `ZentaraHQ`, `nirvana-marketing`. Run the verification below in any other derived project before installing the new `@elevasis/ui`.
13
+
14
+ ## Required actions
15
+
16
+ Apply these in your own `core/config/organization-model/` (this is project-owned OM content — `/external sync` does NOT overwrite it; reparent it yourself via `/om`):
17
+
18
+ 1. **Reparent the system.** In `systems.ts`, move the `projects` system block under the existing `platform` system. Set `id: 'platform.projects'` and add `parentSystemId: 'platform'`. Leave the object key, route `path`, and icon as-is.
19
+ 2. **Rewrite ontology IDs.** Change every `projects:*` ontology id to `platform.projects:*` (objects, links, actions, catalogs, events, surfaces) — including all cross-references (`ownerSystemId`, `objectType`, `catalogType`, `from`/`to`).
20
+ 3. **Navigation.** In `navigation.ts`, update any `targets: { systems: ['projects'] }` to `['platform.projects']`.
21
+ 4. **Profile / roles.** In `profile.ts` (or `roles.ts`), update `deliveryFeatureId` / role `responsibleFor` references from `projects` to `platform.projects`.
22
+ 5. **Tests.** Update `core/config/organization-model.test.ts`, `organization-model.contract.test.ts`, and `ui/src/routes/__tests__/__root.test.tsx` assertions that reference the `projects` system id, parent, or ontology ids.
23
+ 6. **Install + reparent together.** Bump `@elevasis/core` and `@elevasis/ui` (see the dependency baseline written by `/external sync`), reparent the OM in the **same** change, then `pnpm -C core test` and `pnpm -C ui check-types` before booting the app. Do not install the new `@elevasis/ui` while the OM still has root `projects`.
24
+
25
+ Route file paths (`ui/src/routes/projects*.tsx`) stay at `/projects`; only OM ids and nav/profile targets change.
26
+
27
+ ## Verification
28
+
29
+ ```bash
30
+ # 1. Find any remaining root projects references
31
+ grep -rn "'projects'\|projects:" core/config/organization-model ui/src/routes
32
+
33
+ # 2. Template-family coherence
34
+ pnpm -C core test
35
+ pnpm -C ui check-types
36
+ pnpm -C ui test:contracts
37
+
38
+ # 3. Boot must not throw validateManifests (deliveryManifest systemId must resolve)
39
+ ```
40
+
41
+ `platform.projects` must resolve as a child System of `platform`, and the delivery surface must render under it.
42
+
43
+ ## Not handled by /git-sync
44
+
45
+ `/git-sync` and `/external sync` will deliver the new `@elevasis/core` + `@elevasis/ui` dependency baselines and this note, but they will **not** edit your `core/config/organization-model/` — tenant OM content is project-owned (`sync-preservation`). The reparent in steps 1-5 is manual per tenant. Installing the new `@elevasis/ui` without doing the reparent first will crash the app on boot.
@@ -0,0 +1,34 @@
1
+ # Skill autogen and `/client` skill
2
+
3
+ ## Why this note exists
4
+
5
+ This train adds the template `/client` skill, a generated `.claude/Overview.md` skill and bundled-rules inventory, `skill-coverage.json`, and capability-query guidance that points agents to `elevasis-sdk cli` as the live command surface.
6
+
7
+ It also ships new `@elevasis/sdk` CLI support for `skill:scaffold` and `skill:check-coverage`, and extends `elevasis-sdk check` so future CLI domains cannot land without either skill ownership or an explicit waiver.
8
+
9
+ ## Applies to
10
+
11
+ - Every template-derived project that carries `.claude/` skills from `external/_template`.
12
+ - Projects that use `elevasis-sdk check` as their local validation gate.
13
+ - Operators using Claude Code skills to discover or manage clients through the existing `client:*` CLI domain.
14
+
15
+ ## Required actions
16
+
17
+ 1. Run the prepared external sync so `.claude/skills/client/`, `.claude/Overview.md`, `.claude/registries/skill-coverage.json`, and the updated setup/elevasis skill guidance are copied from the template.
18
+ 2. Install the new `@elevasis/sdk` baseline in `operations/package.json` after the SDK publish stage.
19
+ 3. Run `pnpm -C operations exec elevasis-sdk check` in each project to verify skill coverage against the live CLI catalog.
20
+ 4. Use `elevasis-sdk cli` when answering "what can I do?" or auditing available CLI domains; do not rely on stale prose inventories.
21
+
22
+ ## Verification
23
+
24
+ ```bash
25
+ pnpm -C operations exec elevasis-sdk cli client
26
+ pnpm -C operations exec elevasis-sdk check
27
+ pnpm -C operations exec elevasis-sdk skill:check-coverage
28
+ ```
29
+
30
+ The project should contain `.claude/skills/client/SKILL.md`, `.claude/Overview.md`, and `.claude/registries/skill-coverage.json` after sync.
31
+
32
+ ## Not handled by /git-sync
33
+
34
+ `/git-sync` does not infer skill coverage or regenerate local command inventories. It can deliver the synced files, but maintainers still need to install the new SDK baseline and run the verification commands above. Project-owned `CLAUDE.md` content remains verify-only; the authoritative generated inventory is `.claude/Overview.md`.
@@ -0,0 +1,34 @@
1
+ # Scaffold registry lane severity annotations
2
+
3
+ ## Why this note exists
4
+
5
+ This train adds `sync_lane_severity` annotations to the scaffold registry schema and moves external sync lane-severity ownership from hardcoded script sets into registry metadata.
6
+
7
+ The change is intended to keep project sync behavior the same while making the registry the single edit point for paths that need critical manual-merge handling or optional-feature-selection treatment.
8
+
9
+ ## Applies to
10
+
11
+ - Template-derived projects that use `/external sync` or `pnpm sync:apply` from the Elevasis monorepo.
12
+ - Projects that receive `@elevasis/core` package-baseline updates through `core/package.json` or `operations/package.json`.
13
+ - Operators reviewing external-sync plans that mention critical manual-merge or optional-feature-selection paths.
14
+
15
+ ## Required actions
16
+
17
+ 1. Run the prepared external sync from the release train so this note reaches derived projects.
18
+ 2. After the `@elevasis/core` publish stage, install the prepared core package baseline in template-derived project package files.
19
+ 3. Review any sync plan lane labels against the registry entry metadata before widening a manifest or applying catch-up work.
20
+
21
+ No project-authored Organization Model content should be overwritten for this train.
22
+
23
+ ## Verification
24
+
25
+ ```bash
26
+ pnpm sync:verify
27
+ pnpm exec tsx scripts/external/sync-apply.ts --all --dry-run --manifest apps/docs/content/docs/in-progress/active-development/sdk-changes/ship/_external-sync-prep.json --strict-manifest
28
+ ```
29
+
30
+ The strict manifest dry-run should authorize only the prepared sync note and the core package-baseline cascades.
31
+
32
+ ## Not handled by /git-sync
33
+
34
+ `/git-sync` can deliver committed file changes, but it does not publish `@elevasis/core`, install package baselines, validate scaffold registry metadata, or enforce manifest-scoped external-sync write authorization.
@@ -65,7 +65,6 @@ Once project continuity is resolved (or confirmed irrelevant), the template is n
65
65
  - `operations/` -- Elevasis SDK resources deployed to the platform
66
66
  - `core/` -- runtime-agnostic shared contracts and organization model adaptation
67
67
  - `.claude/` -- local agent rules, skills, and hooks
68
- - `client-workspace/` -- optional separate knowledge workspace for richer team knowledge management
69
68
  - `node_modules/@elevasis/sdk/reference/scaffold/` -- SDK reference scaffold: canonical recipes, UI patterns, gating model, contracts, and glossary. Entry point: `index.mdx`.
70
69
 
71
70
  ## Discovery Order
@@ -157,7 +156,7 @@ Load first:
157
156
  - `node_modules/@elevasis/sdk/reference/scaffold/index.mdx` (scaffold index -- contracts, gating patterns, glossary)
158
157
  - `core/config/README.md`
159
158
  - `node_modules/@elevasis/sdk/reference/scaffold/reference/contracts.md`
160
- - typed feature/surface constants from `@elevasis/core/organization-model` -- `CRM_FEATURE_ID`, `LEAD_GEN_FEATURE_ID`, `PROJECTS_FEATURE_ID`, `OPERATIONS_FEATURE_ID`, `MONITORING_FEATURE_ID`, `SETTINGS_FEATURE_ID`, `SEO_FEATURE_ID`, `CRM_PIPELINE_SURFACE_ID`, `LEAD_GEN_LISTS_SURFACE_ID`, `PROJECTS_INDEX_SURFACE_ID`, `OPERATIONS_ORGANIZATION_GRAPH_SURFACE_ID`. Use these typed constants instead of magic strings when overriding feature/surface IDs.
159
+ - typed feature/surface constants from `@elevasis/core/organization-model` -- `SALES_FEATURE_ID`, `PROSPECTING_FEATURE_ID`, `PROJECTS_FEATURE_ID`, `OPERATIONS_FEATURE_ID`, `MONITORING_FEATURE_ID`, `SETTINGS_FEATURE_ID`, `SEO_FEATURE_ID`, `SALES_PIPELINE_SURFACE_ID`, `PROSPECTING_LISTS_SURFACE_ID`, `PROJECTS_INDEX_SURFACE_ID`, `OPERATIONS_COMMAND_VIEW_SURFACE_ID`. Use these typed constants instead of magic strings when overriding feature/surface IDs.
161
160
  - `node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-crm.md` -- CRM is an Organization OS + UI + hooks + workflow-adapter surface; read this before extending CRM structure.
162
161
  - `node_modules/@elevasis/sdk/reference/scaffold/recipes/extend-lead-gen.md` -- lead gen is an Organization OS + UI + hooks + workflow-adapter surface; read this before extending lead-gen lists, members, artifacts, or state transitions.
163
162
  - `node_modules/@elevasis/sdk/reference/scaffold/recipes/customize-crm-actions.md` -- CRM action buttons are not `sales.actions` org-model config in v1; use the recipe's provider/custom-button path.
@@ -269,6 +268,13 @@ If a hand-authored doc conflicts with source or published package docs, trust so
269
268
  - Do not trust stable docs blindly when `.claude/rules/active-change-index.md` flags related in-progress architecture work.
270
269
  - Do not write `resume_context` into task-doc frontmatter. DB is canonical; write via `project:task:save` or the inline editor in Command Center.
271
270
 
271
+ ## Capability Surface
272
+
273
+ When a user asks what skills or commands are available, do NOT answer from recollection.
274
+
275
+ - **Skill inventory:** Read `.claude/Overview.md` — it is the authoritative list of skills available in this project.
276
+ - **Live CLI capability:** Run `pnpm elevasis-sdk cli` — it outputs every command and domain currently registered in the SDK, grouped by domain.
277
+
272
278
  ## Operations-Only Projects
273
279
 
274
280
  Some projects derived from this template are operations-only. They have `operations/` (or a top-level `src/`) but NO `ui/`, NO `core/config/organization-model.ts`, and NO frontend. Finding none of these is not missing scaffolding -- it is by design.
@@ -1,6 +1,10 @@
1
+ ---
2
+ description: Organization OS orientation -- the semantic contract layer relating Systems, Actions, ontology, resources, policies, roles, goals, and knowledge; consumed via published @elevasis/core / @elevasis/sdk
3
+ ---
1
4
  <!-- @generated by packages/sdk/scripts/copy-reference-docs.mjs -- DO NOT EDIT -->
2
5
  <!-- Regenerate: pnpm scaffold:sync -->
3
6
 
7
+
4
8
  # Organization OS
5
9
 
6
10
  Organization OS is the semantic contract layer defining how organizations, Systems, Actions, ontology, resources, policies, roles, goals, knowledge, and runtime surfaces relate. This project consumes Organization OS through published `@elevasis/core` / `@elevasis/sdk` configuration and does not maintain the monorepo schema.
@@ -38,11 +42,11 @@ Do not confuse `System.apiInterface` with ontology `interface` records. Ontology
38
42
 
39
43
  Some legacy UI feature constants and consumer-facing route keys are intentionally unchanged for compatibility:
40
44
 
41
- | Old field | New field | Legacy key (unchanged) | UI constant (unchanged) |
42
- | ---------- | ------------- | ---------------------- | ----------------------- |
43
- | `crm` | `sales` | `'crm'` | `CRM_FEATURE_ID` |
44
- | `leadGen` | `prospecting` | `'lead-gen'` | `LEAD_GEN_FEATURE_ID` |
45
- | `delivery` | `projects` | `'projects'` | `PROJECTS_FEATURE_ID` |
45
+ | Old field | New field | Legacy key (unchanged) | Published constant |
46
+ | ---------- | ------------- | ---------------------- | ------------------------ |
47
+ | `crm` | `sales` | `'crm'` | `SALES_FEATURE_ID` |
48
+ | `leadGen` | `prospecting` | `'lead-gen'` | `PROSPECTING_FEATURE_ID` |
49
+ | `delivery` | `projects` | `'projects'` | `PROJECTS_FEATURE_ID` |
46
50
 
47
51
  ## Reference Documentation
48
52
 
@@ -79,8 +83,8 @@ All paths under `node_modules/@elevasis/sdk/reference/scaffold/`:
79
83
  ## Published Subpaths and Constants
80
84
 
81
85
  - `@elevasis/core/organization-model` -- the curated organization-model barrel. Exports `defineOrganizationModel`, `resolveOrganizationModel`, `OrganizationModelSchema`, `DEFAULT_ORGANIZATION_MODEL`, organization-model types, and typed System/Action plus legacy UI feature/surface constants.
82
- - Legacy UI feature IDs: `CRM_FEATURE_ID`, `LEAD_GEN_FEATURE_ID`, `PROJECTS_FEATURE_ID`, `OPERATIONS_FEATURE_ID`, `MONITORING_FEATURE_ID`, `SETTINGS_FEATURE_ID`, `SEO_FEATURE_ID`
83
- - Headline surface IDs: `CRM_PIPELINE_SURFACE_ID`, `LEAD_GEN_LISTS_SURFACE_ID`, `PROJECTS_INDEX_SURFACE_ID`, `OPERATIONS_ORGANIZATION_GRAPH_SURFACE_ID`
86
+ - Feature IDs: `SALES_FEATURE_ID`, `PROSPECTING_FEATURE_ID`, `PROJECTS_FEATURE_ID`, `OPERATIONS_FEATURE_ID`, `MONITORING_FEATURE_ID`, `SETTINGS_FEATURE_ID`, `SEO_FEATURE_ID`
87
+ - Headline surface IDs: `SALES_PIPELINE_SURFACE_ID`, `PROSPECTING_LISTS_SURFACE_ID`, `PROJECTS_INDEX_SURFACE_ID`, `OPERATIONS_COMMAND_VIEW_SURFACE_ID`
84
88
  - Reality domain types: `OrganizationModelIdentity`, `OrganizationModelCustomers`, `OrganizationModelCustomerSegment`, `OrganizationModelOfferings`, `OrganizationModelProduct`, `OrganizationModelRoles`, `OrganizationModelRole`, `OrganizationModelGoals`, `OrganizationModelObjective`, `OrganizationModelKeyResult`
85
89
  - TechStack: `TechStackEntrySchema`, `OrganizationModelTechStackEntry`
86
90
  - Use constants instead of magic strings when overriding the org model.
@@ -1,6 +1,10 @@
1
+ ---
2
+ description: Package taxonomy (consumer view) -- external projects consume the published @elevasis/* surface only; workspace-internal @repo/elevasis-* packages are not installable here
3
+ ---
1
4
  <!-- @generated by packages/sdk/scripts/copy-reference-docs.mjs -- DO NOT EDIT -->
2
5
  <!-- Regenerate: pnpm scaffold:sync -->
3
6
 
7
+
4
8
  # Package Taxonomy (Consumer View)
5
9
 
6
10
  External projects consume the **published `@elevasis/*` surface only**. The Elevasis monorepo also has workspace-internal `@repo/elevasis-*` packages — those are NOT installable here and should never appear in your imports or `package.json`.
@@ -46,17 +46,18 @@ Edge kinds:
46
46
 
47
47
  - `contains`
48
48
  - `references`
49
- - `maps_to`
50
- - `uses`
51
- - `governs`
52
- - `governed-by`
53
- - `links`
54
- - `affects`
55
- - `emits`
49
+ - `maps_to`
50
+ - `uses`
51
+ - `governs`
52
+ - `links`
53
+ - `affects`
54
+ - `emits`
56
55
  - `originates_from`
57
56
  - `triggers`
58
57
  - `applies_to`
59
- - `effects`
58
+ - `effects`
59
+
60
+ `governed-by` is a Knowledge Graph route verb for traversing incoming `governs` edges; it is not an Organization Graph edge kind.
60
61
 
61
62
  System nodes come from the id-keyed `OrganizationModel.systems` map. Their graph IDs use `system:<id>`, such as `system:sales.crm`.
62
63
 
@@ -31,15 +31,19 @@ Layer 3: Sync Verification (pnpm sync:verify)
31
31
 
32
32
  ## Layer 1: Source Generation
33
33
 
34
- `pnpm scaffold:sync` is the meta-script that regenerates all derived documentation and validates the output. It chains three sub-scripts:
35
-
36
- | Script | Input | Output |
37
- | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
38
- | `generate-scaffold-contracts.js` | `packages/core/src/organization-model/types.ts`, `packages/ui/src/features/registry/types.ts`, `packages/core/src/platform/registry/types.ts` | `packages/core/src/reference/_generated/contracts.md` |
39
- | `generate-scaffold-feature-registry.js` | `packages/ui/src/features/registry/manifests.ts`, `packages/ui/src/features/*/manifest.ts` | `packages/ui/src/scaffold/_generated/feature-registry.md` |
40
- | `generate-reference-artifacts.js` | SDK manifest, navigation sources | `packages/sdk/reference/_reference-manifest.json`, `_navigation.md` |
41
-
42
- After generation, `validate-reference-artifacts.js` checks that the outputs are consistent. Exit 1 if drifted.
34
+ `pnpm scaffold:sync` is the meta-script that regenerates all derived documentation and validates the output. It chains seven sub-scripts:
35
+
36
+ | Script | Input | Output |
37
+ | ---------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
38
+ | `scaffold:generate` | Scaffold contract and feature-registry sources | `packages/core/src/reference/_generated/**`, `packages/ui/src/scaffold/_generated/feature-registry.md` |
39
+ | `knowledge:generate` | Elevasis core knowledge nodes and UI knowledge body sources | Generated knowledge nodes and UI knowledge bodies |
40
+ | `gen:sdk-catalog` | SDK catalog source definitions | SDK catalog artifacts |
41
+ | `gen:sdk-adapters` | SDK adapter definitions | SDK adapter artifacts |
42
+ | `copy-docs` | SDK docs, package-owned reference docs, scaffold docs, and `_template/.claude` config | `packages/sdk/reference/**` copied docs and scaffold reference bundle |
43
+ | `sdk-ref:generate` | SDK manifest and navigation sources | `packages/sdk/reference/_reference-manifest.json`, `packages/sdk/reference/_navigation.md` |
44
+ | `sdk-ref:check` | Generated SDK reference artifacts | Freshness validation for `packages/sdk/reference/_reference-manifest.json` and `_navigation.md` |
45
+
46
+ The final `sdk-ref:check` step validates that the reference artifacts are consistent. Exit 1 if drifted.
43
47
 
44
48
  ### Trigger Points
45
49
 
@@ -99,13 +99,14 @@ Generated files should never be edited manually. If the output is wrong, fix the
99
99
 
100
100
  ## SDK Build Pipeline (Reference Copy)
101
101
 
102
- `packages/sdk/scripts/copy-reference-docs.mjs` runs during `pnpm --filter @elevasis/sdk build` and has three phases:
103
-
104
- 1. **Phase 1:** Copies SDK public docs from `apps/docs/content/docs/sdk/` with link rewriting and MDX escape stripping
105
- 2. **Phase 2:** Copies package-owned reference docs declared in reference manifests
106
- 3. **Phase 3:** Copies scaffold docs from co-located package sources using the `SCAFFOLD_COPIES` map
107
-
108
- The output lands in `packages/sdk/reference/` which is included in the npm package's `files` array. External projects access it via `node_modules/@elevasis/sdk/reference/`.
102
+ `packages/sdk/scripts/copy-reference-docs.mjs` runs during `pnpm --filter @elevasis/sdk build` and has four phases:
103
+
104
+ 1. **Phase 1:** Copies SDK public docs from `apps/docs/content/docs/sdk/` with link rewriting and MDX escape stripping
105
+ 2. **Phase 2:** Copies package-owned reference docs declared in reference manifests
106
+ 3. **Phase 3:** Copies scaffold docs from co-located package sources using the `SCAFFOLD_COPIES` map
107
+ 4. **Phase 4:** Copies `external/_template/.claude` into `packages/sdk/reference/claude-config` for tenant-facing agent configuration
108
+
109
+ The output lands in `packages/sdk/reference/` which is included in the npm package's `files` array. External projects access it via `node_modules/@elevasis/sdk/reference/`.
109
110
 
110
111
  ---
111
112
 
@@ -321,44 +321,42 @@ The sidebar (managed by the manifest) continues to operate normally. Tree clicks
321
321
 
322
322
  **Own everything:** Skip `knowledgeManifest` and build your own route tree as described in the Replace section above. Call `@elevasis/core/knowledge` directly for data and supply your own dispatcher.
323
323
 
324
- ### Overriding Per-Kind Views (extend the dispatcher's switch)
324
+ ### Overriding Per-Kind Views
325
325
 
326
- If you want the default dispatcher behavior for most kinds but need a custom layout for one kind, extend the exported `DescribeNodeView` rather than replacing it entirely. Phase 1.5 exports `createDescribeNodeDispatcher` for this purpose:
326
+ If you want the default dispatcher behavior for most kinds but need a custom layout for one kind, wrap the exported `DescribeNodeView` and intercept the specific kind before falling back to the platform dispatcher:
327
327
 
328
328
  ```tsx
329
- import {
330
- createDescribeNodeDispatcher,
331
- SystemDescribeView,
332
- } from '@elevasis/ui/knowledge'
329
+ import { DescribeNodeView, SystemDescribeView } from '@elevasis/ui/knowledge'
330
+ import type { DescribeNodeViewProps } from '@elevasis/ui/knowledge'
333
331
 
334
- // Supply overrides for specific kinds; all others fall through to platform defaults.
335
- const MyDescribeNodeView = createDescribeNodeDispatcher({
336
- system: ({ node, graph, onNavigateToNode }) => (
337
- // Project-specific System view with extra metadata section.
338
- <MyFeatureDetailView node={node} graph={graph} onNavigateToNode={onNavigateToNode} />
339
- ),
340
- // 'knowledge', 'resource', 'organization', and the default fallback
341
- // are handled by the platform unless you override them here.
342
- })
343
- ```
332
+ function MyDescribeNodeView(props: DescribeNodeViewProps) {
333
+ if (props.node.kind === 'system') {
334
+ return <MyFeatureDetailView node={props.node} graph={props.graph} onNavigateToNode={props.onNavigateToNode} />
335
+ }
344
336
 
345
- `createDescribeNodeDispatcher` returns a component with the same props interface as `DescribeNodeView` (`node`, `graph`, `onNavigateToNode`). You can drop it anywhere the default dispatcher is used.
337
+ return <DescribeNodeView {...props} />
338
+ }
339
+ ```
346
340
 
347
- Override keys match `OrgGraphNodeKind` values: `'knowledge'`, `'feature'`, `'resource'`, `'organization'`, `'surface'`, `'entity'`, `'action'`. The `default` key overrides the generic fallback for unknown kinds.
341
+ `MyDescribeNodeView` has the same props interface as `DescribeNodeView` (`node`, `graph`, `onNavigateToNode`, plus optional context props). You can drop it anywhere the default dispatcher is used.
348
342
 
349
- Each override function receives `{ node, graph, onNavigateToNode }` and must return a `ReactNode`. The platform kind-specific components (`KnowledgeNodeView`, `SystemDescribeView`, etc.) are all exported from `@elevasis/ui/knowledge` so you can compose them inside your override rather than replacing them from scratch:
343
+ The platform kind-specific components (`KnowledgeNodeView`, `SystemDescribeView`, etc.) are exported from `@elevasis/ui/knowledge` so you can compose them inside your wrapper rather than replacing them from scratch:
350
344
 
351
345
  ```tsx
352
- const MyDescribeNodeView = createDescribeNodeDispatcher({
353
- system: ({ node, graph, onNavigateToNode }) => (
346
+ function MyDescribeNodeView(props: DescribeNodeViewProps) {
347
+ if (props.node.kind === 'system') {
348
+ return (
354
349
  <>
355
350
  {/* Platform view for the standard fields */}
356
- <SystemDescribeView node={node} graph={graph} onNavigateToNode={onNavigateToNode} />
351
+ <SystemDescribeView {...props} />
357
352
  {/* Project-specific extension panel below */}
358
- <MySystemAuditPanel systemId={node.id} />
353
+ <MySystemAuditPanel systemId={props.node.id} />
359
354
  </>
360
- ),
361
- })
355
+ )
356
+ }
357
+
358
+ return <DescribeNodeView {...props} />
359
+ }
362
360
  ```
363
361
 
364
362
  ### Phase 1.5 Exports Reference
@@ -368,7 +366,6 @@ The following exports are added in Phase 1.5 on top of the exports table above:
368
366
  | Export | Package | Purpose |
369
367
  | ------------------------------ | ------------------------ | ---------------------------------------------------------------------------- |
370
368
  | `DescribeNodeView` | `@elevasis/ui/knowledge` | Default graph-node dispatcher; routes by `node.kind` |
371
- | `createDescribeNodeDispatcher` | `@elevasis/ui/knowledge` | Factory for per-kind overrides; returns a `DescribeNodeView`-shape component |
372
369
  | `SystemDescribeView` | `@elevasis/ui/knowledge` | Minimal System node view: path, icon, lifecycle, hierarchy, edges |
373
370
  | `ResourceDescribeView` | `@elevasis/ui/knowledge` | Minimal resource node view: resourceType, description, edges |
374
371
  | `OrganizationDescribeView` | `@elevasis/ui/knowledge` | Minimal organization node view: label, edges |
@@ -15,7 +15,7 @@ description: Auto-generated catalog of registered system manifests. Do not edit
15
15
  | System Key | System ID | Nav Label | Domains | Routes |
16
16
  | --- | --- | --- | --- | --- |
17
17
  | `crm` | `sales.crm` | — | — | — |
18
- | `delivery` | `projects` | — | — | — |
18
+ | `delivery` | `platform.projects` | — | — | — |
19
19
  | `knowledge` | `—` | — | — | — |
20
20
  | `lead-gen` | `sales.lead-gen` | — | — | — |
21
21
  | `monitoring` | `—` | — | — | — |
@@ -226,7 +226,7 @@ See [recipes/customize-knowledge-browser.md](../recipes/customize-knowledge-brow
226
226
  Phase 1.5 adds two further extension surfaces documented in the same recipe file under the "Phase 1.5" section:
227
227
 
228
228
  - **Extending the SegmentedControl** -- supply a `segments` prop to `KnowledgeSidebarMiddle` to add custom mount-axis tabs beyond the default five (By Feature, By Kind, By Owner, Governs, Governed By).
229
- - **Replacing `DescribeNodeView`** -- override the `/knowledge/:nodeId` route component to swap the entire main-pane dispatcher, or use `createDescribeNodeDispatcher` from `@elevasis/ui/knowledge` to override only specific node-kind views while keeping the platform defaults for the rest.
229
+ - **Replacing `DescribeNodeView`** -- override the `/knowledge/:nodeId` route component to swap the entire main-pane dispatcher, or wrap `DescribeNodeView` from `@elevasis/ui/knowledge` to intercept specific node-kind views while falling back to the platform defaults for the rest.
230
230
 
231
231
  ## What Not to Do
232
232
 
@@ -14,8 +14,8 @@ This page covers the domain management commands for `elevasis-sdk`. For core SDK
14
14
  This CLI family is SDK-first, but it is not semantically standalone. It operates on the same Organization OS contract that the shared delivery UI uses:
15
15
 
16
16
  - UI manifest key: `delivery`
17
- - Organization model feature ID: `projects`
18
- - Default surface: `projects.index`
17
+ - Organization model System ID: `PROJECTS_SYSTEM_ID` (`platform.projects`)
18
+ - Default surface: `PROJECTS_INDEX_SURFACE_ID` (`platform.projects.index`)
19
19
  - Semantic domain fields: `organizationModel.delivery`
20
20
  - Core entity/capability IDs: `delivery.project`, `delivery.milestone`, `delivery.task`, `delivery.projects.view`
21
21
 
@@ -78,7 +78,7 @@ The following skills ship with every Elevasis SDK project and are committed to v
78
78
 
79
79
  **`/project`** -- Project-management routing for milestones, tasks, notes, and status. It should call the canonical `elevasis-sdk project:*` CLI surface rather than inventing a parallel workflow.
80
80
 
81
- That routing is interface-first, not a separate semantic model. `/project` should treat the SDK CLI as the operational entrypoint for the Organization OS delivery/projects contract: `deliveryManifest` in the shared UI, `featureId: 'projects'` in the organization model, and `organizationModel.delivery` for project/milestone/task status semantics.
81
+ That routing is interface-first, not a separate semantic model. `/project` should treat the SDK CLI as the operational entrypoint for the Organization OS delivery/projects contract: `deliveryManifest` in the shared UI, `PROJECTS_SYSTEM_ID` (`platform.projects`) in the organization model, and `organizationModel.delivery` for project/milestone/task status semantics.
82
82
 
83
83
  When these command families overlap conceptually, use this boundary:
84
84