@elevasis/sdk 1.25.0 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/cli.cjs +18 -116
  2. package/dist/index.d.ts +165 -48
  3. package/dist/index.js +4 -435
  4. package/dist/node/index.d.ts +36 -36
  5. package/dist/test-utils/index.d.ts +99 -38
  6. package/dist/test-utils/index.js +27 -355
  7. package/dist/types/worker/adapters/clickup.d.ts +22 -0
  8. package/dist/types/worker/adapters/index.d.ts +1 -0
  9. package/dist/worker/index.js +32 -354
  10. package/package.json +2 -2
  11. package/reference/_navigation.md +11 -1
  12. package/reference/_reference-manifest.json +70 -0
  13. package/reference/claude-config/rules/organization-model.md +12 -1
  14. package/reference/claude-config/rules/organization-os.md +12 -1
  15. package/reference/claude-config/skills/om/SKILL.md +13 -5
  16. package/reference/claude-config/skills/om/operations/codify-level-a.md +109 -100
  17. package/reference/claude-config/skills/om/operations/customers.md +10 -6
  18. package/reference/claude-config/skills/om/operations/features.md +7 -3
  19. package/reference/claude-config/skills/om/operations/goals.md +10 -6
  20. package/reference/claude-config/skills/om/operations/identity.md +8 -5
  21. package/reference/claude-config/skills/om/operations/labels.md +17 -1
  22. package/reference/claude-config/skills/om/operations/offerings.md +11 -7
  23. package/reference/claude-config/skills/om/operations/roles.md +11 -7
  24. package/reference/claude-config/skills/om/operations/techStack.md +10 -2
  25. package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +32 -0
  26. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +43 -0
  27. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +40 -0
  28. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +61 -0
  29. package/reference/cli-management.mdx +539 -0
  30. package/reference/cli.mdx +4 -532
  31. package/reference/concepts.mdx +134 -146
  32. package/reference/deployment/api.mdx +296 -297
  33. package/reference/deployment/command-center.mdx +208 -209
  34. package/reference/deployment/index.mdx +194 -195
  35. package/reference/deployment/provided-features.mdx +110 -107
  36. package/reference/deployment/ui-execution.mdx +249 -250
  37. package/reference/framework/index.mdx +111 -195
  38. package/reference/framework/resource-documentation.mdx +90 -0
  39. package/reference/framework/tutorial-system.mdx +135 -135
  40. package/reference/getting-started.mdx +141 -142
  41. package/reference/index.mdx +95 -106
  42. package/reference/packages/ui/src/auth/README.md +6 -6
  43. package/reference/platform-tools/adapters-integration.mdx +300 -301
  44. package/reference/platform-tools/adapters-platform.mdx +552 -553
  45. package/reference/platform-tools/index.mdx +216 -217
  46. package/reference/platform-tools/type-safety.mdx +82 -82
  47. package/reference/resources/index.mdx +348 -349
  48. package/reference/resources/patterns.mdx +446 -449
  49. package/reference/resources/types.mdx +115 -116
  50. package/reference/roadmap.mdx +164 -165
  51. package/reference/rules/organization-model.md +14 -0
  52. package/reference/runtime.mdx +172 -173
  53. package/reference/scaffold/operations/propagation-pipeline.md +1 -1
  54. package/reference/scaffold/recipes/extend-lead-gen.md +130 -77
  55. package/reference/scaffold/reference/contracts.md +376 -446
  56. package/reference/scaffold/reference/glossary.md +8 -6
  57. package/reference/scaffold/ui/feature-flags-and-gating.md +59 -46
  58. package/reference/scaffold/ui/feature-shell.mdx +11 -11
  59. package/reference/scaffold/ui/recipes.md +24 -24
  60. package/reference/troubleshooting.mdx +222 -223
@@ -10,8 +10,8 @@ description: |
10
10
  - The user asks "what governs X?", "what does X control?", "system governs", "what is our
11
11
  identity set to?", "what's our timezone?", "show me all reference docs", "list my roles",
12
12
  "where does outreach-cadence apply?", or similar.
13
- - An agent is editing files matching: core/config/organization-model.ts or
14
- core/config/knowledge/**.
13
+ - An agent is editing files matching: core/config/organization-model.ts,
14
+ core/config/organization-model/**, or core/config/knowledge/**.
15
15
  SKIP this skill when the task is purely UI layout, workflow authoring, or infrastructure
16
16
  work with no reference to org-model or knowledge-graph entities.
17
17
 
@@ -19,6 +19,7 @@ description: |
19
19
  metadata:
20
20
  pathPatterns:
21
21
  - "core/config/organization-model.ts"
22
+ - "core/config/organization-model/**"
22
23
  - "core/config/knowledge/**"
23
24
  - "core/config/extensions/**"
24
25
  promptSignals:
@@ -77,7 +78,8 @@ This skill auto-invokes whenever:
77
78
  - The user asks to read, list, find, show, query, navigate, describe, codify, add, edit,
78
79
  update, toggle, enable, or disable any of those
79
80
  - An agent is editing files matching `core/config/organization-model.ts`,
80
- `core/config/extensions/**`, or `core/config/knowledge/**`
81
+ `core/config/organization-model/**`, `core/config/extensions/**`, or
82
+ `core/config/knowledge/**`
81
83
 
82
84
  Auto-invocation is driven by frontmatter `description`, `metadata.pathPatterns`, and
83
85
  `metadata.promptSignals` -- no explicit prefix is required.
@@ -238,7 +240,11 @@ safety ceremony preserved verbatim from the legacy `/configure` flow.
238
240
 
239
241
  ### Step 1: Snapshot
240
242
 
241
- Read `core/config/organization-model.ts` into memory before any edit. This is the rollback target.
243
+ Determine the target file for the domain being edited (see the domain reference file for
244
+ "Where it lives" guidance). Read that file into memory before any edit. This is the rollback
245
+ target. For unsplit projects the target is `core/config/organization-model.ts`; for split projects
246
+ use the appropriate sub-file (`profile.ts`, `systems.ts`, or `navigation.ts` under
247
+ `core/config/organization-model/`).
242
248
 
243
249
  ### Step 2: Propose
244
250
 
@@ -275,7 +281,9 @@ The rollback is mandatory -- never leave the project in a broken state.
275
281
 
276
282
  **Two-level ceremony:**
277
283
 
278
- - **Level A** -- config-only edits to existing schema fields in `core/config/organization-model.ts`.
284
+ - **Level A** -- config-only edits to existing schema fields in a single config file under
285
+ `core/config/` (the entry `organization-model.ts` for unsplit projects, or the appropriate
286
+ sub-file for split projects — see the domain reference for the correct target).
279
287
  Execute: `.claude/skills/om/operations/codify-level-a.md`
280
288
  - **Level B** -- new Zod extension files in `core/config/extensions/`. Gated to explicit user
281
289
  ask. On casual second mentions of a new type, suggest Level B and wait for confirmation rather
@@ -1,100 +1,109 @@
1
- # Codify Pipeline: Level A (Config-Only Edits)
2
-
3
- Level A is the codify pipeline for changes that land exclusively in
4
- `core/config/organization-model.ts`. No new TypeScript files are created. The entire
5
- ceremony is: snapshot current file, propose the edit, write the edit, validate, and roll back on
6
- failure.
7
-
8
- This pipeline is called by domain operations (identity, customers, offerings, roles, goals,
9
- techStack, systems, actions, labels, and legacy feature compatibility) after the user has confirmed the proposed change. The caller provides
10
- the specific field/block being changed and the proposed new value.
11
-
12
- ---
13
-
14
- ## Pipeline
15
-
16
- ### Step 1: Snapshot
17
-
18
- Before any write, read `core/config/organization-model.ts` and keep the full file content
19
- in memory as the rollback snapshot. Do not write any file during this step.
20
-
21
- ```
22
- Read("core/config/organization-model.ts")
23
- -- store as ROLLBACK_SNAPSHOT
24
- ```
25
-
26
- ### Step 2: Apply the edit
27
-
28
- Use the Edit tool to apply the caller's proposed change to
29
- `core/config/organization-model.ts`.
30
-
31
- Rules for the edit:
32
-
33
- - Edit only the specific field or block the caller specified. Do not reformat or restructure
34
- unrelated sections.
35
- - Preserve all other keys in `defineOrganizationModel({...})` exactly as they are.
36
- - Maintain the existing code style (trailing commas, quote style, indentation) of the file.
37
- - If the target field does not yet exist in the adapter call, add it as a new property in the
38
- appropriate position (following the declared domain order in the schema).
39
-
40
- ### Step 3: TypeScript type-check
41
-
42
- Run the type-check for the operations package:
43
-
44
- ```bash
45
- pnpm -C operations check-types
46
- ```
47
-
48
- Capture stdout and stderr. If the command exits non-zero, proceed to Step 5 (rollback).
49
-
50
- ### Step 4: Runtime schema validation
51
-
52
- Confirm that the adapter's output passes `OrganizationModelSchema.parse()`. The adapter calls
53
- `resolveOrganizationModel()` internally, which merges defaults with overrides and then parses the
54
- result. A successful `check-types` pass is strong evidence that the schema is valid, but
55
- cross-reference checks (segment ID refs in offerings, role reporting refs, period ordering in
56
- goals) are runtime-only.
57
-
58
- If the project exposes a validation script (e.g. `pnpm -C operations check`), run that too:
59
-
60
- ```bash
61
- pnpm -C operations check
62
- ```
63
-
64
- If either validation step fails, proceed to Step 5 (rollback).
65
-
66
- ### Step 5: Rollback (on failure only)
67
-
68
- If Step 3 or Step 4 failed:
69
-
70
- 1. Write the ROLLBACK_SNAPSHOT content back to `core/config/organization-model.ts`
71
- verbatim (use the Write tool with the exact snapshot content).
72
- 2. Confirm the file has been restored by checking that the content matches the snapshot.
73
- 3. Return the error message to the caller.
74
-
75
- The caller is responsible for reporting the rollback to the user.
76
-
77
- ### Step 6: Success signal
78
-
79
- If Steps 3 and 4 both passed, return a success signal to the caller with:
80
-
81
- - The fields changed
82
- - `Type-check: PASS`
83
- - `Schema validation: PASS`
84
-
85
- The caller formats and presents the final report.
86
-
87
- ---
88
-
89
- ## Caller Contract
90
-
91
- Callers must provide before invoking this pipeline:
92
-
93
- - **Target file:** always `core/config/organization-model.ts`
94
- - **Target block:** the specific domain key or sub-key being changed (e.g. `identity`,
95
- `customers.segments`, `roles.roles`, `resources.hubspot`)
96
- - **Proposed value:** the new TypeScript literal to write for that block
97
- - **Confirmed:** the user has already said yes to the proposed change
98
-
99
- This pipeline does not ask the user any questions. All confirmation happens in the domain
100
- operation before this pipeline is invoked.
1
+ # Codify Pipeline: Level A (Config-Only Edits)
2
+
3
+ Level A is the codify pipeline for changes that land in a single config file inside
4
+ `core/config/`. No new TypeScript files are created. The entire ceremony is: snapshot the target
5
+ file, propose the edit, write the edit, validate, and roll back on failure.
6
+
7
+ This pipeline is called by domain operations (identity, customers, offerings, roles, goals,
8
+ techStack, systems, actions, labels, and legacy feature compatibility) after the user has confirmed the proposed change. The caller provides
9
+ the specific field/block being changed, the proposed new value, and the target file.
10
+
11
+ ---
12
+
13
+ ## Pipeline
14
+
15
+ ### Step 1: Snapshot
16
+
17
+ Before any write, read `TARGET_FILE` and keep the full file content in memory as the rollback
18
+ snapshot. Do not write any file during this step.
19
+
20
+ ```
21
+ Read(TARGET_FILE)
22
+ -- store as ROLLBACK_SNAPSHOT
23
+ ```
24
+
25
+ `TARGET_FILE` is the value the caller provides in the Caller Contract (see below). When the
26
+ project has not been split yet, callers pass the default
27
+ `core/config/organization-model.ts`.
28
+
29
+ ### Step 2: Apply the edit
30
+
31
+ Use the Edit tool to apply the caller's proposed change to `TARGET_FILE`.
32
+
33
+ Rules for the edit:
34
+
35
+ - Edit only the specific field or block the caller specified. Do not reformat or restructure
36
+ unrelated sections.
37
+ - For edits targeting `profile.ts`: preserve all other keys in `defineOrganizationModel({...})`
38
+ exactly as they are.
39
+ - Maintain the existing code style (trailing commas, quote style, indentation) of the file.
40
+ - If the target field does not yet exist in the file, add it as a new property in the appropriate
41
+ position (following the declared domain order in the schema).
42
+
43
+ ### Step 3: TypeScript type-check
44
+
45
+ Run the type-check for the operations package:
46
+
47
+ ```bash
48
+ pnpm -C operations check-types
49
+ ```
50
+
51
+ Capture stdout and stderr. If the command exits non-zero, proceed to Step 5 (rollback).
52
+
53
+ ### Step 4: Runtime schema validation
54
+
55
+ Confirm that the adapter's output passes `OrganizationModelSchema.parse()`. The adapter calls
56
+ `resolveOrganizationModel()` internally, which merges defaults with overrides and then parses the
57
+ result. A successful `check-types` pass is strong evidence that the schema is valid, but
58
+ cross-reference checks (segment ID refs in offerings, role reporting refs, period ordering in
59
+ goals) are runtime-only.
60
+
61
+ If the project exposes a validation script (e.g. `pnpm -C operations check`), run that too:
62
+
63
+ ```bash
64
+ pnpm -C operations check
65
+ ```
66
+
67
+ If either validation step fails, proceed to Step 5 (rollback).
68
+
69
+ ### Step 5: Rollback (on failure only)
70
+
71
+ If Step 3 or Step 4 failed:
72
+
73
+ 1. Write the ROLLBACK_SNAPSHOT content back to `TARGET_FILE` verbatim (use the Write tool with
74
+ the exact snapshot content).
75
+ 2. Confirm the file has been restored by checking that the content matches the snapshot.
76
+ 3. Return the error message to the caller.
77
+
78
+ The caller is responsible for reporting the rollback to the user.
79
+
80
+ ### Step 6: Success signal
81
+
82
+ If Steps 3 and 4 both passed, return a success signal to the caller with:
83
+
84
+ - The file edited (`TARGET_FILE`)
85
+ - The fields changed
86
+ - `Type-check: PASS`
87
+ - `Schema validation: PASS`
88
+
89
+ The caller formats and presents the final report.
90
+
91
+ ---
92
+
93
+ ## Caller Contract
94
+
95
+ Callers must provide before invoking this pipeline:
96
+
97
+ - **Target file:** the sub-file path to snapshot and edit. Default (unsplit projects):
98
+ `core/config/organization-model.ts`. Split-project routing:
99
+ - `core/config/organization-model/profile.ts` for identity, customers, offerings, roles, goals
100
+ (and techStack/labels when those keys exist in `profile.ts`)
101
+ - `core/config/organization-model/systems.ts` for systems, actions, resources
102
+ - Callers use the default entry path when the domain does not yet have a dedicated sub-file
103
+ - **Target block:** the specific domain key or sub-key being changed (e.g. `identity`,
104
+ `customers.segments`, `roles.roles`, `resources.hubspot`)
105
+ - **Proposed value:** the new TypeScript literal to write for that block
106
+ - **Confirmed:** the user has already said yes to the proposed change
107
+
108
+ This pipeline does not ask the user any questions. All confirmation happens in the domain
109
+ operation before this pipeline is invoked.
@@ -89,19 +89,23 @@ customers: {
89
89
 
90
90
  ## Where it lives in the adapter
91
91
 
92
- `core/config/organization-model.ts` under the `customers` key of
92
+ **Split projects:** `core/config/organization-model/profile.ts` under the `customers` key of
93
93
  `defineOrganizationModel({...})`.
94
94
 
95
- To read current segments: open the adapter file and inspect the `customers.segments` array, or
96
- use `pnpm exec elevasis-sdk om:cat customers` (external project).
95
+ **Unsplit projects:** `core/config/organization-model.ts` under the same key.
96
+
97
+ To read current segments: open the appropriate file and inspect the `customers.segments` array,
98
+ or use `pnpm exec elevasis-sdk om:cat customers` (external project).
97
99
 
98
100
  ## Write path
99
101
 
100
102
  To add, edit, or remove a segment, the `/om` skill runs the codify ceremony
101
103
  (`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck → Zod parse →
102
- rollback on failure. Only the `segments` array is written; no other keys in the adapter are
103
- touched. When adding, append to the array. When editing, replace the matching entry by `id`.
104
- When removing, filter it out and surface any dangling `targetSegmentIds` references first.
104
+ rollback on failure. Pass `targetFile` as `core/config/organization-model/profile.ts` for split
105
+ projects, or `core/config/organization-model.ts` for unsplit projects. Only the `segments` array
106
+ is written; no other keys in the target file are touched. When adding, append to the array. When
107
+ editing, replace the matching entry by `id`. When removing, filter it out — and surface any
108
+ dangling `targetSegmentIds` references first.
105
109
 
106
110
  ---
107
111
 
@@ -31,10 +31,14 @@ guidance that depends on it; prefer `by-system` everywhere.
31
31
  For natural-language requests like "turn on lead gen", "disable SEO", or "enable CRM":
32
32
 
33
33
  1. Treat the request as a System availability/routing change.
34
- 2. Read `core/config/organization-model.ts` and find the matching System entry or platform
35
- default constant exposed by `@elevasis/core/organization-model`.
34
+ 2. Read the Systems config file to find the matching System entry or platform default constant
35
+ exposed by `@elevasis/core/organization-model`. For split projects this is
36
+ `core/config/organization-model/systems.ts`; for unsplit projects use
37
+ `core/config/organization-model.ts`.
36
38
  3. Propose the exact availability/routing change in plain language.
37
- 4. After confirmation, run the Level A codify ceremony in `operations/codify-level-a.md`.
39
+ 4. After confirmation, run the Level A codify ceremony in `operations/codify-level-a.md`, passing
40
+ `targetFile` as `core/config/organization-model/systems.ts` (split) or
41
+ `core/config/organization-model.ts` (unsplit).
38
42
 
39
43
  Do not create new extension files for a simple on/off change.
40
44
 
@@ -98,19 +98,23 @@ goals: {
98
98
 
99
99
  ## Where it lives in the adapter
100
100
 
101
- `core/config/organization-model.ts` under the `goals` key of
101
+ **Split projects:** `core/config/organization-model/profile.ts` under the `goals` key of
102
102
  `defineOrganizationModel({...})`.
103
103
 
104
- To read current goals: open the adapter file and inspect the `goals.objectives` array, or use
105
- `pnpm exec elevasis-sdk om:cat goals` (external project).
104
+ **Unsplit projects:** `core/config/organization-model.ts` under the same key.
105
+
106
+ To read current goals: open the appropriate file and inspect the `goals.objectives` array, or
107
+ use `pnpm exec elevasis-sdk om:cat goals` (external project).
106
108
 
107
109
  ## Write path
108
110
 
109
111
  To add, edit, remove, or update progress on a goal, the `/om` skill runs the codify
110
112
  ceremony (`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck →
111
- Zod parse → rollback on failure. Only the `objectives` array is written; no other keys in the
112
- adapter are touched. For progress-only updates (changing `currentValue` on an existing outcome),
113
- a targeted edit is preferred over rewriting the entire goals block.
113
+ Zod parse → rollback on failure. Pass `targetFile` as
114
+ `core/config/organization-model/profile.ts` for split projects, or
115
+ `core/config/organization-model.ts` for unsplit projects. Only the `objectives` array is written;
116
+ no other keys in the target file are touched. For progress-only updates (changing `currentValue`
117
+ on an existing outcome), a targeted edit is preferred over rewriting the entire goals block.
114
118
 
115
119
  ---
116
120
 
@@ -74,18 +74,21 @@ identity: {
74
74
 
75
75
  ## Where it lives in the adapter
76
76
 
77
- `core/config/organization-model.ts` under the `identity` key of
77
+ **Split projects:** `core/config/organization-model/profile.ts` under the `identity` key of
78
78
  `defineOrganizationModel({...})`.
79
79
 
80
- To read the current values: open the adapter file and inspect the `identity` block directly, or
81
- use `pnpm exec elevasis-sdk om:cat identity` (external project).
80
+ **Unsplit projects:** `core/config/organization-model.ts` under the same key.
81
+
82
+ To read the current values: open the appropriate file and inspect the `identity` block directly,
83
+ or use `pnpm exec elevasis-sdk om:cat identity` (external project).
82
84
 
83
85
  ## Write path
84
86
 
85
87
  To edit any field, the `/om` skill runs the codify ceremony
86
88
  (`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck → Zod parse →
87
- rollback on failure. Only the confirmed fields are written; no other top-level keys in the adapter
88
- are touched.
89
+ rollback on failure. Pass `targetFile` as `core/config/organization-model/profile.ts` for split
90
+ projects, or `core/config/organization-model.ts` for unsplit projects. Only the confirmed fields
91
+ are written; no other top-level keys in the target file are touched.
89
92
 
90
93
  ---
91
94
 
@@ -4,7 +4,7 @@
4
4
  knowledge nodes, registry entries, and sidebar surfaces in the OrganizationModel. Labels control what users see in the UI and what
5
5
  agents say when narrating state. Editing a label does not change the entry's `id` or
6
6
  `semanticClass` -- only the human-readable display string. This is Level A only (config-only
7
- edits to `core/config/organization-model.ts`).
7
+ edits to a single file under `core/config/`).
8
8
 
9
9
  ## What carries labels
10
10
 
@@ -76,6 +76,22 @@ navigation.sidebar.primary:
76
76
  sales.crm: label "Pipeline" -> "Deal Pipeline"
77
77
  ```
78
78
 
79
+ ## Where it lives
80
+
81
+ **Split projects:** the target file depends on what carries the label being edited:
82
+
83
+ - Status/stage entries and System entries -- `core/config/organization-model/systems.ts`
84
+ - Sidebar navigation surfaces -- `core/config/organization-model/navigation.ts`
85
+ - Business-profile domain entries (customers, offerings, roles, goals) -- `core/config/organization-model/profile.ts`
86
+
87
+ **Unsplit projects:** `core/config/organization-model.ts` for all label edits.
88
+
89
+ Pass the appropriate path as `targetFile` when invoking `operations/codify-level-a.md`.
90
+
91
+ **Note:** `labels` is not currently authored as a standalone top-level domain key in either the
92
+ template or reference tenant model. Label fields are inline properties on the entries listed
93
+ above. Do not invent a top-level `labels` key in `profile.ts`.
94
+
79
95
  ## Validation gate
80
96
 
81
97
  Every label change must pass before codify completes:
@@ -88,20 +88,24 @@ offerings: {
88
88
 
89
89
  ## Where it lives in the adapter
90
90
 
91
- `core/config/organization-model.ts` under the `offerings` key of
91
+ **Split projects:** `core/config/organization-model/profile.ts` under the `offerings` key of
92
92
  `defineOrganizationModel({...})`.
93
93
 
94
- To read current products: open the adapter file and inspect the `offerings.products` array, or
95
- use `pnpm exec elevasis-sdk om:cat offerings` (external project).
94
+ **Unsplit projects:** `core/config/organization-model.ts` under the same key.
95
+
96
+ To read current products: open the appropriate file and inspect the `offerings.products` array,
97
+ or use `pnpm exec elevasis-sdk om:cat offerings` (external project).
96
98
 
97
99
  ## Write path
98
100
 
99
101
  To add, edit, or remove a product, the `/om` skill runs the codify ceremony
100
102
  (`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck → Zod parse →
101
- rollback on failure. Only the `products` array is written; no other keys in the adapter are
102
- touched. Before writing, the skill verifies all `targetSegmentIds` and `deliverySystemId`
103
- references resolve. When adding, append to the array. When editing, replace by `id`. When
104
- removing, filter out and surface any dangling references first.
103
+ rollback on failure. Pass `targetFile` as `core/config/organization-model/profile.ts` for split
104
+ projects, or `core/config/organization-model.ts` for unsplit projects. Only the `products` array
105
+ is written; no other keys in the target file are touched. Before writing, the skill verifies all
106
+ `targetSegmentIds` and `deliverySystemId` references resolve. When adding, append to the array.
107
+ When editing, replace by `id`. When removing, filter out — and surface any dangling references
108
+ first.
105
109
 
106
110
  ---
107
111
 
@@ -78,20 +78,24 @@ roles: {
78
78
 
79
79
  ## Where it lives in the adapter
80
80
 
81
- `core/config/organization-model.ts` under the `roles` key of
81
+ **Split projects:** `core/config/organization-model/profile.ts` under the `roles` key of
82
82
  `defineOrganizationModel({...})`.
83
83
 
84
- To read the current role chart: open the adapter file and inspect the `roles.roles` array, or
85
- use `pnpm exec elevasis-sdk om:cat roles` (external project).
84
+ **Unsplit projects:** `core/config/organization-model.ts` under the same key.
85
+
86
+ To read the current role chart: open the appropriate file and inspect the `roles.roles` array,
87
+ or use `pnpm exec elevasis-sdk om:cat roles` (external project).
86
88
 
87
89
  ## Write path
88
90
 
89
91
  To add, edit, or remove a role, the `/om` skill runs the codify ceremony
90
92
  (`operations/codify-level-a.md`): snapshot → propose → confirm → write → typecheck → Zod parse →
91
- rollback on failure. Only the `roles` array is written; no other keys in the adapter are touched.
92
- Before writing, the skill verifies all `reportsToId` references resolve to IDs that will exist
93
- after the write. When removing a role, the skill surfaces any other roles that `reportsToId` to it
94
- and asks whether to clear those reporting lines before proceeding.
93
+ rollback on failure. Pass `targetFile` as `core/config/organization-model/profile.ts` for split
94
+ projects, or `core/config/organization-model.ts` for unsplit projects. Only the `roles` array is
95
+ written; no other keys in the target file are touched. Before writing, the skill verifies all
96
+ `reportsToId` references resolve to IDs that will exist after the write. When removing a role,
97
+ the skill surfaces any other roles that `reportsToId` to it and asks whether to clear those
98
+ reporting lines before proceeding.
95
99
 
96
100
  ---
97
101
 
@@ -11,10 +11,18 @@ Tech stack information is no longer modeled through `resourceMappings`. Resource
11
11
 
12
12
  ## Where To Look
13
13
 
14
- - `core/config/organization-model.ts` -- Systems and Resources descriptors.
14
+ - **Systems and Resources descriptors** -- `core/config/organization-model/systems.ts` (split
15
+ projects) or `core/config/organization-model.ts` (unsplit projects).
15
16
  - `operations/src/index.ts` -- deployment assembly that binds executable behavior to descriptors.
16
17
  - `pnpm elevasis-sdk project:list --pretty` -- live deployed resource surface.
17
- - Project knowledge nodes -- narrative details such as credential owner, setup notes, and system-of-record rationale when they do not fit the descriptor shape.
18
+ - Project knowledge nodes -- narrative details such as credential owner, setup notes, and
19
+ system-of-record rationale when they do not fit the descriptor shape.
20
+
21
+ **Note:** `techStack` is not currently authored as a top-level key in either the template or
22
+ reference tenant model. Integration context lives in Resource descriptors (`systems.ts`) and
23
+ project knowledge nodes rather than a dedicated `techStack` domain block. Do not invent a
24
+ `techStack` key in `profile.ts`; if the schema adds one in a future SDK release, this note will
25
+ be updated.
18
26
 
19
27
  ## Write Path
20
28
 
@@ -0,0 +1,32 @@
1
+ # Organization Model Define Helpers Release Train
2
+
3
+ ## Why this note exists
4
+
5
+ This train publishes `@elevasis/core` 0.28.0, which adds a generic `defineDomainRecord<TSchema>(schema, entries)` helper plus eleven domain-specific authoring wrappers (`defineAction`/`defineActions`, `defineEntity`/`defineEntities`, `defineSystem`/`defineSystems`, `defineCustomer`/`defineCustomers`, `defineOffering`/`defineOfferings`, `defineRole`/`defineRoles`, `defineGoal`/`defineGoals`, `defineStatus`/`defineStatuses`, `definePolicy`/`definePolicies`, `defineKnowledgeNode`/`defineKnowledgeNodes`). The audit that motivated this train (package vs. project boundary) found that projects were hand-rolling the "validate every entry against its schema, then return an id-keyed map" pattern in multiple places — the helpers eliminate that duplication and make validation uniform.
6
+
7
+ After this publish, the template's `external/_template/core/config/organization-model.ts` drops 6 local `TemplateX` type aliases and 2 local helper redefinitions in favor of the published equivalents.
8
+
9
+ ## Applies to
10
+
11
+ - `external/_template/core/config/organization-model.ts` (template authoring surface)
12
+ - Any downstream tenant project derived from `_template` that still carries local `TemplateActionRef` / `TemplateActionEntry` / `TemplateEntityEntry` / `TemplateSystemEntry` / `TemplateResourceOntologyBinding` / `TemplateWorkflowResourceEntry` aliases, or local `listAllSystems` / `toDomainRecord` helpers
13
+ - `external/_template/core/package.json` and `external/_template/operations/package.json` (baseline cascade — both pin `@elevasis/core`)
14
+
15
+ ## Required actions
16
+
17
+ - Refresh `@elevasis/core` to 0.28.0 in `core/package.json` and `operations/package.json` (caret range picks it up automatically; `pnpm install` to actualize).
18
+ - Drop the 6 `TemplateX` type aliases from `core/config/organization-model.ts` and import the canonical types from `@elevasis/core/organization-model` instead: `ActionRef`, `OrganizationAction`, `Entity`, `OrganizationModelSystemEntry`, `ResourceOntologyBinding`, `WorkflowResourceEntry`.
19
+ - Drop the local `listAllSystems` and `toDomainRecord` helpers; use `listAllSystems` and `defineDomainRecord` from `@elevasis/core/organization-model`.
20
+ - Keep `TemplateWorkflowResourceEntry` ONLY as an intersection that adds the `systemId` compat mirror plus required `title`/`description`: `WorkflowResourceEntry & { systemId: string; title: string; description: string }`. This compat mirror is the sole justified divergence.
21
+ - Author calls that build domain records should migrate from the hand-rolled `toDomainRecord(entries)` form to the validating `defineDomainRecord(Schema, entries)` form, or use the domain-specific `defineActions`, `defineEntities`, etc. wrappers where applicable.
22
+
23
+ ## Verification
24
+
25
+ - `pnpm -C core check-types`
26
+ - `pnpm -C operations check-types`
27
+ - `pnpm -C ui check-types`
28
+ - Run `pnpm sync:verify` from the monorepo root after `/external sync --all` propagates.
29
+
30
+ ## Not handled by /git-sync
31
+
32
+ `/git-sync` does not republish `@elevasis/core`, edit your `core/config/organization-model.ts` for you, or migrate hand-rolled `toDomainRecord` call sites to `defineDomainRecord`. Those edits are intentional authoring changes; review them in a normal PR. The `pnpm install` after the dependency bump IS handled.
@@ -0,0 +1,43 @@
1
+ # Access Model And Right Panel Host
2
+
3
+ ## Why this note exists
4
+
5
+ This release train replaces the retired feature-access route guards with the unified Access Model and adds the shared right-panel host plus shared Notes view to the template UI. Downstream projects need to accept the new package baselines and reconcile any project-owned routes or dashboard surfaces that still use the old `SystemGuard` / `createFeatureAccessHook` pattern.
6
+
7
+ ## Applies to
8
+
9
+ Template-derived projects that use `@elevasis/ui` route guards, dashboard feature availability, right-panel UI, Notes, or template-managed route files under `ui/src/routes/**` and `ui/src/features/**`.
10
+
11
+ Projects without custom route guards or right-panel customizations can accept the template updates normally, then run the verification gates below.
12
+
13
+ ## Required actions
14
+
15
+ 1. Pull the prepared template/package updates with `/git-sync` after the SDK ship train publishes `@elevasis/core` and `@elevasis/ui`.
16
+ 2. Replace project-owned `SystemGuard`, `SurfaceGuard`, `AdminGuard`, `createFeatureAccessHook`, `useOrganizationPermissions`, and `useHasPermission` usages with `AccessGuard`, `useAccess`, and `AccessKeys`.
17
+ 3. Keep app-local right-panel registries project-owned, but compose them with `RightPanelProvider`, `RightPanelLayer`, and shared views from `@elevasis/ui/features/right-panel-host` and `@elevasis/ui/features/notes`.
18
+ 4. Preserve tenant-specific route content, Organization Model Systems, and custom dashboard cards while updating their access checks to the new Access Model.
19
+ 5. Do not import workspace packages such as `@repo/core` or `@repo/ui` from external projects. Use the published `@elevasis/*` packages.
20
+
21
+ ## Verification
22
+
23
+ Run the project baseline gates after syncing:
24
+
25
+ ```powershell
26
+ pnpm -C ui check-types
27
+ pnpm -C ui build
28
+ pnpm -C ui test
29
+ pnpm -C core test
30
+ pnpm test
31
+ ```
32
+
33
+ For projects with custom route guards, also grep for retired access APIs:
34
+
35
+ ```powershell
36
+ rg "SystemGuard|SurfaceGuard|AdminGuard|createFeatureAccessHook|useOrganizationPermissions|useHasPermission" ui/src
37
+ ```
38
+
39
+ For projects adopting the right-panel host, open the app shell and confirm the panel trigger opens Notes, closes cleanly, preserves width on desktop, and does not hide project-owned navigation controls.
40
+
41
+ ## Not handled by /git-sync
42
+
43
+ `/git-sync` updates template-propagated files and package baselines. It does not rewrite project-owned custom routes, custom dashboard widgets, custom right-panel views, tenant Organization Model entries, or tenant-specific access semantics. Those remain project-authored decisions that must be migrated to the Access Model by the downstream maintainer.
@@ -0,0 +1,40 @@
1
+ # Lead Gen Tenant Config Boundary
2
+
3
+ ## Why this note exists
4
+
5
+ The lead-gen list-builder package boundary changed so shared packages own reusable mechanics and tenant projects own lead-gen values. `@elevasis/core` no longer carries Elevasis tenant build-template defaults, and `@elevasis/ui` derives lead-gen configuration from the provider-injected Organization Model through `useLeadGenConfig()` instead of importing Elevasis-owned defaults.
6
+
7
+ ## Applies to
8
+
9
+ Template-derived projects that use the shared lead-gen pages, list-builder runner, build templates, workflow actions, or `@elevasis/ui/features/lead-gen`.
10
+
11
+ Projects with no lead-gen surface and no list-builder workflows can ignore the lead-gen authoring steps, but should still accept package baseline updates from the release train.
12
+
13
+ ## Required actions
14
+
15
+ 1. Pull the template/package updates with `/git-sync` after the SDK ship train lands.
16
+ 2. Keep lead-gen stage catalogs, build templates, workflow actions, resources, topology, and credential names in the project Organization Model (`core/config/organization-model.ts`).
17
+ 3. Provide project-owned list-builder action wiring in the UI, typically through `ui/src/config/listActions.ts` and the local app shell.
18
+ 4. Keep tenant workflow implementations in the project operations package and use `listBuilderWorkflow` from `@elevasis/sdk/worker` for stage handlers.
19
+ 5. Do not import Elevasis workspace packages such as `@repo/elevasis-core`, `@repo/core`, or `@repo/ui` from an external project. Use the published `@elevasis/*` packages.
20
+ 6. If the project previously relied on shared UI fallback defaults for lead-gen templates or export workflow IDs, add those values to the project Organization Model before expecting list creation or the build runner to behave usefully.
21
+
22
+ ## Verification
23
+
24
+ Run the project baseline gates after syncing:
25
+
26
+ ```powershell
27
+ pnpm -C core test
28
+ pnpm -C operations check-types
29
+ pnpm -C operations check
30
+ pnpm -C operations test
31
+ pnpm -C ui check-types
32
+ pnpm -C ui build
33
+ pnpm test
34
+ ```
35
+
36
+ For projects with lead-gen enabled, also open the lead-gen list creation and list detail routes and confirm the shared UI sees the project-authored build templates, stage labels, and export workflow.
37
+
38
+ ## Not handled by /git-sync
39
+
40
+ `/git-sync` updates template-propagated files and package baselines. It does not invent project-specific lead-gen catalogs, workflow contracts, credentials, or `listActions` for an existing tenant. Those remain project-authored decisions.