@elevasis/sdk 1.32.0 → 1.33.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.
@@ -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`.
@@ -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`.
@@ -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