@elevasis/sdk 1.5.2 → 1.5.3

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.
package/dist/cli.cjs CHANGED
@@ -43990,7 +43990,7 @@ function wrapAction(commandName, fn) {
43990
43990
  // package.json
43991
43991
  var package_default = {
43992
43992
  name: "@elevasis/sdk",
43993
- version: "1.5.2",
43993
+ version: "1.5.3",
43994
43994
  description: "SDK for building Elevasis organization resources",
43995
43995
  type: "module",
43996
43996
  bin: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/sdk",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "description": "SDK for building Elevasis organization resources",
5
5
  "type": "module",
6
6
  "bin": {
@@ -44,7 +44,7 @@
44
44
  "tsup": "^8.0.0",
45
45
  "typescript": "5.9.2",
46
46
  "zod": "^4.1.0",
47
- "@repo/core": "0.2.0",
47
+ "@repo/core": "0.2.1",
48
48
  "@repo/typescript-config": "0.0.0"
49
49
  },
50
50
  "scripts": {
package/reference/cli.mdx CHANGED
@@ -402,23 +402,23 @@ elevasis-sdk describe onboard-client
402
402
 
403
403
  ---
404
404
 
405
- ## elevasis-sdk env
405
+ ## elevasis-sdk creds
406
406
 
407
- Manage environment variables for your project.
407
+ Manage credentials for your project.
408
408
 
409
409
  **Synopsis:**
410
410
 
411
411
  ```
412
- elevasis-sdk env list
413
- elevasis-sdk env set <key> <value>
414
- elevasis-sdk env remove <key>
412
+ elevasis-sdk creds list
413
+ elevasis-sdk creds set <key> <value>
414
+ elevasis-sdk creds remove <key>
415
415
  ```
416
416
 
417
417
  **Behavior:**
418
418
 
419
- - `list` -- display all environment variables configured for the project
420
- - `set` -- add or update an environment variable
421
- - `remove` -- delete an environment variable
419
+ - `list` -- display all credentials configured for the project
420
+ - `set` -- add or update a credential
421
+ - `remove` -- delete a credential
422
422
 
423
423
  **Flags:**
424
424
 
@@ -429,9 +429,9 @@ elevasis-sdk env remove <key>
429
429
  **Examples:**
430
430
 
431
431
  ```bash
432
- elevasis-sdk env list
433
- elevasis-sdk env set OPENAI_API_KEY sk-proj-***
434
- elevasis-sdk env remove OPENAI_API_KEY
432
+ elevasis-sdk creds list
433
+ elevasis-sdk creds set OPENAI_API_KEY sk-proj-***
434
+ elevasis-sdk creds remove OPENAI_API_KEY
435
435
  ```
436
436
 
437
437
  ---
@@ -503,7 +503,7 @@ elevasis-sdk rename ist-upload-workflow --to ist-upload-contacts-workflow --exec
503
503
 
504
504
  ---
505
505
 
506
- ## elevasis-sdk project:*
506
+ ## elevasis-sdk project:\*
507
507
 
508
508
  Project-management commands operate on the shared delivery system used by packaged Projects pages and task-oriented agent workflows.
509
509
 
@@ -566,10 +566,10 @@ elevasis-sdk project:note:delete <id>
566
566
 
567
567
  Most `project:*` commands support:
568
568
 
569
- | Flag | Description |
570
- | ---- | ----------- |
571
- | `--pretty` | Human-readable terminal output instead of raw JSON |
572
- | `--api-url <url>` | Override the API base URL |
569
+ | Flag | Description |
570
+ | ----------------- | -------------------------------------------------- |
571
+ | `--pretty` | Human-readable terminal output instead of raw JSON |
572
+ | `--api-url <url>` | Override the API base URL |
573
573
 
574
574
  For exact required flags and accepted enum values, see the command source under `packages/sdk/src/cli/commands/project/`.
575
575
 
@@ -37,7 +37,8 @@ elevasis-sdk deploy
37
37
  Uploading... done
38
38
 
39
39
  Deployed! 4 resources live.
40
- Deployment: deploy_abc123
40
+ Version: v1.0.0
41
+ Duration: 4.2s
41
42
  ```
42
43
 
43
44
  Each deploy creates a new deployment record. The previous active deployment is automatically stopped. You can view all deployments with `elevasis-sdk deployments`.
@@ -62,9 +63,8 @@ The CLI validates your resources before bundling. Validation uses the same `Reso
62
63
  Authenticating... done (acme-corp)
63
64
  Validating...
64
65
  ERROR Duplicate resource ID 'onboard-client' in organization 'Acme Corp'
65
- ERROR Workflow step 'send-email' references non-existent next step 'notify'
66
66
 
67
- 2 errors. Deploy aborted.
67
+ Deploy aborted.
68
68
  ```
69
69
 
70
70
  Run `elevasis-sdk check` at any time to validate without deploying.
@@ -98,8 +98,9 @@ The CLI also accepts a `--api-url` flag on every command, which takes priority o
98
98
  **API URL resolution order:**
99
99
 
100
100
  1. `--api-url` flag (highest priority)
101
- 2. `ELEVASIS_API_URL` environment variable
102
- 3. `NODE_ENV`-based default (production: `https://api.elevasis.io`, development: localhost)
101
+ 2. `--prod` flag (forces production URL, overrides `NODE_ENV=development`)
102
+ 3. `ELEVASIS_API_URL` environment variable
103
+ 4. `NODE_ENV`-based default (production: `https://api.elevasis.io`, development: localhost)
103
104
 
104
105
  **Setting `ELEVASIS_PLATFORM_KEY` via `.env` file:**
105
106
 
@@ -4,7 +4,7 @@ description: Shared UI and API surfaces for packaged business systems like Lead
4
4
  loadWhen: "Building against packaged app features, list-oriented lead gen, CRM, or project-management surfaces"
5
5
  ---
6
6
 
7
- The SDK now covers more than raw workflow execution. The published `@elevasis/ui@2.7.0` package includes:
7
+ The SDK now covers more than raw workflow execution. The published `@elevasis/ui@2.9.0` package includes:
8
8
 
9
9
  - manifest-backed shared features under `@elevasis/ui/features/<name>`
10
10
  - headless shell/provider exports under `@elevasis/ui/provider`
@@ -16,7 +16,7 @@ Use this page to understand what the shared shell actually owns, which surfaces
16
16
 
17
17
  ## Shared Shell Contract
18
18
 
19
- `ElevasisFeaturesProvider` and `FeatureShell` give you a shared manifest-driven shell layer, not a full application shell. In `2.7.0` they handle:
19
+ `ElevasisFeaturesProvider` and `FeatureShell` give you a shared manifest-driven shell layer, not a full application shell. In `2.9.0` they handle:
20
20
 
21
21
  - feature registration
22
22
  - feature-gated nav contribution
@@ -79,27 +79,27 @@ Dashboard is not part of that shared manifest shell by default. `@elevasis/ui/fe
79
79
 
80
80
  ## Contract Matrix
81
81
 
82
- This is the published contract split in `@elevasis/ui@2.7.0`:
82
+ This is the published contract split in `@elevasis/ui@2.9.0`:
83
83
 
84
- | Contract type | What is published | Current examples |
85
- | ------------- | ----------------- | ---------------- |
86
- | Manifest-backed shared subshell features | Feature manifest plus shared sidebar/pages, mounted through `@elevasis/ui/provider` | Lead Gen, CRM, Projects, Operations, SEO |
87
- | Manifest-backed nav/app sections | Feature manifest contributes gated nav and route metadata, but the host still owns the route pages or shell chrome | Monitoring, Settings |
88
- | Exported compatibility components | Reusable components exported without a manifest-backed shell contract | Dashboard components such as `Dashboard`, `OperationsOverview`, `ResourceOverview`, `RecentExecutionsByResource`, `UnresolvedErrorsTeaser` |
89
- | Compatibility barrel | Existing imports remain available from `@elevasis/ui/components`, but new host integrations should prefer feature/provider subpaths | Manifests, sidebars, and page components re-exported for compatibility |
84
+ | Contract type | What is published | Current examples |
85
+ | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
86
+ | Manifest-backed shared subshell features | Feature manifest plus shared sidebar/pages, mounted through `@elevasis/ui/provider` | Lead Gen, CRM, Projects, Operations, SEO |
87
+ | Manifest-backed nav/app sections | Feature manifest contributes gated nav and route metadata, but the host still owns the route pages or shell chrome | Monitoring, Settings |
88
+ | Exported compatibility components | Reusable components exported without a manifest-backed shell contract | Dashboard components such as `Dashboard`, `OperationsOverview`, `ResourceOverview`, `RecentExecutionsByResource`, `UnresolvedErrorsTeaser` |
89
+ | Compatibility barrel | Existing imports remain available from `@elevasis/ui/components`, but new host integrations should prefer feature/provider subpaths | Manifests, sidebars, and page components re-exported for compatibility |
90
90
 
91
91
  Projects is currently the only packaged system with a first-class `elevasis-sdk project:*` CLI family. Lead Gen and CRM are still primarily UI + API + workflow/runtime surfaces, and browser-facing interactions remain REST-driven even when runtime tools exist.
92
92
 
93
93
  ## System Map
94
94
 
95
- | System | Primary route space | Shared UI surface | Main data surface | Best SDK entry point |
96
- | ------ | ------------------- | ----------------- | ----------------- | -------------------- |
97
- | Lead Gen | `/lead-gen/*` | Lead Gen pages, sidebars, list detail page, run dialogs | Acquisition list APIs + list/acqDb platform tools | `@elevasis/ui/features/lead-gen`, `@elevasis/ui/hooks`, `@elevasis/sdk/worker` |
98
- | CRM | `/crm/*` | CRM sidebar, overview widgets, deal/detail pages, workbench panels | Deal APIs, recent-activity API, acquisition-backed hooks, and the `crm` runtime adapter | `@elevasis/ui/features/crm`, `@elevasis/ui/hooks`, `@elevasis/sdk/worker` |
99
- | Projects | `/projects/*` | Projects list page, milestones/tasks/notes sidebars and pages | Project, milestone, task, note REST endpoints + CLI | `@elevasis/ui/features/delivery`, `@elevasis/ui/hooks/delivery`, `elevasis-sdk project:*` |
100
- | Dashboard | host-owned | Dashboard and overview components only; no shared manifest-backed nav contract | Host-chosen API composition | `@elevasis/ui/features/dashboard` |
101
- | Monitoring | `/monitoring/*` | Monitoring nav metadata plus exported pages/components; no shared `FeatureShell` sidebar today | Monitoring REST APIs | `@elevasis/ui/features/monitoring` |
102
- | Settings | `/settings/*` | Settings nav metadata plus exported settings components; no shared `FeatureShell` sidebar today | Settings/account/org REST APIs | `@elevasis/ui/features/settings` |
95
+ | System | Primary route space | Shared UI surface | Main data surface | Best SDK entry point |
96
+ | ---------- | ------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
97
+ | Lead Gen | `/lead-gen/*` | Lead Gen pages, sidebars, list detail page, run dialogs | Acquisition list APIs + list/acqDb platform tools | `@elevasis/ui/features/lead-gen`, `@elevasis/ui/hooks`, `@elevasis/sdk/worker` |
98
+ | CRM | `/crm/*` | CRM sidebar, overview widgets, deal/detail pages, workbench panels | Deal APIs, recent-activity API, acquisition-backed hooks, and the `crm` runtime adapter | `@elevasis/ui/features/crm`, `@elevasis/ui/hooks`, `@elevasis/sdk/worker` |
99
+ | Projects | `/projects/*` | Projects list page, milestones/tasks/notes sidebars and pages | Project, milestone, task, note REST endpoints + CLI | `@elevasis/ui/features/delivery`, `@elevasis/ui/hooks/delivery`, `elevasis-sdk project:*` |
100
+ | Dashboard | host-owned | Dashboard and overview components only; no shared manifest-backed nav contract | Host-chosen API composition | `@elevasis/ui/features/dashboard` |
101
+ | Monitoring | `/monitoring/*` | Monitoring nav metadata plus exported pages/components; no shared `FeatureShell` sidebar today | Monitoring REST APIs | `@elevasis/ui/features/monitoring` |
102
+ | Settings | `/settings/*` | Settings nav metadata plus exported settings components; no shared `FeatureShell` sidebar today | Settings/account/org REST APIs | `@elevasis/ui/features/settings` |
103
103
 
104
104
  ---
105
105
 
@@ -131,17 +131,17 @@ The most important page for downstream agents is `LeadGenListDetailPage`. It com
131
131
 
132
132
  `@elevasis/ui/hooks` exposes list-aware hooks backed by the acquisition API:
133
133
 
134
- | Hook | HTTP path |
135
- | ---- | --------- |
136
- | `useLists()` | `GET /acquisition/lists` |
137
- | `useList(listId)` | `GET /acquisition/lists/:listId` |
138
- | `useListsTelemetry()` | `GET /acquisition/lists/telemetry` |
139
- | `useListProgress(listId)` | `GET /acquisition/lists/:listId/progress` |
140
- | `useListExecutions(listId)` | `GET /acquisition/lists/:listId/executions` |
141
- | `useCreateList()` | `POST /acquisition/lists` |
142
- | `useUpdateList(listId)` | `PATCH /acquisition/lists/:listId` |
143
- | `useUpdateListConfig(listId)` | `PATCH /acquisition/lists/:listId/config` |
144
- | `useDeleteList()` | `DELETE /acquisition/lists/:listId` |
134
+ | Hook | HTTP path |
135
+ | ----------------------------- | ------------------------------------------- |
136
+ | `useLists()` | `GET /acquisition/lists` |
137
+ | `useList(listId)` | `GET /acquisition/lists/:listId` |
138
+ | `useListsTelemetry()` | `GET /acquisition/lists/telemetry` |
139
+ | `useListProgress(listId)` | `GET /acquisition/lists/:listId/progress` |
140
+ | `useListExecutions(listId)` | `GET /acquisition/lists/:listId/executions` |
141
+ | `useCreateList()` | `POST /acquisition/lists` |
142
+ | `useUpdateList(listId)` | `PATCH /acquisition/lists/:listId` |
143
+ | `useUpdateListConfig(listId)` | `PATCH /acquisition/lists/:listId/config` |
144
+ | `useDeleteList()` | `DELETE /acquisition/lists/:listId` |
145
145
 
146
146
  Lead Gen also sits on broader acquisition endpoints for companies and contacts:
147
147
 
@@ -247,16 +247,16 @@ Projects is the packaged delivery/project-management system. It has both a share
247
247
 
248
248
  `@elevasis/ui/hooks/delivery` talks to the project-management API:
249
249
 
250
- | Hook | HTTP path |
251
- | ---- | --------- |
252
- | `useProjects()` | `GET /projects` |
253
- | `useProject(id)` | `GET /projects/:id` |
254
- | `useTasks({ projectId })` | `GET /projects/:projectId/tasks` |
255
- | `useMilestones({ projectId })` | `GET /projects/:projectId/milestones` |
256
- | `useProjectNotes({ projectId })` | `GET /projects/:projectId/notes` |
257
- | `useCreateTask()` | `POST /project-tasks` |
258
- | `useUpdateTask()` | `PATCH /project-tasks/:id` |
259
- | `useCreateNote()` | `POST /project-notes` |
250
+ | Hook | HTTP path |
251
+ | -------------------------------- | ------------------------------------- |
252
+ | `useProjects()` | `GET /projects` |
253
+ | `useProject(id)` | `GET /projects/:id` |
254
+ | `useTasks({ projectId })` | `GET /projects/:projectId/tasks` |
255
+ | `useMilestones({ projectId })` | `GET /projects/:projectId/milestones` |
256
+ | `useProjectNotes({ projectId })` | `GET /projects/:projectId/notes` |
257
+ | `useCreateTask()` | `POST /project-tasks` |
258
+ | `useUpdateTask()` | `PATCH /project-tasks/:id` |
259
+ | `useCreateNote()` | `POST /project-notes` |
260
260
 
261
261
  ### CLI Surface
262
262
 
@@ -88,9 +88,8 @@ import { useState } from 'react'
88
88
  import { Modal, Button, Text } from '@mantine/core'
89
89
  import { ResourceExecuteForm } from '@elevasis/ui/features/operations'
90
90
  import { useExecuteAsync } from '@elevasis/ui/hooks'
91
- import type { SerializedExecutionFormSchema } from '@elevasis/ui/hooks'
92
91
 
93
- const formSchema: SerializedExecutionFormSchema = {
92
+ const formSchema = {
94
93
  fields: [
95
94
  { name: 'topic', label: 'Topic', type: 'text', required: true },
96
95
  ],
@@ -40,67 +40,47 @@ At the start of every session the agent runs these steps silently before respond
40
40
 
41
41
  ## Slash Commands
42
42
 
43
- Slash commands are short Markdown instruction files in `.claude/commands/`. When you type `/command-name` in a Claude Code session, the agent reads the corresponding file and follows its instructions.
43
+ Skills are Markdown instruction files in `.claude/skills/`. When you type `/skill-name` in a Claude Code session, the agent reads the corresponding `SKILL.md` and follows its instructions.
44
44
 
45
- Four commands and one skill are scaffolded by `elevasis-sdk init` and committed to version control so collaborators get the same experience:
45
+ The following skills are scaffolded by `elevasis-sdk init` and committed to version control so collaborators get the same experience:
46
46
 
47
- | Command | File | Purpose |
48
- | ----------- | ------------- | -------------------------------------------------------------------------------- |
49
- | `/meta` | `meta.md` | Project lifecycle -- init, status, fix (incl. docs verification), deploy, health |
50
- | `/docs` | `docs.md` | Browse, create, and verify permanent documentation |
51
- | `/work` | `work.md` | Task tracking -- list, create, save, resume, complete |
52
- | `/tutorial` | `tutorial.md` | Progressive learning path -- 3 tracks, menu-driven |
47
+ | Skill | File | Purpose |
48
+ | ----------- | -------------------------- | -------------------------------------------------------- |
49
+ | `/work` | `skills/work/SKILL.md` | Task tracking -- list, create, save, resume, complete |
50
+ | `/elevasis` | `skills/elevasis/SKILL.md` | SDK operations -- check, deploy, exec |
51
+ | `/deploy` | `skills/deploy/skill.md` | Full deploy pipeline (test, build, commit, push) |
52
+ | `/setup` | `skills/setup/SKILL.md` | First-time project setup (placeholder replacement, deps) |
53
+ | `/status` | `skills/status/SKILL.md` | Quick project health check |
54
+ | `/continue` | `skills/continue/SKILL.md` | Resume in-progress work from docs |
55
+ | `/project` | `skills/project/SKILL.md` | Client project management via elevasis-sdk |
56
+ | `/sync` | `skills/sync/SKILL.md` | Pull latest, wipe caches, fresh reinstall |
57
+ | `/explore` | `skills/explore/SKILL.md` | Codebase exploration anchored to docs |
58
+ | `/save` | `skills/save/SKILL.md` | Auto-manage docs from conversation context |
59
+ | `/dsp` | `skills/dsp/SKILL.md` | Parallel agent dispatch for implementation tasks |
53
60
 
54
- The `/creds` skill (`.claude/skills/creds/SKILL.md`) is also scaffolded. It auto-triggers when the agent detects credential-related context and manages credential storage and retrieval.
61
+ ### Key Skills
55
62
 
56
- ### `/meta` Command
63
+ **`/setup`** -- First-time project setup. Replaces template placeholders, installs dependencies, configures `.env`, verifies the project, and optionally runs a first deploy.
57
64
 
58
- The `/meta` command namespace manages the full project lifecycle. It has five operations:
65
+ **`/deploy`** -- Full deploy pipeline: type-check, validate resources, commit, deploy (auto-regenerates `docs/index.md` and `docs/resources.md`), verify platform, and optionally push.
59
66
 
60
- - **`/meta init`** -- First-run guided setup. Runs after `elevasis-sdk init` to install dependencies, configure `.env`, run the competency assessment onboarding flow, seed `memory/profile/`, verify the project, and optionally do a first deploy.
61
- - **`/meta`** (no arguments) -- Project health status. Shows current template version, SDK version, profile summary, a quick drift check, and last deployment status.
62
- - **`/meta fix`** -- SDK upgrade check and drift repair. Step 0 offers to run `pnpm update @elevasis/sdk` and merge template changes. Steps 1-8 repair drift: missing managed files, gitignore entries, CLAUDE.md sections, memory structure, doc cross-references, settings, rules health, and project map freshness.
63
- - **`/meta deploy`** -- Full 9-step deploy pipeline: validate, type-check, verify docs, commit, deploy (auto-regenerates `docs/project-map.mdx`), verify platform, update deployment state, and optionally push.
64
- - **`/meta health`** -- Execution debugging and resource status; shows recent executions, analyzes failures, and checks environment connectivity.
67
+ **`/elevasis`** -- SDK operations entry point: `check` validates resource definitions, `deploy` bundles and uploads, `exec` runs a resource with input.
65
68
 
66
- ### `/docs` Command
69
+ **`/work`** -- File-based task lifecycle. Creates, resumes, saves, and completes task docs in `docs/in-progress/`. Intent-driven: the agent detects what to do from context.
67
70
 
68
- The `/docs` command manages the permanent `docs/` tree -- everything except `docs/in-progress/` (owned by `/work`) and auto-generated files (`project-map.mdx`, `resource-map.mdx`). Three operations:
71
+ **`/status`** -- Quick project health check: shows SDK version, deployed resources, last deploy date, and environment status.
69
72
 
70
- - **`/docs`** (no arguments) -- Browse. Scans `docs/` recursively and displays a numbered list of user-maintained docs with auto-generated files shown separately as read-only. Pick a number to read and discuss, or say "create" or "verify."
71
- - **`/docs create [description]`** -- Interview-driven reference doc creation. If the doc is about a specific resource, the agent scans `src/` and pre-populates from code (config, schemas, step names, platform tools). Scaffolds sections appropriate to the doc type (resource guide, integration guide, architecture notes, process doc, or general reference).
72
- - **`/docs verify [file?]`** -- Interactive standalone version of `/meta fix` step 5. Cross-references resource IDs, schema fields, and platform tools in docs against `src/`. Shows a summary, then guides fixes interactively. Can be scoped to a single file.
73
+ **`/save`** -- Auto-manages docs from conversation context: writes or updates docs based on what was discussed in the session.
73
74
 
74
- ### `/work` Command
75
+ **`/explore`** -- Codebase exploration anchored to `docs/`. Reads the doc map first, then drills into source as needed.
75
76
 
76
- The `/work` command manages in-progress task tracking across sessions. It uses `docs/in-progress/` for task documents with standardized frontmatter (`status: planned | in-progress | complete`).
77
+ **`/continue`** -- Resumes in-progress work by reading `docs/in-progress/` and picking up where the last session left off.
77
78
 
78
- `/work` is intent-driven -- the agent detects what to do from context rather than requiring explicit subcommands:
79
+ **`/project`** -- Client project management: milestones, tasks, and notes via `elevasis-sdk project` commands.
79
80
 
80
- - **`/work`** (no arguments) -- Lists tasks sorted by status (`in-progress` first) with last-saved date and current step. Pick by number or name to auto-resume, or describe new work to auto-create a task.
81
- - **Auto-create** -- When the user describes work that doesn't match an existing task, the agent creates a task doc automatically. If intent is clear, it skips the interview; if ambiguous, it asks 1-2 focused questions.
82
- - **Auto-save** -- The agent saves progress silently when the conversation context is getting heavy, the user is wrapping up, or 2+ steps have been completed without saving. Updates progress markers, files modified, and resume context.
83
- - **Auto-resume** -- When the user picks an existing task (by number, name, or keyword), the agent loads context and resumes automatically.
84
- - **Suggest complete** -- When all plan steps are marked COMPLETE, the agent suggests finalizing: "All steps for '`{task}`' look done. Want me to finalize it?" It never auto-invokes completion. The complete flow validates readiness, cleans the doc (strips resume context, removes progress markers, targets 200-400 lines), determines destination in `docs/`, confirms with user, moves, and verifies.
81
+ **`/dsp`** -- Dispatches subagents in parallel for implementation tasks that can run concurrently.
85
82
 
86
- **Directory conventions for `docs/in-progress/`:**
87
-
88
- ```
89
- docs/in-progress/
90
- ├── crm-integration/
91
- │ ├── index.mdx # Main task doc
92
- │ └── attio-schema.mdx # Supporting analysis
93
- ├── email-templates.mdx # Small standalone task
94
- └── ui-dashboard/
95
- ├── index.mdx # Main task doc
96
- └── component-list.mdx # Supporting analysis
97
- ```
98
-
99
- The numbered list is derived from scanning this directory. `index.mdx` is treated as the primary task doc for a directory. On complete, destination in `docs/` is determined by scanning for related existing directories.
100
-
101
- ### `/tutorial` Command
102
-
103
- The `/tutorial` command shows a track menu on every invocation and runs a progressive learning path adapted to the user's skill profile. Three tracks: Orchestration Concepts (7 lessons), Examples & Advanced Modules (9 standalone modules), and Meta-Framework (5 lessons). Two skill dimensions tracked: `automation` (none / low-code / custom) and `platformNavigation` (none / oriented / comfortable).
83
+ **`/sync`** -- Pulls latest changes, wipes all `node_modules` and caches, and runs a fresh reinstall.
104
84
 
105
85
  ## Developer Profile
106
86
 
@@ -138,14 +118,26 @@ The agent does not prompt for confirmation on minor updates. Major changes (leve
138
118
 
139
119
  ## Rules System
140
120
 
141
- Six rule files are scaffolded in `.claude/rules/`. Rule files are auto-injected by Claude Code when their path patterns match the current file being edited -- no manual loading needed.
121
+ Ten rule files are scaffolded in `.claude/rules/`. Rule files are auto-injected by Claude Code when their path patterns match the current file being edited -- no manual loading needed.
122
+
123
+ Rules injected for operations source files (`operations/src/`):
124
+
125
+ - **`platform.md`** -- SDK adapter patterns, typed adapters, platform tool usage.
126
+ - **`error-handling.md`** -- Error types (`ExecutionError`, `PlatformToolError`), retry behavior.
127
+ - **`execution.md`** -- Worker thread model, timeouts, concurrency, org isolation.
128
+ - **`observability.md`** -- Logging with `context.logger`, step-level auto-logging, debugging.
129
+ - **`deployment.md`** -- Deploy commands, dev vs prod, version bumping, common errors.
130
+
131
+ Rules injected for docs files (`docs/`):
142
132
 
143
- The two files you will interact with directly:
133
+ - **`docs.md`** -- Documentation structure, frontmatter conventions, auto-generated files.
134
+ - **`task-tracking.md`** -- Task doc conventions, injected for in-progress files.
144
135
 
145
- - **`sdk-patterns.md`** (MANAGED) -- Injected when editing `src/`. Covers SDK imports, source structure, runtime, and typed adapter patterns. Updated by `elevasis-sdk update`.
146
- - **`workspace-patterns.md`** (INIT_ONLY) -- Injected project-wide. Starts empty; grows via error promotion (3+ recurrences of the same error become a rule). Never overwritten by updates.
136
+ Additional contextual rules:
147
137
 
148
- Four additional MANAGED rules (`docs-authoring.md`, `memory-conventions.md`, `project-map.md`, `task-tracking.md`) are injected contextually for docs, memory, and task files. These are maintained by the SDK and require no user action.
138
+ - **`frontend.md`** -- React/Mantine patterns, injected for UI source files.
139
+ - **`shared-types.md`** -- Cross-runtime type conventions, injected for foundations files.
140
+ - **`organization-os.md`** -- Organization model and feature shell conventions.
149
141
 
150
142
  ## Interaction Guidance
151
143
 
@@ -14,22 +14,25 @@ Running `elevasis-sdk init my-project` produces the following agent infrastructu
14
14
 
15
15
  ```
16
16
  .claude/
17
- ├── settings.json # autoCompact: false
18
- ├── commands/
19
- │ ├── meta.md # Project lifecycle (init, fix, deploy, health)
20
- │ ├── docs.md # Browse, create, and verify permanent docs
21
- │ ├── tutorial.md # Progressive learning path (3 tracks)
22
- │ └── work.md # Task tracking
17
+ ├── settings.json # Hook registrations (PostToolUse, PostToolUseFailure)
23
18
  ├── hooks/
24
- └── enforce-sdk-boundary.mjs # Blocks file modifications outside project boundary
19
+ ├── post-edit-validate.mjs # Formatting/type-check hook (after Write/Edit/MultiEdit)
20
+ │ └── tool-failure-recovery.mjs # Error recovery hook (after Bash failures)
25
21
  ├── skills/
26
- └── creds/SKILL.md # Credential management (auto-triggers)
22
+ ├── work/SKILL.md # Task tracking across sessions
23
+ │ ├── elevasis/SKILL.md # SDK operations (check, deploy, exec)
24
+ │ ├── deploy/skill.md # Deploy pipeline
25
+ │ ├── setup/SKILL.md # First-time project setup
26
+ │ ├── status/SKILL.md # Project health check
27
+ │ └── ... # Additional skills (dsp, continue, project, sync, explore, save)
28
+ ├── scripts/
29
+ │ └── statusline-command.js # Status line command
27
30
  └── rules/
28
31
  ├── sdk-patterns.md # SDK patterns (auto-loaded for src/ files)
29
32
  ├── docs-authoring.md # MDX conventions (auto-loaded for docs/ files)
30
- ├── memory-conventions.md # Memory conventions (auto-loaded)
31
- ├── project-map.md # Project map conventions (auto-loaded)
32
33
  ├── task-tracking.md # Task tracking conventions (auto-loaded)
34
+ ├── platform.md # Platform tool patterns
35
+ ├── error-handling.md # Error handling patterns
33
36
  └── workspace-patterns.md # Project-specific patterns (grows over time)
34
37
  ```
35
38
 
@@ -12,35 +12,30 @@ The current full-stack scaffold uses a workspace layout with `ui/`, `operations/
12
12
 
13
13
  ## Source Files
14
14
 
15
- ### `src/index.ts`
15
+ ### `operations/src/index.ts`
16
16
 
17
17
  The registry entry point for your workspace. This file aggregates resources from domain barrel files and re-exports them as a `DeploymentSpec` default export. It does not contain workflow logic itself -- its sole job is aggregation:
18
18
 
19
19
  ```ts
20
20
  import type { DeploymentSpec } from '@elevasis/sdk'
21
- import * as operations from './operations/index.js'
22
21
  import * as example from './example/index.js'
22
+ import * as emailNotification from './email-notification/exports.js'
23
23
 
24
24
  const org: DeploymentSpec = {
25
- workflows: [
26
- ...operations.workflows,
27
- ...example.workflows,
28
- ],
29
- agents: [
30
- ...operations.agents,
31
- ...example.agents,
32
- ],
25
+ version: '0.1.0',
26
+ workflows: [...example.workflows, ...emailNotification.workflows],
27
+ agents: [...example.agents, ...emailNotification.agents]
33
28
  }
34
29
  export default org
35
30
  ```
36
31
 
37
- Each domain directory exports `workflows` and `agents` arrays via an `index.ts` barrel. When you add a new domain, import it here and spread its arrays. The `/resource workflow` command updates the appropriate domain barrel automatically.
32
+ Each domain directory exports `workflows` and `agents` arrays via an `index.ts` barrel. When you add a new domain, import it here and spread its arrays.
38
33
 
39
- ### `src/operations/platform-status.ts`
34
+ ### `operations/src/email-notification/index.ts`
40
35
 
41
- A multi-step workflow demonstrating real platform API usage. Calls `platform.call({ tool: 'status', method: 'overview' })` to gather platform status data, then passes it to `platform.call({ tool: 'llm', method: 'generate' })` for a natural language summary. Shows the pattern for workflows that interact with platform tools and chain steps with `StepType.LINEAR`.
36
+ A multi-step workflow demonstrating real platform API usage. Sends an email notification using the `notifications` adapter and chains steps with `StepType.LINEAR`. Shows the pattern for workflows that use platform tool adapters and pass data between steps.
42
37
 
43
- ### `src/example/echo.ts`
38
+ ### `operations/src/example/echo.ts`
44
39
 
45
40
  The starter workflow, scaffolded to demonstrate the per-file pattern: one workflow per file with its own Zod input/output schemas, config object, contract, and step handler. Replace this domain with your own when you're ready.
46
41
 
@@ -48,9 +43,9 @@ The starter workflow, scaffolded to demonstrate the per-file pattern: one workfl
48
43
 
49
44
  Cross-runtime types, schemas, constants, and organization-model configuration shared between the UI and operations packages. Put contracts here when both runtimes need the same validation or labels without depending on app-specific code.
50
45
 
51
- ### `elevasis.config.ts`
46
+ ### `operations/elevasis.config.ts`
52
47
 
53
- Project-level configuration. The scaffolded file includes commented-out options (`defaultStatus`, `dev.port`) so you can discover available settings without looking them up:
48
+ Project-level configuration. The scaffolded file includes commented-out options (`defaultStatus`, `dev.port`) and sets `docsDir` to point at the workspace-level `docs/` directory:
54
49
 
55
50
  ```ts
56
51
  import type { ElevasConfig } from '@elevasis/sdk'
@@ -58,10 +53,12 @@ import type { ElevasConfig } from '@elevasis/sdk'
58
53
  export default {
59
54
  // defaultStatus: 'dev', // Default status for new resources ('dev' | 'prod')
60
55
  // dev: { port: 5170 }, // Local API port (internal development only)
56
+
57
+ docsDir: '../docs' // Scan the template's top-level docs/ directory
61
58
  } satisfies ElevasConfig
62
59
  ```
63
60
 
64
- Leave this file minimal -- the platform provides sensible defaults.
61
+ The `docsDir` option (relative to CWD) overrides where the CLI scans for documentation files. Use `false` to disable documentation scanning entirely.
65
62
 
66
63
  ---
67
64
 
@@ -105,26 +102,26 @@ This directory is NOT deployed -- it is filtered out during the doc scan in `ele
105
102
 
106
103
  ## Progressive Disclosure Directories
107
104
 
108
- Only `src/` and `docs/` are scaffolded by `elevasis-sdk init`. The following directories are NOT created by default -- they appear when a specific need arises:
109
-
110
- | Directory | Created by | When |
111
- | ---------------------- | -------------------------------- | ------------------------------------------------------------------ |
112
- | `src/operations/` | `elevasis-sdk init` (default) | Always -- platform-status workflow lives here |
113
- | `src/example/` | `elevasis-sdk init` (default) | Always -- echo starter workflow lives here (replace with your own) |
114
- | `foundations/` | `elevasis-sdk init` (default) | Always -- cross-runtime contracts, schemas, and organization model |
115
- | `docs/` | `elevasis-sdk init` (default) | Always |
116
- | `docs/in-progress/` | Agent (on first `/work`) | When you create a task doc for in-progress work |
117
- | `docs/project-map.mdx` | `elevasis-sdk deploy` | Auto-generated on every deploy |
118
- | `docs/priorities.mdx` | Agent (on first goal discussion) | When you discuss project goals or priorities |
119
- | `data/` | Agent (on demand) | When you connect a database |
120
- | `scripts/` | Agent (on demand) | When you need local scripts not deployed to the platform |
121
- | `src/lib/` | Agent (on demand) | When shared code exists between two or more workflows |
105
+ The following directories are included in the scaffold:
106
+
107
+ | Directory | Created by | When |
108
+ | ------------------------------------ | --------------- | ------------------------------------------------------------------ |
109
+ | `operations/src/example/` | Scaffold | Always -- echo starter workflow lives here (replace with your own) |
110
+ | `operations/src/email-notification/` | Scaffold | Always -- multi-step notification workflow example |
111
+ | `foundations/` | Scaffold | Always -- cross-runtime contracts, schemas, and organization model |
112
+ | `ui/` | Scaffold | Always -- React frontend application |
113
+ | `docs/` | Scaffold | Always |
114
+ | `docs/in-progress/` | Agent | When you create a task doc for in-progress work |
115
+ | `docs/resources.md` | `/deploy` skill | Auto-generated on every deploy |
116
+ | `data/` | Agent | When you connect a database |
117
+ | `scripts/` | Agent | When you need local scripts not deployed to the platform |
118
+ | `operations/src/lib/` | Agent | When shared code exists between two or more workflows |
122
119
 
123
120
  This structure keeps the initial workspace minimal and adds directories only when they earn their place.
124
121
 
125
- ### `src/lib/`
122
+ ### `operations/src/lib/`
126
123
 
127
- Legacy shared code directory. In the current workspace scaffold, prefer the top-level `foundations/` package for cross-runtime contracts. The agent may still create `src/lib/` in older projects that predate the workspace-based layout. Included in the esbuild bundle alongside workflow code.
124
+ Shared code directory for utilities used by multiple workflows within the operations package. In the current workspace scaffold, prefer the top-level `foundations/` package for cross-runtime contracts. Included in the esbuild bundle alongside workflow code.
128
125
 
129
126
  ### `data/`
130
127
 
@@ -140,14 +137,15 @@ Local utility scripts for tasks that do not run on the platform: database seeds,
140
137
 
141
138
  `elevasis-sdk deploy` touches only two directories:
142
139
 
143
- | Directory | Action | Deployed? |
144
- | ------------------- | ------------------------------------------------------------------------- | --------- |
145
- | `src/` | Bundle into `dist/bundle.js` via esbuild (includes `src/lib/` if present) | Yes |
146
- | `docs/` | Scan `.mdx` files, upload as documentation | Yes |
147
- | `docs/in-progress/` | Ignored -- work-in-progress, not deployed | No |
148
- | `data/` | Ignored -- local documentation for the agent | No |
149
- | `scripts/` | Ignored -- local scripts, not deployed | No |
150
- | `.claude/` | Ignored -- local development only | No |
140
+ | Directory | Action | Deployed? |
141
+ | ------------------- | ------------------------------------------------------------------------------------ | --------- |
142
+ | `operations/src/` | Bundle into `dist/bundle.js` via esbuild (includes `operations/src/lib/` if present) | Yes |
143
+ | `docs/` | Scan `.md` and `.mdx` files, upload as documentation | Yes |
144
+ | `docs/in-progress/` | Ignored -- work-in-progress, not deployed | No |
145
+ | `data/` | Ignored -- local documentation for the agent | No |
146
+ | `scripts/` | Ignored -- local scripts, not deployed | No |
147
+ | `.claude/` | Ignored -- local development only | No |
148
+ | `ui/` | Ignored -- frontend application, deployed separately | No |
151
149
 
152
150
  ---
153
151
 
@@ -196,7 +194,7 @@ Do not remove or heavily edit `CLAUDE.md`. It is the primary context source that
196
194
 
197
195
  ### `.claude/settings.json`
198
196
 
199
- Configures Claude Code for the workspace: disables auto-compaction (prevents losing earlier context in long sessions) and registers three hooks -- a PreToolUse boundary hook, a PostToolUse formatting/type-check hook, and a PostToolUseFailure error recovery hook.
197
+ Configures Claude Code for the workspace: registers a PostToolUse formatting/type-check hook (runs after Write, Edit, and MultiEdit) and a PostToolUseFailure error recovery hook (runs after Bash failures).
200
198
 
201
199
  ### `.claude/memory/`
202
200
 
@@ -221,12 +219,19 @@ This directory is gitignored -- it is personal to you and not shared with collab
221
219
 
222
220
  ## Slash Commands
223
221
 
224
- The `.claude/commands/` directory contains four commands covering the core development loop:
222
+ The `.claude/skills/` directory contains skills covering the core development loop:
225
223
 
226
- - **`/meta`** -- Project lifecycle: init, status, fix, deploy, health
227
- - **`/docs`** -- Browse, create, and verify permanent documentation
224
+ - **`/setup`** -- First-time project setup: placeholder replacement, deps, verification
225
+ - **`/deploy`** -- Full deploy pipeline: test, build, commit, push
226
+ - **`/elevasis`** -- SDK operations: check, deploy, exec
228
227
  - **`/work`** -- Task tracking across sessions: auto-detects intent (create, save, resume); suggests complete
229
- - **`/tutorial`** -- Progressive learning path adapted to your skill profile
228
+ - **`/status`** -- Quick project health check
229
+ - **`/save`** -- Auto-manage docs from conversation context
230
+ - **`/explore`** -- Codebase exploration anchored to docs
231
+ - **`/continue`** -- Resume in-progress work from docs
232
+ - **`/project`** -- Client project management via elevasis-sdk
233
+ - **`/dsp`** -- Parallel agent dispatch for implementation tasks
234
+ - **`/sync`** -- Pull latest, wipe caches, fresh reinstall
230
235
 
231
236
  For detailed command documentation, see [Agent System](agent).
232
237
 
@@ -238,40 +243,35 @@ Not all scaffolded files participate in template updates. Files fall into two ca
238
243
 
239
244
  **SCAFFOLD_FILES total: 32**
240
245
 
241
- **INIT_ONLY** (14 files) -- Written once during `elevasis-sdk init`, never updated by `elevasis-sdk update`:
246
+ **INIT_ONLY** -- Written once during initial scaffold, never overwritten by updates:
242
247
 
243
248
  - `package.json`, `pnpm-workspace.yaml`, `tsconfig.json`
244
249
  - `.env`, `.npmrc`
245
- - `src/index.ts`, `src/operations/platform-status.ts`, `src/operations/index.ts`, `src/example/echo.ts`, `src/example/index.ts`, `foundations/types/index.ts`
250
+ - `operations/src/index.ts`, `operations/src/email-notification/index.ts`, `operations/src/email-notification/exports.ts`, `operations/src/example/echo.ts`, `operations/src/example/index.ts`, `foundations/`
246
251
  - `docs/index.md`, `docs/in-progress/.gitkeep`
247
- - `.claude/rules/workspace-patterns.md`
248
252
 
249
- **MANAGED** (18 files) -- Written during `elevasis-sdk init` and checked/updatable by `elevasis-sdk update`:
253
+ **MANAGED** -- Written during initial scaffold and updated when the template evolves:
250
254
 
251
- - `elevasis.config.ts`, `.gitignore`, `CLAUDE.md`, `.claude/settings.json`
252
- - Three hooks: `.claude/hooks/enforce-sdk-boundary.mjs`, `.claude/hooks/post-edit-validate.mjs`, `.claude/hooks/tool-failure-recovery.mjs`
253
- - Three command files: `.claude/commands/meta.md`, `.claude/commands/docs.md`, `.claude/commands/tutorial.md`
254
- - Two skills: `.claude/skills/work/SKILL.md`, `.claude/skills/creds/SKILL.md`
255
- - Five rule files: `.claude/rules/sdk-patterns.md`, `.claude/rules/docs-authoring.md`, `.claude/rules/memory-conventions.md`, `.claude/rules/project-map.md`, `.claude/rules/task-tracking.md`
255
+ - `operations/elevasis.config.ts`, `.gitignore`, `CLAUDE.md`, `.claude/settings.json`
256
+ - Two hooks: `.claude/hooks/post-edit-validate.mjs`, `.claude/hooks/tool-failure-recovery.mjs`
257
+ - Skills: `.claude/skills/work/SKILL.md`, `.claude/skills/elevasis/SKILL.md`, `.claude/skills/deploy/skill.md`, `.claude/skills/setup/SKILL.md`
258
+ - Rule files: `.claude/rules/task-tracking.md`, `.claude/rules/platform.md`, `.claude/rules/error-handling.md`, `.claude/rules/docs.md`, `.claude/rules/execution.md`, `.claude/rules/observability.md`
256
259
  - One script: `.claude/scripts/statusline-command.js`
257
260
 
258
- Run `elevasis-sdk update` after installing a new SDK version to bring managed files up to date. The command adds missing files directly and flags files that differ from the new template for agent-assisted review via `/meta fix`.
259
-
260
261
  ---
261
262
 
262
263
  ## File Reference
263
264
 
264
- | File | When You Edit It |
265
- | ----------------------- | ------------------------------------------------------------------------------ |
266
- | `src/index.ts` | Adding or removing resources (the `/resource` command does this automatically) |
267
- | `src/<domain>/*.ts` | Writing and modifying workflow logic (organized by business domain) |
268
- | `docs/index.md` | Updating project documentation |
269
- | `docs/project-map.mdx` | Never -- auto-generated by `elevasis-sdk deploy` |
270
- | `docs/priorities.mdx` | When goals or priorities change |
271
- | `elevasis.config.ts` | Changing project-level settings |
272
- | `.env` | Adding environment variables |
273
- | `CLAUDE.md` | Rarely -- only to add project-specific context |
274
- | `.claude/commands/*.md` | Rarely -- commands work well as scaffolded |
265
+ | File | When You Edit It |
266
+ | ------------------------------- | ------------------------------------------------------------------- |
267
+ | `operations/src/index.ts` | Adding or removing resources |
268
+ | `operations/src/<domain>/*.ts` | Writing and modifying workflow logic (organized by business domain) |
269
+ | `docs/index.md` | Updating project documentation |
270
+ | `docs/resources.md` | Never -- auto-generated by `/deploy` and `/elevasis deploy` |
271
+ | `operations/elevasis.config.ts` | Changing project-level settings |
272
+ | `.env` | Adding environment variables |
273
+ | `CLAUDE.md` | Rarely -- only to add project-specific context |
274
+ | `.claude/skills/*/SKILL.md` | Rarely -- skills work well as scaffolded |
275
275
 
276
276
  ---
277
277
 
@@ -6,26 +6,33 @@ This package is the source of truth for shared types, schemas, and contract help
6
6
 
7
7
  ## Import Rules
8
8
 
9
- - Use `@elevasis/core` for browser-safe shared types and schemas.
10
- - Use `@elevasis/core/server` only for Node.js-only helpers and services.
11
- - Use `@elevasis/core/test-utils` for test fixtures and mocks.
12
- - Prefer the narrowest published subpath that matches the work you are doing.
9
+ - Use `@elevasis/core` (root export) for browser-safe shared types and schemas.
10
+ - Use `@elevasis/core/organization-model` for the semantic contract layer.
11
+ - These are the only two subpaths available to external consumers of the published npm package.
12
+ - Paths like `@elevasis/core/server`, `@elevasis/core/test-utils`, `@elevasis/core/platform`, etc. are internal monorepo paths (`@repo/core/...`) and are NOT available to external consumers.
13
13
 
14
14
  ## Published Surface Groups
15
15
 
16
- - `platform` - shared constants, utilities, registry, SSE, and API types.
17
- - `auth` - multi-tenancy types for organizations, users, memberships, invitations, and credentials.
18
- - `execution` - workflow, agent, scheduler, calibration, and execution-interface contracts.
19
- - `commands` - command queue types and schemas.
20
- - `deployments` - deployment response types.
21
- - `operations` - sessions, notifications, observability, activities, triggers, and debug logs.
22
- - `business` - acquisition and SEO contracts, plus the PDF surface under its own subpaths.
23
- - `organization-model` - the semantic contract layer for CRM, lead gen, delivery, features, branding, and navigation.
24
- - `supabase` - generated database types and helpers.
25
- - `forms` - shared form schemas and form-facing types.
26
- - `integrations` - OAuth and credential contracts.
27
- - `projects` - project management request and response schemas.
28
- - `content` - published content metadata types.
16
+ The published `@elevasis/core` npm package exposes exactly two subpaths:
17
+
18
+ - `.` (`@elevasis/core`) - browser-safe shared types, schemas, and constants.
19
+ - `./organization-model` (`@elevasis/core/organization-model`) - the semantic contract layer for CRM, lead gen, delivery, features, branding, and navigation.
20
+
21
+ Within the monorepo, the internal `@repo/core` package exposes additional subpaths for use by `apps/` and other packages:
22
+
23
+ - `@repo/core/server` - Node.js-only helpers and services.
24
+ - `@repo/core/platform` - shared constants, utilities, registry, SSE, and API types.
25
+ - `@repo/core/auth` - multi-tenancy types for organizations, users, memberships, invitations, and credentials.
26
+ - `@repo/core/execution` - workflow, agent, scheduler, calibration, and execution-interface contracts.
27
+ - `@repo/core/commands` - command queue types and schemas.
28
+ - `@repo/core/operations` - sessions, notifications, observability, activities, triggers, and debug logs.
29
+ - `@repo/core/supabase` - generated database types and helpers.
30
+ - `@repo/core/integrations/...` - OAuth and credential contracts.
31
+ - `@repo/core/projects/api-schemas` - project management request and response schemas.
32
+ - `@repo/core/content` - published content metadata types.
33
+ - `@repo/core/test-utils` - test fixtures and mocks (internal use only).
34
+
35
+ These `@repo/core/*` subpaths are NOT available in the published `@elevasis/core` package.
29
36
 
30
37
  ## When To Read Deeper
31
38
 
@@ -4,6 +4,8 @@ The provider surface composes the shared Elevasis service, feature, appearance,
4
4
 
5
5
  ## Exports
6
6
 
7
+ The following are exported from `published.ts`, which is the external consumer surface for `@elevasis/ui/provider`:
8
+
7
9
  - `ElevasisCoreProvider`
8
10
  - `ElevasisFeaturesProvider`
9
11
  - `useElevasisFeatures`
@@ -15,17 +17,16 @@ The provider surface composes the shared Elevasis service, feature, appearance,
15
17
  - `useElevasisServices`
16
18
  - `NotificationProvider`
17
19
  - `useNotificationAdapter`
18
- - `ElevasisUIProvider`
19
20
  - Related provider and service types
20
21
 
22
+ Note: `ElevasisUIProvider` (the Mantine-facing visual layer) is available internally via `@repo/ui` but is NOT exported from the published `@elevasis/ui/provider` subpath. It is only available via the internal `./provider/ui` monorepo subpath.
23
+
21
24
  ## Related Published Subpaths
22
25
 
23
- - `./provider`
24
- - `./provider/ui`
25
- - `./provider/ElevasisServiceContext`
26
+ - `./provider` - headless providers (points to `published.ts`; no Mantine dependency)
27
+ - `./provider/ui` - full provider including Mantine-dependent `ElevasisUIProvider` (internal monorepo use; also published for consumers that opt in)
26
28
 
27
29
  ## Notes
28
30
 
29
- - `published.ts` is the external consumer surface.
30
- - `ElevasisUIProvider` is the Mantine-facing visual layer; `ElevasisCoreProvider` and `ElevasisFeaturesProvider` handle the platform shell.
31
-
31
+ - `published.ts` is the external consumer surface for `@elevasis/ui/provider`.
32
+ - `ElevasisUIProvider` is Mantine-dependent and available only via `@repo/ui` internally or `@elevasis/ui/provider/ui`; it is not included in the headless `./provider` published export.
@@ -44,7 +44,7 @@ Retries are platform-side only -- workers are ephemeral and never retry internal
44
44
 
45
45
  ## Workflow Step Failure
46
46
 
47
- **Status: Planned.** The current runtime uses fail-fast behavior with `WorkflowStepError`. The `onError` callback, `completedSteps`, and `partialOutput` features described below are not yet implemented.
47
+ **Status: Planned.** The current runtime uses fail-fast behavior: when a step handler throws, the worker logs a `step-failed` context entry and re-throws the original error unchanged. The `onError` callback, `completedSteps`, and `partialOutput` features described below are not yet implemented.
48
48
 
49
49
  Default behavior is fail-fast: when a step throws, the workflow fails immediately.
50
50
 
@@ -71,11 +71,13 @@ Default behavior is fail-fast: when a step throws, the workflow fails immediatel
71
71
 
72
72
  ## Agent Failure Modes
73
73
 
74
- **Status: Implemented** (SDK 0.4.2). Agent execution runs in ephemeral worker threads with full tool calling support via `PostMessageLLMAdapter`.
74
+ **Status: Planned.** Agent execution runs in ephemeral worker threads with full tool calling support via `PostMessageLLMAdapter`. The current runtime uses fail-fast behavior for all agent error paths; the richer failure handling described below is not yet implemented.
75
75
 
76
- Agents have multiple failure paths due to the LLM loop:
76
+ **Current behavior:** Any unhandled error from the agent (including `AgentMaxIterationsError` thrown by `@repo/core` when the iteration limit is reached) propagates out of the worker and is reported as a failed execution. The worker sends: `{ type: 'result', status: 'failed', error: 'ErrorName: message', logs, metrics: { durationMs } }`. There is no graceful termination, partial output, or retry logic in the worker itself.
77
77
 
78
- - **Max iterations reached:** The agent returns the best output produced so far, plus a warning flag (`maxIterationsReached: true`). This is a graceful termination, not an error.
78
+ **Planned improvements:**
79
+
80
+ - **Max iterations reached:** Instead of throwing, the agent returns the best output produced so far, plus a warning flag (`maxIterationsReached: true`). This becomes a graceful termination rather than a failure.
79
81
  - **Tool crash:** Tool errors are caught by the SDK runtime, formatted as a tool result, and sent back to the LLM. The LLM decides whether to retry, try a different approach, or give up.
80
82
  - **Model refusal:** If the model refuses the prompt, the SDK retries once with an adjusted system prompt. If the retry also refuses, the agent fails with `code: 'MODEL_REFUSAL'`.
81
83
  - **Model API error:** Network errors, rate limits, or server errors from the model provider. The SDK retries with exponential backoff (3 attempts, 1s/2s/4s), then fails with `code: 'MODEL_ERROR'`.
@@ -37,6 +37,8 @@ This scaffold reference contains universal documentation that applies to all Ele
37
37
  ### Operations
38
38
 
39
39
  - [Workflow Recipes](./operations/workflow-recipes.md) -- workflow anatomy, adapter patterns, trigger patterns
40
+ - [Propagation Pipeline](./operations/propagation-pipeline.md) -- three-layer sync pipeline, verification checks, integration points
41
+ - [Scaffold Maintenance](./operations/scaffold-maintenance.md) -- content placement, auto-generation, adding new scaffold docs
40
42
 
41
43
  ### Reference
42
44
 
@@ -48,12 +50,14 @@ This scaffold reference contains universal documentation that applies to all Ele
48
50
 
49
51
  Content is co-located with its owning package and copied here during SDK build:
50
52
 
51
- | Bundle Path | Source Location | Owner |
52
- | ---------------------------------------- | --------------------------------------------------------- | --------------- |
53
- | `scaffold/recipes/` | `packages/sdk/docs/scaffold/recipes/` | SDK |
54
- | `scaffold/operations/` | `packages/sdk/docs/scaffold/operations/` | SDK |
55
- | `scaffold/ui/` | `packages/ui/src/scaffold/` | UI |
56
- | `scaffold/core/` | `packages/core/src/organization-model/` | Core |
57
- | `scaffold/reference/glossary.md` | `packages/core/src/reference/glossary.md` | Core |
58
- | `scaffold/reference/contracts.md` | `packages/core/src/reference/_generated/contracts.md` | Core (auto-gen) |
59
- | `scaffold/reference/feature-registry.md` | `packages/ui/src/scaffold/_generated/feature-registry.md` | UI (auto-gen) |
53
+ | Bundle Path | Source Location | Owner |
54
+ | --------------------------------------------- | --------------------------------------------------------- | --------------- |
55
+ | `scaffold/recipes/` | `packages/sdk/docs/scaffold/recipes/` | SDK |
56
+ | `scaffold/operations/` | `packages/sdk/docs/scaffold/operations/` | SDK |
57
+ | `scaffold/operations/propagation-pipeline.md` | `packages/sdk/docs/scaffold/operations/` | SDK |
58
+ | `scaffold/operations/scaffold-maintenance.md` | `packages/sdk/docs/scaffold/operations/` | SDK |
59
+ | `scaffold/ui/` | `packages/ui/src/scaffold/` | UI |
60
+ | `scaffold/core/` | `packages/core/src/organization-model/` | Core |
61
+ | `scaffold/reference/glossary.md` | `packages/core/src/reference/glossary.md` | Core |
62
+ | `scaffold/reference/contracts.md` | `packages/core/src/reference/_generated/contracts.md` | Core (auto-gen) |
63
+ | `scaffold/reference/feature-registry.md` | `packages/ui/src/scaffold/_generated/feature-registry.md` | UI (auto-gen) |
@@ -0,0 +1,129 @@
1
+ ---
2
+ title: Propagation Pipeline
3
+ description: Three-layer pipeline that keeps Organization OS artifacts current across the monorepo and all template-derived external projects -- source generation, template sync, and verification.
4
+ ---
5
+
6
+ # Propagation Pipeline
7
+
8
+ `🟢 Stable` -- These pipelines run automatically. Understand them when debugging sync issues or extending the scaffold.
9
+
10
+ ---
11
+
12
+ ## Architecture
13
+
14
+ The Organization OS propagation pipeline has three layers. Each has its own scripts, triggers, and failure modes.
15
+
16
+ ```
17
+ Layer 1: Source Generation (pnpm scaffold:sync)
18
+ Regenerates derived docs from TypeScript types and manifests
19
+
20
+ Layer 2: Template Sync (/external sync)
21
+ Propagates template to downstream external projects
22
+
23
+ Layer 3: Sync Verification (pnpm sync:verify)
24
+ Asserts correctness across all template-derived projects
25
+ ```
26
+
27
+ ---
28
+
29
+ ## Layer 1: Source Generation
30
+
31
+ `pnpm scaffold:sync` is the meta-script that regenerates all derived documentation and validates the output. It chains three sub-scripts:
32
+
33
+ | Script | Input | Output |
34
+ | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
35
+ | `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` |
36
+ | `generate-scaffold-feature-registry.js` | `packages/ui/src/features/*/manifest.ts`, `packages/core/src/organization-model/domains/features.ts` | `packages/ui/src/scaffold/_generated/feature-registry.md` |
37
+ | `generate-reference-artifacts.js` | SDK manifest, navigation sources | `packages/sdk/reference/_reference-manifest.json`, `_navigation.md`, `external/_template/docs/platform-navigation-map.md` |
38
+
39
+ After generation, `validate-reference-artifacts.js` checks that the outputs are consistent. Exit 1 if drifted.
40
+
41
+ ### Trigger Points
42
+
43
+ - **`/external sync` Phase 0 (Scaffold Sync Preflight):** Runs before any writes. Generated file changes fold into the sync scope so they propagate naturally to `_template` and downstream projects.
44
+ - **`/sdk release` Step 1 (Shared Reference Preflight):** Runs before publish. Generated changes must be committed; validator failure is a hard blocker.
45
+ - **Manual:** `pnpm scaffold:sync` is idempotent and safe to run anytime.
46
+ - **Opt-out:** `--skip-scaffold-sync` on `/external sync` (rare).
47
+
48
+ ### Design: Regenerate-on-Propagation
49
+
50
+ Drift is healed at the moment it would otherwise leak downstream. This is cheaper and more reliable than CI-only checks. The single meta-script gives one command to reason about, while the chained sub-scripts remain individually callable for debugging.
51
+
52
+ ---
53
+
54
+ ## Layer 2: Template Sync
55
+
56
+ `/external sync` propagates the `external/_template` to downstream projects. It uses a three-tier model:
57
+
58
+ | Tier | Policy | Examples |
59
+ | ------------------------------ | ----------------------------------------- | ------------------------------------------------------------------- |
60
+ | **Tier 1 (Infrastructure)** | Always replaced from template | Configs, `shared/`, `lib/`, `test-utils/`, `.claude/`, entry points |
61
+ | **Tier 2 (Standard Features)** | Synced unless project has customized them | Standard UI features, common patterns |
62
+ | **Tier 3 (Project-Specific)** | Never touched | `nav-items.ts`, `operations/src/`, `docs/`, `CLAUDE.md` |
63
+
64
+ The sync skill doc (`.claude/skills/external/SKILL.md`) defines the full tier model and phase sequence.
65
+
66
+ ---
67
+
68
+ ## Layer 3: Sync Verification
69
+
70
+ `pnpm sync:verify` runs 86+ automated checks to assert propagation correctness. The script lives at `scripts/external/verify-sync.js`.
71
+
72
+ ### Per-Project Checks (auto-discovered)
73
+
74
+ | Category | What It Checks |
75
+ | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
76
+ | `deps` | `@elevasis/ui`, `@elevasis/sdk`, `@elevasis/core` versions match template |
77
+ | `tier1` | 9 config files match template (with placeholder resolution for project slug/name) |
78
+ | `org-os` | Organization model exists, exports canonical symbols, imports from `@elevasis/core/organization-model`, calls `defineOrganizationModel` + `resolveOrganizationModel`, app-config references org model, `__root.tsx` uses `ElevasisFeaturesProvider` + `canonicalOrganizationModel`, `main.tsx` uses `ElevasisUIProvider`, all 3 CSS subpath imports present |
79
+ | `placeholders` | No unresolved `__PROJECT_SLUG__`, `__PROJECT_NAME__`, `__PROJECT_DESCRIPTION__` in key config files |
80
+ | `scripts` | `ui` and `operations` `package.json` have required npm scripts |
81
+ | `claude` | `.claude/skills/`, `hooks/`, `rules/` exist; `settings.json` is valid JSON |
82
+ | `shared` | `ui/src/shared/`, `lib/`, `test-utils/` exist with minimum file counts |
83
+ | `tier3` | `nav-items.ts` has project-specific customization (not overwritten by template) |
84
+ | `conflicts` | No merge conflict markers in source files |
85
+ | `git` | Working tree is clean |
86
+ | `lockfile` | `pnpm-lock.yaml` and `node_modules` exist |
87
+
88
+ ### Monorepo-Level Checks
89
+
90
+ | Category | What It Checks |
91
+ | ----------- | ----------------------------------------------- |
92
+ | `scaffold` | `pnpm scaffold:sync` passes (artifacts current) |
93
+ | `artifacts` | 5 generated artifacts exist and have content |
94
+
95
+ ### Usage
96
+
97
+ ```bash
98
+ pnpm sync:verify # Post-sync assertion (exit 1 on failures)
99
+ pnpm sync:verify --pre # Pre-sync drift report (always exit 0)
100
+ pnpm sync:verify -- ZentaraHQ # Single project
101
+ ```
102
+
103
+ ### Integration Points
104
+
105
+ - **`/external sync` Phase 0:** Runs `pnpm sync:verify --pre` to show drift before writes
106
+ - **`/external sync` Phase 5/7:** Runs `pnpm sync:verify` to assert correctness after sync
107
+ - **Vitest suite:** Tests at `scripts/external/__tests__/verify-sync.test.js` (project: `scripts-external`)
108
+
109
+ ### Known Acceptable Drifts
110
+
111
+ Some failures are expected and intentional:
112
+
113
+ - **`style.css` in nirvana-marketing:** Project-specific sidebar logo rounding customization
114
+ - **`.gitignore` in ZentaraHQ:** Minor project-specific additions
115
+ - **SDK patch versions:** Template may bump to a patch ahead of downstream projects between syncs
116
+
117
+ These do not indicate sync failures.
118
+
119
+ ---
120
+
121
+ ## Remaining Gaps (Future Work)
122
+
123
+ | Gap | Priority |
124
+ | ------------------------------------------------------------------------- | -------- |
125
+ | Feature manifest validation (all manifests imported in `__root.tsx`) | Medium |
126
+ | TypeScript verification (`check-types` per project) | Medium |
127
+ | Template docs surface validation (`docs/index.md`, `agent-start-here.md`) | Medium |
128
+ | Environment variable template validation (`.env.example` completeness) | Low |
129
+ | CI drift check (fail if worktree dirty after `scaffold:sync`) | Low |
@@ -0,0 +1,125 @@
1
+ ---
2
+ title: Scaffold Maintenance
3
+ description: How scaffold documentation is organized, generated, and bundled into the SDK -- content placement map, auto-generation pipeline, and instructions for adding new scaffold docs.
4
+ ---
5
+
6
+ # Scaffold Maintenance
7
+
8
+ `🟢 Stable` -- Use this when adding or modifying scaffold documentation.
9
+
10
+ ---
11
+
12
+ ## Content Placement Model
13
+
14
+ Scaffold docs are co-located with their owning package and copied into the SDK reference at build time. This makes each package owner responsible for their docs and avoids a single monolithic directory.
15
+
16
+ ### Placement Rules
17
+
18
+ - If a doc explains a single abstraction boundary, **co-locate it** with the owning package.
19
+ - If a doc explains relationships between multiple abstractions, **centralize it** in `packages/sdk/docs/scaffold/`.
20
+ - If a doc can be derived from code or manifests, **generate it**.
21
+ - Hand-authored docs should point to generated maps rather than restating them.
22
+
23
+ ### Source-to-Destination Map
24
+
25
+ | Content | Source | SDK Reference Destination |
26
+ | --------------------------- | --------------------------------------------------------------- | --------------------------------------------- |
27
+ | Organization Model | `packages/core/src/organization-model/organization-model.mdx` | `scaffold/core/organization-model.mdx` |
28
+ | Organization Graph | `packages/core/src/organization-model/organization-graph.mdx` | `scaffold/core/organization-graph.mdx` |
29
+ | Glossary | `packages/core/src/reference/glossary.md` | `scaffold/reference/glossary.md` |
30
+ | Contracts (auto-gen) | `packages/core/src/reference/_generated/contracts.md` | `scaffold/reference/contracts.md` |
31
+ | UI Recipes | `packages/ui/src/scaffold/recipes.md` | `scaffold/ui/recipes.md` |
32
+ | Feature Flags & Gating | `packages/ui/src/scaffold/feature-flags-and-gating.md` | `scaffold/ui/feature-flags-and-gating.md` |
33
+ | Customization | `packages/ui/src/scaffold/customization.md` | `scaffold/ui/customization.md` |
34
+ | Feature Shell | `packages/ui/src/scaffold/feature-shell.mdx` | `scaffold/ui/feature-shell.mdx` |
35
+ | Composition & Extensibility | `packages/ui/src/scaffold/composition-extensibility.mdx` | `scaffold/ui/composition-extensibility.mdx` |
36
+ | Feature Registry (auto-gen) | `packages/ui/src/scaffold/_generated/feature-registry.md` | `scaffold/reference/feature-registry.md` |
37
+ | Scaffold Index | `packages/sdk/docs/scaffold/index.mdx` | `scaffold/index.mdx` |
38
+ | Pathway Recipes (3) | `packages/sdk/docs/scaffold/recipes/` | `scaffold/recipes/` |
39
+ | Workflow Recipes | `packages/sdk/docs/scaffold/operations/workflow-recipes.md` | `scaffold/operations/workflow-recipes.md` |
40
+ | Propagation Pipeline | `packages/sdk/docs/scaffold/operations/propagation-pipeline.md` | `scaffold/operations/propagation-pipeline.md` |
41
+ | This doc | `packages/sdk/docs/scaffold/operations/scaffold-maintenance.md` | `scaffold/operations/scaffold-maintenance.md` |
42
+
43
+ ---
44
+
45
+ ## Auto-Generation Pipeline
46
+
47
+ Two types of docs are auto-generated from source:
48
+
49
+ ### Contracts (`contracts.md`)
50
+
51
+ Generated by `scripts/monorepo/generate-scaffold-contracts.js` from TypeScript source types:
52
+
53
+ - `packages/core/src/organization-model/types.ts` -- Organization Model, Feature System
54
+ - `packages/ui/src/features/registry/types.ts` -- Feature Registry
55
+ - `packages/core/src/platform/registry/types.ts` -- Resource Registry, Deployment Spec
56
+
57
+ Output: `packages/core/src/reference/_generated/contracts.md`
58
+
59
+ ### Feature Registry (`feature-registry.md`)
60
+
61
+ Generated by `scripts/monorepo/generate-scaffold-feature-registry.js` from feature manifests:
62
+
63
+ - `packages/ui/src/features/*/manifest.ts` -- individual feature manifests
64
+ - `packages/core/src/organization-model/domains/features.ts` -- feature key definitions
65
+
66
+ Output: `packages/ui/src/scaffold/_generated/feature-registry.md`
67
+
68
+ ### Reference Artifacts
69
+
70
+ Generated by `scripts/monorepo/generate-reference-artifacts.js`:
71
+
72
+ - `packages/sdk/reference/_reference-manifest.json` -- machine-readable catalog of all reference entries
73
+ - `packages/sdk/reference/_navigation.md` -- navigation table
74
+ - `external/_template/docs/platform-navigation-map.md` -- cross-package reference map for external projects
75
+
76
+ ### Running Generators
77
+
78
+ ```bash
79
+ pnpm scaffold:generate # Run both generators
80
+ pnpm scaffold:sync # Generate + validate (the full loop)
81
+ pnpm sdk-ref:generate # Reference artifacts only
82
+ ```
83
+
84
+ Generated files should never be edited manually. If the output is wrong, fix the source types or the generator script.
85
+
86
+ ---
87
+
88
+ ## SDK Build Pipeline (Reference Copy)
89
+
90
+ `packages/sdk/scripts/copy-reference-docs.mjs` runs during `pnpm --filter @elevasis/sdk build` and has three phases:
91
+
92
+ 1. **Phase 1:** Copies SDK public docs from `apps/docs/content/docs/sdk/` with link rewriting and MDX escape stripping
93
+ 2. **Phase 2:** Copies package-owned reference docs declared in reference manifests
94
+ 3. **Phase 3:** Copies scaffold docs from co-located package sources using the `SCAFFOLD_COPIES` map
95
+
96
+ 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/`.
97
+
98
+ ---
99
+
100
+ ## Adding New Scaffold Docs
101
+
102
+ 1. **Create the source doc** in the appropriate package:
103
+ - Core concepts: `packages/core/src/...`
104
+ - UI patterns: `packages/ui/src/scaffold/...`
105
+ - Cross-package or SDK-owned: `packages/sdk/docs/scaffold/...`
106
+
107
+ 2. **Add to `SCAFFOLD_COPIES`** in `packages/sdk/scripts/copy-reference-docs.mjs`:
108
+
109
+ ```javascript
110
+ { source: 'packages/sdk/docs/scaffold/operations/my-doc.md', target: 'scaffold/operations/my-doc.md' }
111
+ ```
112
+
113
+ 3. **Update the scaffold index** in `packages/sdk/docs/scaffold/index.mdx` with a link and description.
114
+
115
+ 4. **Rebuild the SDK** to verify: `pnpm --filter @elevasis/sdk build`
116
+
117
+ 5. **Update the permanent architecture docs** if the new doc covers a concept already referenced in `apps/docs/content/docs/technical/architecture/scaffold-reference.mdx`.
118
+
119
+ ---
120
+
121
+ ## Freshness Validation
122
+
123
+ External projects have a local freshness validator: `scripts/validate-autogenerated-docs.mjs` (invoked via `pnpm check:autogenerated-docs`). This checks that generated docs in the project match what their generators would produce.
124
+
125
+ At the monorepo level, `pnpm scaffold:sync` followed by `pnpm sync:verify` confirms that all artifacts are current and all downstream projects are consistent.
@@ -89,18 +89,19 @@ If the resource triggers another resource, uses a human checkpoint, or depends o
89
89
  ```ts
90
90
  const org: DeploymentSpec = {
91
91
  // ...
92
- relationships: [
93
- {
94
- source: 'my-workflow',
95
- target: 'email-notification',
96
- type: 'triggers'
92
+ relationships: {
93
+ 'my-workflow': {
94
+ triggers: { workflows: ['email-notification'] }
97
95
  }
98
- ],
96
+ },
99
97
  humanCheckpoints: [
100
98
  {
101
- id: 'approval-gate',
102
- label: 'Approve before sending',
103
- routesTo: { resourceType: 'workflow', resourceId: 'my-workflow' }
99
+ resourceId: 'approval-gate',
100
+ name: 'Approve before sending',
101
+ type: 'human',
102
+ version: '1.0.0',
103
+ status: 'prod',
104
+ routesTo: { workflows: ['my-workflow'] }
104
105
  }
105
106
  ]
106
107
  }
@@ -117,9 +118,10 @@ To make the resource referenceable from the org model (so the Operations graph a
117
118
  ```ts
118
119
  resourceMappings: [
119
120
  {
121
+ id: 'my-workflow',
120
122
  resourceId: 'my-workflow',
121
123
  resourceType: 'workflow',
122
- domainId: 'operations',
124
+ domainIds: ['operations'],
123
125
  label: 'My Workflow'
124
126
  }
125
127
  ]
@@ -213,7 +213,7 @@ See [Composition & Extensibility](./composition-extensibility.mdx) for the sideb
213
213
 
214
214
  ### CRM Sidebar
215
215
 
216
- The CRM sidebar (`packages/ui/src/features/crm/sidebar/`) exports `CrmSidebar`, `CrmSidebarTop`, and `CrmSidebarMiddle`. `SavedViewsPanel` lives in `packages/ui/src/features/crm/workbench/SavedViewsPanel.tsx` and is exported from the CRM workbench barrel; it provides the saved contact views panel rendered within the CRM workbench surface.
216
+ The CRM sidebar (`packages/ui/src/features/crm/sidebar/`) exports `CrmSidebar`, `CrmSidebarTop`, and `CrmSidebarMiddle`. `SavedViewsPanel` lives in `packages/ui/src/features/crm/workbench/SavedViewsPanel.tsx` and is exported from the CRM workbench barrel; it provides the saved contact views panel. It is currently commented out of the default `CrmSidebarMiddle` layout while the CRM sidebar section model is being reworked, but can be re-included explicitly when composing a custom sidebar.
217
217
 
218
218
  ### Operations Sidebar
219
219