@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.
@@ -1,235 +1,244 @@
1
- ---
2
- name: elevasis
3
- description: Elevasis platform operations -- check, deploy, execute, inspect, and debug SDK resources
4
- ---
5
-
6
- # Elevasis Platform Operations
7
-
8
- Manage SDK resources in the `operations/` workspace via the `elevasis-sdk` CLI.
9
-
10
- **Usage:**
11
-
12
- - `/elevasis` -- Show available operations
13
- - `/elevasis check` -- Validate resource definitions
14
- - `/elevasis deploy [--prod]` -- Deploy resources
15
- - `/elevasis exec <resourceId> [--input '...']` -- Execute a resource
16
- - `/elevasis describe <resourceId>` -- Show resource schema
17
- - `/elevasis logs <resourceId>` -- View recent executions
18
- - `/elevasis creds` -- Manage credentials
19
-
20
- ## Critical Rules
21
-
22
- - **Always describe before exec** -- run `describe` first to see the exact input schema
23
- - **Use `-f` for complex inputs** -- write JSON to a temp file to avoid shell escaping issues
24
- - **Always `check` before `deploy`** -- catches schema and config errors early
25
-
26
- ## Environment
27
-
28
- The CLI authenticates via `ELEVASIS_PLATFORM_KEY` in the root `.env` file. The CLI walks up directories to find `.env`, so it works from both the project root and `operations/`.
29
-
30
- For dev vs prod targeting:
31
-
32
- - Default: production (`https://api.elevasis.io`)
33
- - `--prod` flag: explicitly targets production (overrides `NODE_ENV=development`)
34
- - `ELEVASIS_API_URL` env var: override to any custom URL
35
-
36
- ## Operations
37
-
38
- ### Check
39
-
40
- Validate all resource definitions (schemas, contracts, config):
41
-
42
- ```bash
43
- pnpm elevasis-sdk check
44
- ```
45
-
46
- Reports: resource count, validation errors, schema serialization warnings. Exit code 0 = pass.
47
-
48
- ### Deploy
49
-
50
- Bundle and deploy resources to the Elevasis platform.
51
-
52
- ```bash
53
- pnpm elevasis-sdk deploy [--prod]
54
- ```
55
-
56
- Replace `[--prod]` with `--prod` when targeting production.
57
-
58
- **Version bumping flags** (written back to `src/index.ts`):
59
-
60
- - `--major` -- bump major (1.0.0 to 2.0.0) for breaking contract changes
61
- - `--minor` -- bump minor (1.0.0 to 1.1.0) for new features
62
- - `--patch` -- bump patch (1.0.0 to 1.0.1) for fixes
63
-
64
- Deploy replaces the previous active deployment. Resources become executable immediately.
65
-
66
- ### Describe
67
-
68
- **Always run before executing.** Shows resource metadata, input/output schemas, and step chain:
69
-
70
- ```bash
71
- pnpm elevasis-sdk describe <resourceId>
72
-
73
- # JSON output for programmatic use
74
- pnpm elevasis-sdk describe <resourceId> --json
75
- ```
76
-
77
- Output includes: type, name, version, status, domains, input schema (required/optional fields with types), output schema, step definitions with entry point and routing.
78
-
79
- ### Execute
80
-
81
- Run a deployed resource. **Always `describe` first to see the input schema.**
82
-
83
- ```bash
84
- # Simple input (inline JSON)
85
- pnpm elevasis-sdk exec <resourceId> -i '{"key": "value"}'
86
-
87
- # Complex input (temp file -- PREFERRED for non-trivial payloads)
88
- # Write input to a temp file first, then reference it with -f
89
- pnpm elevasis-sdk exec <resourceId> -f .tmp-input.json
90
-
91
- # Async execution (for long-running workflows -- polls until complete)
92
- pnpm elevasis-sdk exec <resourceId> -f .tmp-input.json --async
93
- ```
94
-
95
- **When to use `-f` (file input):**
96
-
97
- - Input contains nested objects, arrays, or special characters
98
- - Input has quotes that conflict with shell escaping
99
- - Input is reused across multiple executions
100
- - Any time inline `-i` causes parsing errors
101
-
102
- **Temp file pattern:**
103
-
104
- 1. Write the JSON to a temp file inside the project (e.g., `operations/.tmp-input.json`)
105
- 2. Execute with `-f .tmp-input.json`
106
- 3. Delete the temp file after
107
-
108
- **Sync vs async:**
109
-
110
- - Sync (default): blocks until execution completes, shows result inline
111
- - Async (`--async`): returns execution ID immediately, polls every 3s with elapsed timer
112
- - Use `--async` for workflows that may exceed 30 seconds
113
-
114
- **Connection failure recovery:** If the connection drops during sync execution, the CLI automatically searches recent executions for a running one and resumes polling.
115
-
116
- ### List Resources
117
-
118
- View all deployed resources:
119
-
120
- ```bash
121
- pnpm elevasis-sdk resources
122
-
123
- # JSON output
124
- pnpm elevasis-sdk resources --json
125
- ```
126
-
127
- Shows: resource ID, type (workflow/agent), name, description, status.
128
-
129
- ### Execution History
130
-
131
- View past executions for a resource:
132
-
133
- ```bash
134
- # List recent executions (default: last 50)
135
- pnpm elevasis-sdk executions <resourceId>
136
-
137
- # Filter by status
138
- pnpm elevasis-sdk executions <resourceId> --status failed --limit 10
139
-
140
- # View specific execution (full detail with logs)
141
- pnpm elevasis-sdk execution <resourceId> <executionId>
142
-
143
- # Logs only (skip metadata)
144
- pnpm elevasis-sdk execution <resourceId> <executionId> --logs-only
145
-
146
- # Include input and result data
147
- pnpm elevasis-sdk execution <resourceId> <executionId> --input --result
148
- ```
149
-
150
- **`executions` flags:** `--limit <n>` (default 50), `--status running|completed|failed`, `--json`
151
-
152
- **`execution` flags:** `--logs-only`, `--input`, `--result`, `--json`
153
-
154
- Execution detail shows: status, start/end times, duration, input, result, error (if failed), and timestamped logs with level (ERROR/WARN/INFO/DEBUG).
155
-
156
- ### Deployments
157
-
158
- View deployment history:
159
-
160
- ```bash
161
- pnpm elevasis-sdk deployments
162
- ```
163
-
164
- Shows: deployment ID, SDK version, status (active/deploying/failed/stopped), created timestamp.
165
-
166
- ### Credentials
167
-
168
- Manage integration credentials (API keys, webhook secrets):
169
-
170
- ```bash
171
- # List credentials (metadata only, secrets not exposed)
172
- pnpm elevasis-sdk creds list
173
-
174
- # Create a credential
175
- pnpm elevasis-sdk creds create --name my-api-key --type api-key --value '{"apiKey":"sk-..."}'
176
-
177
- # Update a credential value
178
- pnpm elevasis-sdk creds update my-api-key --value '{"apiKey":"new-key"}'
179
-
180
- # Rename a credential
181
- pnpm elevasis-sdk creds rename old-name --to new-name
182
-
183
- # Delete a credential
184
- pnpm elevasis-sdk creds delete my-api-key --force
185
- ```
186
-
187
- Credential names: lowercase, digits, hyphens only (`^[a-z0-9]+(-[a-z0-9]+)*$`). Types: `api-key`, `webhook-secret`.
188
-
189
- ### Rename Resource
190
-
191
- Rename a resource ID across all platform tables:
192
-
193
- ```bash
194
- # Dry run (preview only)
195
- pnpm elevasis-sdk rename old-id --to new-id
196
-
197
- # Apply rename
198
- pnpm elevasis-sdk rename old-id --to new-id --execute
199
- ```
200
-
201
- Always dry-run first to see affected tables and row counts.
202
-
203
- ### Error Resolution
204
-
205
- Mark execution errors as resolved:
206
-
207
- ```bash
208
- # Resolve a specific error
209
- pnpm elevasis-sdk error resolve <errorId>
210
-
211
- # Resolve all errors for an execution
212
- pnpm elevasis-sdk error resolve-execution <executionId>
213
- ```
214
-
215
- ## Standard Workflow
216
-
217
- ```
218
- 1. Write/modify resources operations/src/
219
- 2. Type-check pnpm -C operations run check-types
220
- 3. Validate /elevasis check
221
- 4. Deploy /elevasis deploy --prod
222
- 5. Describe /elevasis describe <id>
223
- 6. Execute /elevasis exec <id> -f input.json
224
- 7. Inspect logs /elevasis logs <id>
225
- ```
226
-
227
- ## Debugging Checklist
228
-
229
- When an execution fails:
230
-
231
- 1. **Get the execution ID** from the exec output or `executions <resourceId> --status failed`
232
- 2. **Read the logs**: `execution <resourceId> <executionId> --logs-only`
233
- 3. **Check the input**: `execution <resourceId> <executionId> --input`
234
- 4. **Check the error**: `execution <resourceId> <executionId> --result`
235
- 5. **Fix the handler**, redeploy, re-execute
1
+ ---
2
+ name: elevasis
3
+ description: Elevasis platform operations -- check, deploy, execute, inspect, and debug SDK resources
4
+ ---
5
+
6
+ # Elevasis Platform Operations
7
+
8
+ Manage SDK resources in the `operations/` workspace via the `elevasis-sdk` CLI.
9
+
10
+ **Usage:**
11
+
12
+ - `/elevasis` -- Show available operations
13
+ - `/elevasis check` -- Validate resource definitions
14
+ - `/elevasis deploy [--prod]` -- Deploy resources
15
+ - `/elevasis exec <resourceId> [--input '...']` -- Execute a resource
16
+ - `/elevasis describe <resourceId>` -- Show resource schema
17
+ - `/elevasis logs <resourceId>` -- View recent executions
18
+ - `/elevasis creds` -- Manage credentials
19
+
20
+ ## Critical Rules
21
+
22
+ - **Always describe before exec** -- run `describe` first to see the exact input schema
23
+ - **Use `-f` for complex inputs** -- write JSON to a temp file to avoid shell escaping issues
24
+ - **Always `check` before `deploy`** -- catches schema and config errors early
25
+
26
+ ## Environment
27
+
28
+ The CLI authenticates via `ELEVASIS_PLATFORM_KEY` in the root `.env` file. The CLI walks up directories to find `.env`, so it works from both the project root and `operations/`.
29
+
30
+ For dev vs prod targeting:
31
+
32
+ - Default: production (`https://api.elevasis.io`)
33
+ - `--prod` flag: explicitly targets production (overrides `NODE_ENV=development`)
34
+ - `ELEVASIS_API_URL` env var: override to any custom URL
35
+
36
+ ## Operations
37
+
38
+ ### Check
39
+
40
+ Validate all resource definitions (schemas, contracts, config):
41
+
42
+ ```bash
43
+ pnpm elevasis-sdk check
44
+ ```
45
+
46
+ Reports: resource count, validation errors, schema serialization warnings. Exit code 0 = pass.
47
+
48
+ ### Deploy
49
+
50
+ Bundle and deploy resources to the Elevasis platform.
51
+
52
+ ```bash
53
+ pnpm elevasis-sdk deploy [--prod]
54
+ ```
55
+
56
+ Replace `[--prod]` with `--prod` when targeting production.
57
+
58
+ **Version bumping flags** (written back to `src/index.ts`):
59
+
60
+ - `--major` -- bump major (1.0.0 to 2.0.0) for breaking contract changes
61
+ - `--minor` -- bump minor (1.0.0 to 1.1.0) for new features
62
+ - `--patch` -- bump patch (1.0.0 to 1.0.1) for fixes
63
+
64
+ Deploy replaces the previous active deployment. Resources become executable immediately.
65
+
66
+ ### Describe
67
+
68
+ **Always run before executing.** Shows resource metadata, input/output schemas, and step chain:
69
+
70
+ ```bash
71
+ pnpm elevasis-sdk describe <resourceId>
72
+
73
+ # JSON output for programmatic use
74
+ pnpm elevasis-sdk describe <resourceId> --json
75
+ ```
76
+
77
+ Output includes: type, name, version, status, domains, input schema (required/optional fields with types), output schema, step definitions with entry point and routing.
78
+
79
+ ### Execute
80
+
81
+ Run a deployed resource. **Always `describe` first to see the input schema.**
82
+
83
+ ```bash
84
+ # Simple input (inline JSON)
85
+ pnpm elevasis-sdk exec <resourceId> -i '{"key": "value"}'
86
+
87
+ # Complex input (temp file -- PREFERRED for non-trivial payloads)
88
+ # Write input to a temp file first, then reference it with -f
89
+ pnpm elevasis-sdk exec <resourceId> -f .tmp-input.json
90
+
91
+ # Async execution (for long-running workflows -- polls until complete)
92
+ pnpm elevasis-sdk exec <resourceId> -f .tmp-input.json --async
93
+ ```
94
+
95
+ **When to use `-f` (file input):**
96
+
97
+ - Input contains nested objects, arrays, or special characters
98
+ - Input has quotes that conflict with shell escaping
99
+ - Input is reused across multiple executions
100
+ - Any time inline `-i` causes parsing errors
101
+
102
+ **Temp file pattern:**
103
+
104
+ 1. Write the JSON to a temp file inside the project (e.g., `operations/.tmp-input.json`)
105
+ 2. Execute with `-f .tmp-input.json`
106
+ 3. Delete the temp file after
107
+
108
+ **Sync vs async:**
109
+
110
+ - Sync (default): blocks until execution completes, shows result inline
111
+ - Async (`--async`): returns execution ID immediately, polls every 3s with elapsed timer
112
+ - Use `--async` for workflows that may exceed 30 seconds
113
+
114
+ **Connection failure recovery:** If the connection drops during sync execution, the CLI automatically searches recent executions for a running one and resumes polling.
115
+
116
+ ### List Resources
117
+
118
+ View all deployed resources:
119
+
120
+ ```bash
121
+ pnpm elevasis-sdk resources
122
+
123
+ # JSON output
124
+ pnpm elevasis-sdk resources --json
125
+ ```
126
+
127
+ Shows: resource ID, type (workflow/agent), name, description, status.
128
+
129
+ ### Execution History
130
+
131
+ View past executions for a resource:
132
+
133
+ ```bash
134
+ # List recent executions (default: last 50)
135
+ pnpm elevasis-sdk executions <resourceId>
136
+
137
+ # Filter by status
138
+ pnpm elevasis-sdk executions <resourceId> --status failed --limit 10
139
+
140
+ # View specific execution (full detail with logs)
141
+ pnpm elevasis-sdk execution <resourceId> <executionId>
142
+
143
+ # Logs only (skip metadata)
144
+ pnpm elevasis-sdk execution <resourceId> <executionId> --logs-only
145
+
146
+ # Include input and result data
147
+ pnpm elevasis-sdk execution <resourceId> <executionId> --input --result
148
+ ```
149
+
150
+ **`executions` flags:** `--limit <n>` (default 50), `--status running|completed|failed`, `--json`
151
+
152
+ **`execution` flags:** `--logs-only`, `--input`, `--result`, `--json`
153
+
154
+ Execution detail shows: status, start/end times, duration, input, result, error (if failed), and timestamped logs with level (ERROR/WARN/INFO/DEBUG).
155
+
156
+ ### Deployments
157
+
158
+ View deployment history:
159
+
160
+ ```bash
161
+ pnpm elevasis-sdk deployments
162
+ ```
163
+
164
+ Shows: deployment ID, SDK version, status (active/deploying/failed/stopped), created timestamp.
165
+
166
+ ### Credentials
167
+
168
+ Manage integration credentials (API keys, webhook secrets):
169
+
170
+ ```bash
171
+ # List credentials (metadata only, secrets not exposed)
172
+ pnpm elevasis-sdk creds list
173
+
174
+ # Create a credential
175
+ pnpm elevasis-sdk creds create --name my-api-key --type api-key --value '{"apiKey":"sk-..."}'
176
+
177
+ # Update a credential value
178
+ pnpm elevasis-sdk creds update my-api-key --value '{"apiKey":"new-key"}'
179
+
180
+ # Rename a credential
181
+ pnpm elevasis-sdk creds rename old-name --to new-name
182
+
183
+ # Delete a credential
184
+ pnpm elevasis-sdk creds delete my-api-key --force
185
+ ```
186
+
187
+ Credential names: lowercase, digits, hyphens only (`^[a-z0-9]+(-[a-z0-9]+)*$`). Types: `api-key`, `webhook-secret`.
188
+
189
+ ### Rename Resource
190
+
191
+ Rename a resource ID across all platform tables:
192
+
193
+ ```bash
194
+ # Dry run (preview only)
195
+ pnpm elevasis-sdk rename old-id --to new-id
196
+
197
+ # Apply rename
198
+ pnpm elevasis-sdk rename old-id --to new-id --execute
199
+ ```
200
+
201
+ Always dry-run first to see affected tables and row counts.
202
+
203
+ ### Error Resolution
204
+
205
+ Mark execution errors as resolved:
206
+
207
+ ```bash
208
+ # Resolve a specific error
209
+ pnpm elevasis-sdk error resolve <errorId>
210
+
211
+ # Resolve all errors for an execution
212
+ pnpm elevasis-sdk error resolve-execution <executionId>
213
+ ```
214
+
215
+ ## Standard Workflow
216
+
217
+ ```
218
+ 1. Write/modify resources operations/src/
219
+ 2. Type-check pnpm -C operations run check-types
220
+ 3. Validate /elevasis check
221
+ 4. Deploy /elevasis deploy --prod
222
+ 5. Describe /elevasis describe <id>
223
+ 6. Execute /elevasis exec <id> -f input.json
224
+ 7. Inspect logs /elevasis logs <id>
225
+ ```
226
+
227
+ ## Debugging Checklist
228
+
229
+ When an execution fails:
230
+
231
+ 1. **Get the execution ID** from the exec output or `executions <resourceId> --status failed`
232
+ 2. **Read the logs**: `execution <resourceId> <executionId> --logs-only`
233
+ 3. **Check the input**: `execution <resourceId> <executionId> --input`
234
+ 4. **Check the error**: `execution <resourceId> <executionId> --result`
235
+ 5. **Fix the handler**, redeploy, re-execute
236
+
237
+ ---
238
+
239
+ ## Capability Surface
240
+
241
+ When a user asks what skills or commands are available, do NOT answer from recollection.
242
+
243
+ - **Skill inventory:** Read `.claude/Overview.md` — it is the authoritative list of skills available in this project.
244
+ - **Live CLI capability:** Run `pnpm elevasis-sdk cli` — it outputs every command and domain currently registered in the SDK, grouped by domain.
@@ -55,7 +55,6 @@ metadata:
55
55
  - show me all reference docs
56
56
  - where does
57
57
  - apply
58
- context: fork
59
58
  allowed-tools: Read, Write, Edit, Glob, Grep, Bash
60
59
  ---
61
60
 
@@ -227,6 +226,58 @@ follow the relationship that matches the work. Prefer structured helpers from
227
226
 
228
227
  ---
229
228
 
229
+ ## System Taxonomy and Resource Placement
230
+
231
+ Use Systems for durable organizational capability boundaries, not implementation categories.
232
+
233
+ A System is appropriate only when it owns at least one of:
234
+
235
+ - Business or platform capability semantics
236
+ - System-local ontology/config
237
+ - Accountable roles or governance
238
+ - Resources that operate that capability
239
+ - Knowledge or policies that govern that capability
240
+
241
+ Do not create Systems for:
242
+
243
+ - Resource kinds such as `workflows`, `agents`, `scripts`, or `triggers`
244
+ - Shell or navigation groups such as `operations`, `monitoring`, `settings`, or `knowledge`
245
+ - Catch-all buckets such as `automation`, `misc`, `runtime`, or `tools`
246
+ - Individual UI pages or logs such as `command queue`, `task scheduler`, or `execution logs`
247
+ - One-off implementations that should be Resources
248
+
249
+ Resources still require `systemPath`. Choose the System by the capability the Resource supports,
250
+ not by its implementation type.
251
+
252
+ Placement examples:
253
+
254
+ - Scaffold/runtime smoke test `echo` -> `platform.diagnostics`
255
+ - Shared notification workflow -> `platform.notifications`
256
+ - Lead-gen workflow -> `sales.lead-gen`
257
+ - CRM or deal workflow -> `sales.crm`
258
+ - Project status workflow -> `projects`
259
+ - External integration credential/sync resource -> the business or platform System it serves, not
260
+ `integrations` unless an actual integration-platform subsystem exists
261
+
262
+ Before adding a System:
263
+
264
+ 1. Run `pnpm exec elevasis-sdk om:ls /all-systems`.
265
+ 2. Run `pnpm exec elevasis-sdk om:describe <candidate-parent-or-owner>`.
266
+ 3. If the proposed System name is a resource kind, shell group, or catch-all, do not create it;
267
+ attach or create a Resource under the real owning System.
268
+ 4. Create a new System only when no existing System owns the capability and the new System has
269
+ durable ontology/config/governance meaning.
270
+
271
+ Current template placement convention:
272
+
273
+ - Platform cross-cutting subsystems live under `platform.*`.
274
+ - `platform.diagnostics` owns scaffold diagnostic resources.
275
+ - `platform.notifications` owns notification delivery.
276
+ - Tenant business workflows belong to the business System they operate, such as `sales.lead-gen`
277
+ or `projects`.
278
+
279
+ ---
280
+
230
281
  ## API Interface Readiness
231
282
 
232
283
  `system.apiInterface` is adopt-only in tenant projects. It declares intent to adopt a platform-provided API capability from the installed `@elevasis/core` / `@elevasis/sdk` version; it is not a tenant extension point.
@@ -256,14 +307,14 @@ Use it to emit a short domain layering preview before the normal read, describe,
256
307
  ordering, and entity ownership.
257
308
  2. **Runtime state:** where record progress is stored as sparse state keyed by those catalog
258
309
  members.
259
- 3. **Producers:** which templates, automations, or factories write entity-tagged results for those
260
- keys.
310
+ 3. **Producers:** which workflow resources, templates, or factories write entity-tagged results
311
+ for those keys.
261
312
  4. **Consumers:** which dashboards, queues, reports, filters, or API reads render or aggregate the
262
313
  same keys.
263
314
 
264
315
  For vibe-coder sessions, translate this into plain language: "business profile", "saved progress",
265
- "automations", and "dashboard or reports". For technical sessions, it is acceptable to name the
266
- catalog, state map, producer, and consumer surfaces directly.
316
+ "workflow resources", and "dashboard or reports". For technical sessions, it is acceptable to name
317
+ the catalog, state map, producer, and consumer surfaces directly.
267
318
 
268
319
  ---
269
320
 
@@ -1,10 +1,12 @@
1
1
  # Features Compatibility Notes
2
2
 
3
3
  `features` is legacy organization-model wording. Current Organization OS vocabulary is
4
- System/Action oriented:
4
+ System/Resource/Action oriented:
5
5
 
6
- - **Systems** describe availability, routing, ownership, navigation grouping, and knowledge
7
- mounts.
6
+ - **Systems** describe durable capability ownership, ontology/config, accountability, governance,
7
+ and knowledge mounts. They are not sidebar groups.
8
+ - **Resources** describe executable artifacts such as workflows, agents, scripts, and triggers;
9
+ each Resource attaches to a real System through `systemPath`.
8
10
  - **Actions** describe invokable operations such as workflows, agents, commands, and UI-triggered
9
11
  tasks.
10
12
 
@@ -12,13 +14,17 @@ Use this file only when older prompts, browser copy text, SDK references, or sca
12
14
  say "feature". For current tenant organization-model work, route the user to Systems and Actions
13
15
  wording and use `/by-system/<id>` knowledge paths.
14
16
 
17
+ Do not translate "feature" into a catch-all System. Route to Systems only when the user means a
18
+ durable capability boundary; route workflow, agent, script, trigger, or implementation asks to
19
+ Resources under the System that owns the actual business or platform capability.
20
+
15
21
  ## Compatibility Mapping
16
22
 
17
23
  | Legacy wording | Current wording |
18
24
  | ------------------------------------------------------------------------------------- | ----------------------------------------------- |
19
25
  | Feature toggle | System availability or routing toggle |
20
26
  | Feature ID | System ID when discussing Organization OS |
21
- | Add a custom feature | Add or extend a System, then define any Actions |
27
+ | Add a custom feature | Add or extend a capability System, then define Resources and Actions it owns |
22
28
  | Feature governs X | System governs X |
23
29
  | `/om read-folder feature:x` (legacy `/knowledge read-folder feature:x` also accepted) | `/om read-folder system:x` |
24
30
  | `/by-feature/x` | `/by-system/x` |
@@ -50,7 +56,8 @@ means adding a project-owned extension under `core/config/extensions/` and wirin
50
56
  organization model.
51
57
 
52
58
  Older references may call this "adding a custom feature"; translate it to "add or extend a
53
- System and define any Actions it owns" before invoking `operations/codify-level-b.md`.
59
+ capability System and define the Resources and Actions it owns" before invoking
60
+ `operations/codify-level-b.md`.
54
61
 
55
62
  ## UI Package Exception
56
63
 
@@ -61,6 +61,16 @@ Before scaffolding, run a single `om:describe` against the parent System (for Re
61
61
  pnpm exec elevasis-sdk om:describe sales.crm
62
62
  ```
63
63
 
64
+ ### Resource placement decision
65
+
66
+ For `om:scaffold:resource`, never choose `systemPath` because the new Resource is a workflow,
67
+ agent, script, or trigger. Those are Resource kinds, not Systems. Pick the existing System that
68
+ owns the business or platform capability the Resource operates.
69
+
70
+ If no existing System owns that capability, first propose a real capability System. Do not create
71
+ `automation`, `workflows`, `operations`, `monitoring`, `settings`, or similarly broad bucket
72
+ Systems to make the Resource fit.
73
+
64
74
  ### Step 2: Dry-run
65
75
 
66
76
  Always preview first. Each command prints the exact TypeScript / MDX block it would write.
@@ -273,3 +273,12 @@ Running `/setup` more than once is safe:
273
273
  5. Hands off to `/om` for full org-model configuration
274
274
 
275
275
  `/om` owns all other structural org-model editing (identity fields beyond clientBrief, customers, offerings, roles, goals, techStack, systems, actions, labels, and legacy feature compatibility). It is idempotent, confirm-before-overwrite, and includes a runtime validation gate. Re-run `/om` any time organizational reality changes — no need to re-run `/setup`.
276
+
277
+ ---
278
+
279
+ ## Capability Surface
280
+
281
+ When a user asks what skills or commands are available, do NOT answer from recollection.
282
+
283
+ - **Skill inventory:** Read `.claude/Overview.md` — it is the authoritative list of skills available in this project.
284
+ - **Live CLI capability:** Run `pnpm elevasis-sdk cli` — it outputs every command and domain currently registered in the SDK, grouped by domain.
@@ -0,0 +1,27 @@
1
+ # Knowledge nested-group routing fix
2
+
3
+ ## Why this note exists
4
+
5
+ `@elevasis/ui` now exports `findOmTreeGroup` (and `OM_NESTED_TREE_GROUPS`) from `@elevasis/ui/knowledge`. The Knowledge Base `$nodeId` route must use `findOmTreeGroup` to resolve `group:` nodes instead of the direct `OM_TREE_GROUPS.find`. Without this, clicking the nested **Profile** and **Business Model** subgroups under Organization renders "Page Not Found", because those keys live in nested subgroups (not in the top-level `OM_TREE_GROUPS` list).
6
+
7
+ ## Applies to
8
+
9
+ - Any project whose `ui/src/routes/knowledge/$nodeId.tsx` resolves `group:` route params against `OM_TREE_GROUPS`.
10
+ - Projects on `@elevasis/ui` < `2.44.0`.
11
+
12
+ ## Required actions
13
+
14
+ 1. Bump `@elevasis/ui` to `^2.44.0` and install.
15
+ 2. In `ui/src/routes/knowledge/$nodeId.tsx`:
16
+ - Replace the `OM_TREE_GROUPS` import from `@elevasis/ui/knowledge` with `findOmTreeGroup`.
17
+ - Replace `OM_TREE_GROUPS.find((candidate) => candidate.key === groupKey)` with `findOmTreeGroup(groupKey)`.
18
+
19
+ ## Verification
20
+
21
+ - `pnpm -C ui check-types` passes.
22
+ - `pnpm -C ui build` succeeds.
23
+ - In the running app, the Knowledge Base **Profile** and **Business Model** rows under Organization open a describe view instead of "Page Not Found".
24
+
25
+ ## Not handled by /git-sync
26
+
27
+ `/git-sync` does not edit project route source. The `$nodeId.tsx` swap to `findOmTreeGroup` is a manual route edit (or applied via `/external sync` route-baseline merge); `/git-sync` only surfaces this note and installs the bumped dependency.