@elevasis/sdk 1.22.1 → 1.24.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 (70) hide show
  1. package/dist/cli.cjs +5738 -6283
  2. package/dist/index.d.ts +187 -242
  3. package/dist/index.js +1830 -2912
  4. package/dist/node/index.d.ts +3722 -2
  5. package/dist/node/index.js +163 -1
  6. package/dist/test-utils/index.d.ts +61 -72
  7. package/dist/test-utils/index.js +240 -1479
  8. package/dist/types/worker/index.d.ts +2 -0
  9. package/dist/types/worker/utils.d.ts +9 -0
  10. package/dist/worker/index.js +261 -1487
  11. package/package.json +5 -4
  12. package/reference/_navigation.md +1 -0
  13. package/reference/claude-config/rules/active-change-index.md +11 -80
  14. package/reference/claude-config/rules/agent-start-here.md +11 -277
  15. package/reference/claude-config/rules/deployment.md +11 -57
  16. package/reference/claude-config/rules/error-handling.md +11 -56
  17. package/reference/claude-config/rules/execution.md +11 -40
  18. package/reference/claude-config/rules/frontend.md +11 -43
  19. package/reference/claude-config/rules/observability.md +11 -31
  20. package/reference/claude-config/rules/operations.md +11 -80
  21. package/reference/claude-config/rules/organization-model.md +7 -115
  22. package/reference/claude-config/rules/organization-os.md +8 -112
  23. package/reference/claude-config/rules/package-taxonomy.md +11 -33
  24. package/reference/claude-config/rules/platform.md +11 -42
  25. package/reference/claude-config/rules/shared-types.md +10 -48
  26. package/reference/claude-config/rules/task-tracking.md +11 -47
  27. package/reference/claude-config/rules/ui.md +11 -200
  28. package/reference/claude-config/rules/vibe.md +11 -235
  29. package/reference/claude-config/skills/om/SKILL.md +324 -0
  30. package/reference/claude-config/skills/{knowledge → om}/operations/customers.md +110 -109
  31. package/reference/claude-config/skills/{knowledge → om}/operations/features.md +77 -76
  32. package/reference/claude-config/skills/{knowledge → om}/operations/goals.md +119 -118
  33. package/reference/claude-config/skills/{knowledge → om}/operations/identity.md +94 -93
  34. package/reference/claude-config/skills/{knowledge → om}/operations/labels.md +94 -94
  35. package/reference/claude-config/skills/{knowledge → om}/operations/offerings.md +110 -109
  36. package/reference/claude-config/skills/{knowledge → om}/operations/roles.md +100 -99
  37. package/reference/claude-config/skills/{knowledge → om}/operations/techStack.md +30 -30
  38. package/reference/claude-config/skills/project/SKILL.md +1088 -1088
  39. package/reference/claude-config/skills/setup/SKILL.md +275 -275
  40. package/reference/claude-config/skills/tutorial/SKILL.md +259 -259
  41. package/reference/claude-config/skills/tutorial/progress-template.md +74 -74
  42. package/reference/claude-config/skills/tutorial/technical.md +1303 -1303
  43. package/reference/claude-config/skills/tutorial/vibe-coder.md +890 -890
  44. package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +83 -83
  45. package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +52 -0
  46. package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +33 -0
  47. package/reference/rules/active-change-index.md +83 -0
  48. package/reference/rules/agent-start-here.md +280 -0
  49. package/reference/rules/deployment.md +60 -0
  50. package/reference/rules/error-handling.md +59 -0
  51. package/reference/rules/execution.md +43 -0
  52. package/reference/rules/frontend.md +46 -0
  53. package/reference/rules/observability.md +34 -0
  54. package/reference/rules/operations.md +85 -0
  55. package/reference/rules/organization-model.md +119 -0
  56. package/reference/rules/organization-os.md +118 -0
  57. package/reference/rules/package-taxonomy.md +36 -0
  58. package/reference/rules/platform.md +45 -0
  59. package/reference/rules/shared-types.md +52 -0
  60. package/reference/rules/task-tracking.md +50 -0
  61. package/reference/rules/ui.md +203 -0
  62. package/reference/rules/vibe.md +238 -0
  63. package/reference/scaffold/core/organization-graph.mdx +4 -5
  64. package/reference/scaffold/core/organization-model.mdx +1 -1
  65. package/reference/scaffold/recipes/query-the-knowledge-graph.md +189 -185
  66. package/reference/scaffold/reference/contracts.md +108 -96
  67. package/reference/scaffold/reference/glossary.md +71 -69
  68. package/reference/claude-config/skills/knowledge/SKILL.md +0 -345
  69. /package/reference/claude-config/skills/{knowledge → om}/operations/codify-level-a.md +0 -0
  70. /package/reference/claude-config/skills/{knowledge → om}/operations/codify-level-b.md +0 -0
@@ -1,76 +1,77 @@
1
- # Features Compatibility Notes
2
-
3
- `features` is legacy organization-model wording. Current Organization OS vocabulary is
4
- System/Action oriented:
5
-
6
- - **Systems** describe availability, routing, ownership, navigation grouping, and knowledge
7
- mounts.
8
- - **Actions** describe invokable operations such as workflows, agents, commands, and UI-triggered
9
- tasks.
10
-
11
- Use this file only when older prompts, browser copy text, SDK references, or scaffold recipes still
12
- say "feature". For current tenant organization-model work, route the user to Systems and Actions
13
- wording and use `/by-system/<id>` knowledge paths.
14
-
15
- ## Compatibility Mapping
16
-
17
- | Legacy wording | Current wording |
18
- | ---------------------------------- | ---------------------------------------------------- |
19
- | Feature toggle | System availability or routing toggle |
20
- | Feature ID | System ID when discussing Organization OS |
21
- | Add a custom feature | Add or extend a System, then define any Actions |
22
- | Feature governs X | System governs X |
23
- | `/knowledge read-folder feature:x` | `/knowledge read-folder system:x` |
24
- | `/by-feature/x` | `/by-system/x` |
25
-
26
- `by-feature` may still exist as a legacy compatibility axis in older tools. Do not introduce new
27
- guidance that depends on it; prefer `by-system` everywhere.
28
-
29
- ## What To Do With Toggle Requests
30
-
31
- For natural-language requests like "turn on lead gen", "disable SEO", or "enable CRM":
32
-
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`.
36
- 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`.
38
-
39
- Do not create new extension files for a simple on/off change.
40
-
41
- ## When Level B Applies
42
-
43
- Level B applies only when the user explicitly asks for a new structural concept that cannot be
44
- represented as an existing System or Action configuration. In current vocabulary this usually
45
- means adding a project-owned extension under `core/config/extensions/` and wiring it into the
46
- organization model.
47
-
48
- Older references may call this "adding a custom feature"; translate it to "add or extend a
49
- System and define any Actions it owns" before invoking `operations/codify-level-b.md`.
50
-
51
- ## UI Package Exception
52
-
53
- Keep the word `features` only for legacy frontend source paths that still use that directory
54
- name, such as `ui/src/features/`. Current published shell APIs are System-oriented:
55
- `SystemShell`, `SystemModule`, and `ElevasisSystemsProvider`.
56
-
57
- ## Read Examples
58
-
59
- Use current system paths:
60
-
61
- ```bash
62
- pnpm exec elevasis-sdk knowledge:ls /by-system/<id> --ids-only
63
- pnpm exec elevasis-sdk knowledge:cat <node-id>
64
- ```
65
-
66
- Legacy browser output:
67
-
68
- ```text
69
- /knowledge read-folder feature:<id>
70
- ```
71
-
72
- Resolve as:
73
-
74
- ```bash
75
- pnpm exec elevasis-sdk knowledge:ls /by-system/<id> --ids-only
76
- ```
1
+ # Features Compatibility Notes
2
+
3
+ `features` is legacy organization-model wording. Current Organization OS vocabulary is
4
+ System/Action oriented:
5
+
6
+ - **Systems** describe availability, routing, ownership, navigation grouping, and knowledge
7
+ mounts.
8
+ - **Actions** describe invokable operations such as workflows, agents, commands, and UI-triggered
9
+ tasks.
10
+
11
+ Use this file only when older prompts, browser copy text, SDK references, or scaffold recipes still
12
+ say "feature". For current tenant organization-model work, route the user to Systems and Actions
13
+ wording and use `/by-system/<id>` knowledge paths.
14
+
15
+ ## Compatibility Mapping
16
+
17
+ | Legacy wording | Current wording |
18
+ | ------------------------------------------------------------------------------------- | ----------------------------------------------- |
19
+ | Feature toggle | System availability or routing toggle |
20
+ | Feature ID | System ID when discussing Organization OS |
21
+ | Add a custom feature | Add or extend a System, then define any Actions |
22
+ | Feature governs X | System governs X |
23
+ | `/om read-folder feature:x` (legacy `/knowledge read-folder feature:x` also accepted) | `/om read-folder system:x` |
24
+ | `/by-feature/x` | `/by-system/x` |
25
+
26
+ `by-feature` may still exist as a legacy compatibility axis in older tools. Do not introduce new
27
+ guidance that depends on it; prefer `by-system` everywhere.
28
+
29
+ ## What To Do With Toggle Requests
30
+
31
+ For natural-language requests like "turn on lead gen", "disable SEO", or "enable CRM":
32
+
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`.
36
+ 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`.
38
+
39
+ Do not create new extension files for a simple on/off change.
40
+
41
+ ## When Level B Applies
42
+
43
+ Level B applies only when the user explicitly asks for a new structural concept that cannot be
44
+ represented as an existing System or Action configuration. In current vocabulary this usually
45
+ means adding a project-owned extension under `core/config/extensions/` and wiring it into the
46
+ organization model.
47
+
48
+ Older references may call this "adding a custom feature"; translate it to "add or extend a
49
+ System and define any Actions it owns" before invoking `operations/codify-level-b.md`.
50
+
51
+ ## UI Package Exception
52
+
53
+ Keep the word `features` only for legacy frontend source paths that still use that directory
54
+ name, such as `ui/src/features/`. Current published shell APIs are System-oriented:
55
+ `SystemShell`, `SystemModule`, and `ElevasisSystemsProvider`.
56
+
57
+ ## Read Examples
58
+
59
+ Use current system paths:
60
+
61
+ ```bash
62
+ pnpm exec elevasis-sdk om:ls /by-system/<id> --ids-only
63
+ pnpm exec elevasis-sdk om:cat <node-id>
64
+ ```
65
+
66
+ Legacy browser output (the `/knowledge` slash form is preserved as a permanent alias for `/om`):
67
+
68
+ ```text
69
+ /knowledge read-folder feature:<id>
70
+ /om read-folder feature:<id>
71
+ ```
72
+
73
+ Resolve as:
74
+
75
+ ```bash
76
+ pnpm exec elevasis-sdk om:ls /by-system/<id> --ids-only
77
+ ```
@@ -1,118 +1,119 @@
1
- # Goals domain
2
-
3
- The `goals` domain captures what the organization is working toward — time-bounded goals with
4
- measurable outcomes. The schema shape is OKR-inspired (objectives + key results) but all
5
- user-facing language must say "goals" and "measurable outcomes". Never say "OKR", "objective",
6
- or "key result" to the user.
7
-
8
- Agents use this domain for quarterly planning, priority routing, and understanding which outcomes
9
- matter most right now.
10
-
11
- ## Schema
12
-
13
- Source: `packages/core/src/organization-model/domains/goals.ts`
14
-
15
- ```typescript
16
- GoalsDomainSchema = z.object({
17
- objectives: z.array(ObjectiveSchema).default([])
18
- })
19
-
20
- ObjectiveSchema = z.object({
21
- id: z.string().trim().min(1).max(100), // stable ID, e.g. "goal-grow-arr-q1-2026"
22
- description: z.string().trim().min(1).max(1000), // plain-language goal statement
23
- periodStart: z.string().regex(ISO_DATE), // YYYY-MM-DD — must be before periodEnd
24
- periodEnd: z.string().regex(ISO_DATE), // YYYY-MM-DD — enforced in superRefine
25
- keyResults: z.array(KeyResultSchema).default([]) // measurable outcomes under this goal
26
- })
27
-
28
- KeyResultSchema = z.object({
29
- id: z.string().trim().min(1).max(100), // e.g. "kr-revenue-q1"
30
- description: z.string().trim().min(1).max(500), // e.g. "Increase trial-to-paid conversion"
31
- targetMetric: z.string().trim().min(1).max(200), // what is being measured, e.g. "monthly revenue"
32
- currentValue: z.number().default(0), // current tracked value
33
- targetValue: z.number().optional() // target to hit (omit if directional)
34
- })
35
- ```
36
-
37
- ## Field reference
38
-
39
- | Field | Type | Notes |
40
- | ------------- | ------------- | ---------------------------------------------------------- |
41
- | `id` | string (100) | Stable key; e.g. `"goal-grow-arr-q1-2026"` |
42
- | `description` | string (1000) | Plain-language goal statement; min 1 char required |
43
- | `periodStart` | string | ISO date `YYYY-MM-DD`; must be strictly before `periodEnd` |
44
- | `periodEnd` | string | ISO date `YYYY-MM-DD`; enforced by `superRefine` |
45
- | `keyResults` | array | Measurable outcomes under this goal; defaults to `[]` |
46
-
47
- Key result fields:
48
-
49
- | Field | Type | Notes |
50
- | -------------- | ------------ | --------------------------------------------------- |
51
- | `id` | string (100) | Stable key; e.g. `"kr-revenue-q1"` |
52
- | `description` | string (500) | What is being tracked; min 1 char required |
53
- | `targetMetric` | string (200) | The metric name; e.g. `"monthly recurring revenue"` |
54
- | `currentValue` | number | Current value; defaults to `0` |
55
- | `targetValue` | number | Optional target; omit if the outcome is directional |
56
-
57
- ## Validation rules
58
-
59
- - `periodEnd` must be strictly after `periodStart`; enforced at parse time by
60
- `OrganizationModelSchema.superRefine()`; setting equal dates is also invalid
61
- - Both `periodStart` and `periodEnd` must match `YYYY-MM-DD` ISO date format exactly
62
- - The internal field name for the goals array is `objectives` (not `goals`) — this is a
63
- schema-level name, not user-facing vocabulary; always say "goals" to users
64
- - The internal field name for measurable outcomes is `keyResults` (not `outcomes`) — same
65
- convention applies; say "measurable outcomes" to users
66
- - `targetValue` is optional for directional goals where there is no specific number target
67
-
68
- ## Examples
69
-
70
- ```typescript
71
- goals: {
72
- objectives: [
73
- {
74
- id: "goal-arr-q1-2026",
75
- description: "Reach $50K MRR by end of Q1 2026",
76
- periodStart: "2026-01-01",
77
- periodEnd: "2026-03-31",
78
- keyResults: [
79
- {
80
- id: "kr-mrr-q1",
81
- description: "Grow monthly recurring revenue",
82
- targetMetric: "monthly recurring revenue (MRR)",
83
- currentValue: 32000,
84
- targetValue: 50000
85
- },
86
- {
87
- id: "kr-churn-q1",
88
- description: "Reduce monthly churn rate",
89
- targetMetric: "monthly churn rate (%)",
90
- currentValue: 4.2,
91
- targetValue: 2.5
92
- }
93
- ]
94
- }
95
- ]
96
- }
97
- ```
98
-
99
- ## Where it lives in the adapter
100
-
101
- `core/config/organization-model.ts` under the `goals` key of
102
- `defineOrganizationModel({...})`.
103
-
104
- To read current goals: open the adapter file and inspect the `goals.objectives` array, or use
105
- `pnpm exec elevasis-sdk knowledge:cat goals` (external project).
106
-
107
- ## Write path
108
-
109
- To add, edit, remove, or update progress on a goal, the `/knowledge` skill runs the codify
110
- 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.
114
-
115
- ---
116
-
117
- **Read via `/knowledge`** — natural-language queries like "what are our goals this quarter?" or
118
- "what's the current MRR against target?" route to this domain via the skill's intent classifier.
1
+ # Goals domain
2
+
3
+ The `goals` domain captures what the organization is working toward — time-bounded goals with
4
+ measurable outcomes. The schema shape is OKR-inspired (objectives + key results) but all
5
+ user-facing language must say "goals" and "measurable outcomes". Never say "OKR", "objective",
6
+ or "key result" to the user.
7
+
8
+ Agents use this domain for quarterly planning, priority routing, and understanding which outcomes
9
+ matter most right now.
10
+
11
+ ## Schema
12
+
13
+ Source: `packages/core/src/organization-model/domains/goals.ts`
14
+
15
+ ```typescript
16
+ GoalsDomainSchema = z.object({
17
+ objectives: z.array(ObjectiveSchema).default([])
18
+ })
19
+
20
+ ObjectiveSchema = z.object({
21
+ id: z.string().trim().min(1).max(100), // stable ID, e.g. "goal-grow-arr-q1-2026"
22
+ description: z.string().trim().min(1).max(1000), // plain-language goal statement
23
+ periodStart: z.string().regex(ISO_DATE), // YYYY-MM-DD — must be before periodEnd
24
+ periodEnd: z.string().regex(ISO_DATE), // YYYY-MM-DD — enforced in superRefine
25
+ keyResults: z.array(KeyResultSchema).default([]) // measurable outcomes under this goal
26
+ })
27
+
28
+ KeyResultSchema = z.object({
29
+ id: z.string().trim().min(1).max(100), // e.g. "kr-revenue-q1"
30
+ description: z.string().trim().min(1).max(500), // e.g. "Increase trial-to-paid conversion"
31
+ targetMetric: z.string().trim().min(1).max(200), // what is being measured, e.g. "monthly revenue"
32
+ currentValue: z.number().default(0), // current tracked value
33
+ targetValue: z.number().optional() // target to hit (omit if directional)
34
+ })
35
+ ```
36
+
37
+ ## Field reference
38
+
39
+ | Field | Type | Notes |
40
+ | ------------- | ------------- | ---------------------------------------------------------- |
41
+ | `id` | string (100) | Stable key; e.g. `"goal-grow-arr-q1-2026"` |
42
+ | `description` | string (1000) | Plain-language goal statement; min 1 char required |
43
+ | `periodStart` | string | ISO date `YYYY-MM-DD`; must be strictly before `periodEnd` |
44
+ | `periodEnd` | string | ISO date `YYYY-MM-DD`; enforced by `superRefine` |
45
+ | `keyResults` | array | Measurable outcomes under this goal; defaults to `[]` |
46
+
47
+ Key result fields:
48
+
49
+ | Field | Type | Notes |
50
+ | -------------- | ------------ | --------------------------------------------------- |
51
+ | `id` | string (100) | Stable key; e.g. `"kr-revenue-q1"` |
52
+ | `description` | string (500) | What is being tracked; min 1 char required |
53
+ | `targetMetric` | string (200) | The metric name; e.g. `"monthly recurring revenue"` |
54
+ | `currentValue` | number | Current value; defaults to `0` |
55
+ | `targetValue` | number | Optional target; omit if the outcome is directional |
56
+
57
+ ## Validation rules
58
+
59
+ - `periodEnd` must be strictly after `periodStart`; enforced at parse time by
60
+ `OrganizationModelSchema.superRefine()`; setting equal dates is also invalid
61
+ - Both `periodStart` and `periodEnd` must match `YYYY-MM-DD` ISO date format exactly
62
+ - The internal field name for the goals array is `objectives` (not `goals`) — this is a
63
+ schema-level name, not user-facing vocabulary; always say "goals" to users
64
+ - The internal field name for measurable outcomes is `keyResults` (not `outcomes`) — same
65
+ convention applies; say "measurable outcomes" to users
66
+ - `targetValue` is optional for directional goals where there is no specific number target
67
+
68
+ ## Examples
69
+
70
+ ```typescript
71
+ goals: {
72
+ objectives: [
73
+ {
74
+ id: "goal-arr-q1-2026",
75
+ description: "Reach $50K MRR by end of Q1 2026",
76
+ periodStart: "2026-01-01",
77
+ periodEnd: "2026-03-31",
78
+ keyResults: [
79
+ {
80
+ id: "kr-mrr-q1",
81
+ description: "Grow monthly recurring revenue",
82
+ targetMetric: "monthly recurring revenue (MRR)",
83
+ currentValue: 32000,
84
+ targetValue: 50000
85
+ },
86
+ {
87
+ id: "kr-churn-q1",
88
+ description: "Reduce monthly churn rate",
89
+ targetMetric: "monthly churn rate (%)",
90
+ currentValue: 4.2,
91
+ targetValue: 2.5
92
+ }
93
+ ]
94
+ }
95
+ ]
96
+ }
97
+ ```
98
+
99
+ ## Where it lives in the adapter
100
+
101
+ `core/config/organization-model.ts` under the `goals` key of
102
+ `defineOrganizationModel({...})`.
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).
106
+
107
+ ## Write path
108
+
109
+ To add, edit, remove, or update progress on a goal, the `/om` skill runs the codify
110
+ 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.
114
+
115
+ ---
116
+
117
+ **Read via `/om`** (legacy `/knowledge` alias also accepted) — natural-language queries like
118
+ "what are our goals this quarter?" or "what's the current MRR against target?" route to this
119
+ domain via the skill's intent classifier.
@@ -1,93 +1,94 @@
1
- # Identity domain
2
-
3
- The `identity` domain captures the organization's legal identity, purpose, and operational anchors.
4
- It is distinct from `branding` (display identity: logos, product names) — editing identity fields
5
- here does not touch any visual or branding configuration.
6
-
7
- ## Schema
8
-
9
- Source: `packages/core/src/organization-model/domains/identity.ts`
10
-
11
- ```typescript
12
- IdentityDomainSchema = z.object({
13
- mission: z.string().trim().max(1000).default(''),
14
- vision: z.string().trim().max(1000).default(''),
15
- legalName: z.string().trim().max(200).default(''),
16
- entityType: z.string().trim().max(100).default(''), // e.g. "LLC", "Corporation"
17
- jurisdiction: z.string().trim().max(200).default(''), // e.g. "United States – Delaware"
18
- industryCategory: z.string().trim().max(200).default(''), // e.g. "Marketing Agency"
19
- geographicFocus: z.string().trim().max(200).default(''), // e.g. "North America"
20
- timeZone: z.string().trim().max(100).default('UTC'), // IANA identifier
21
- businessHours: BusinessHoursSchema // per-day { open, close } in HH:MM
22
- })
23
- ```
24
-
25
- `BusinessHoursSchema` is an object with optional keys `monday` through `sunday`, each holding
26
- `{ open: "HH:MM", close: "HH:MM" }`. An empty object `{}` means not configured.
27
-
28
- ## Field reference
29
-
30
- | Field | Type | Max | Notes |
31
- | ------------------ | ------ | ---- | -------------------------------------------------------- |
32
- | `mission` | string | 1000 | Why the organization exists |
33
- | `vision` | string | 1000 | Where the organization is headed long-term |
34
- | `legalName` | string | 200 | Registered legal name |
35
- | `entityType` | string | 100 | e.g. "LLC", "Corporation", "Sole Proprietor" |
36
- | `jurisdiction` | string | 200 | e.g. "United States – Delaware", "Canada – Ontario" |
37
- | `industryCategory` | string | 200 | e.g. "Marketing Agency", "SaaS", "Professional Services" |
38
- | `geographicFocus` | string | 200 | e.g. "North America", "Global", "Southeast Asia" |
39
- | `timeZone` | string | 100 | IANA identifier, e.g. `America/Los_Angeles` |
40
- | `businessHours` | object | -- | Per-day `{ open: "HH:MM", close: "HH:MM" }` |
41
-
42
- ## Validation rules
43
-
44
- - All string fields default to empty string `''`; none are required to be non-empty at schema level
45
- - `timeZone` defaults to `"UTC"` when not set; agents should treat a value of `"UTC"` as
46
- potentially unconfigured and surface it for review
47
- - `businessHours` defaults to `{}` (not configured); an empty object is valid
48
- - Per-day entries must follow `"HH:MM"` 24-hour format; the schema does not enforce range bounds
49
- but convention is `00:00`–`23:59`
50
- - `jurisdiction` should use the format `"Country – Region"` (em dash, not hyphen) for
51
- consistency across agents that parse it
52
-
53
- ## Examples
54
-
55
- ```typescript
56
- identity: {
57
- mission: "We help SMBs automate complex operations using AI.",
58
- vision: "A world where every business operates at the efficiency of a Fortune 500.",
59
- legalName: "Acme Operations LLC",
60
- entityType: "LLC",
61
- jurisdiction: "United States – Delaware",
62
- industryCategory: "AI Automation / Professional Services",
63
- geographicFocus: "North America",
64
- timeZone: "America/Chicago",
65
- businessHours: {
66
- monday: { open: "09:00", close: "17:00" },
67
- tuesday: { open: "09:00", close: "17:00" },
68
- wednesday: { open: "09:00", close: "17:00" },
69
- thursday: { open: "09:00", close: "17:00" },
70
- friday: { open: "09:00", close: "17:00" }
71
- }
72
- }
73
- ```
74
-
75
- ## Where it lives in the adapter
76
-
77
- `core/config/organization-model.ts` under the `identity` key of
78
- `defineOrganizationModel({...})`.
79
-
80
- To read the current values: open the adapter file and inspect the `identity` block directly, or
81
- use `pnpm exec elevasis-sdk knowledge:cat identity` (external project).
82
-
83
- ## Write path
84
-
85
- To edit any field, the `/knowledge` skill runs the codify ceremony
86
- (`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
-
90
- ---
91
-
92
- **Read via `/knowledge`** — natural-language queries like "what's our identity set to?" or
93
- "what timezone are we in?" route to this domain via the skill's intent classifier.
1
+ # Identity domain
2
+
3
+ The `identity` domain captures the organization's legal identity, purpose, and operational anchors.
4
+ It is distinct from `branding` (display identity: logos, product names) — editing identity fields
5
+ here does not touch any visual or branding configuration.
6
+
7
+ ## Schema
8
+
9
+ Source: `packages/core/src/organization-model/domains/identity.ts`
10
+
11
+ ```typescript
12
+ IdentityDomainSchema = z.object({
13
+ mission: z.string().trim().max(1000).default(''),
14
+ vision: z.string().trim().max(1000).default(''),
15
+ legalName: z.string().trim().max(200).default(''),
16
+ entityType: z.string().trim().max(100).default(''), // e.g. "LLC", "Corporation"
17
+ jurisdiction: z.string().trim().max(200).default(''), // e.g. "United States – Delaware"
18
+ industryCategory: z.string().trim().max(200).default(''), // e.g. "Marketing Agency"
19
+ geographicFocus: z.string().trim().max(200).default(''), // e.g. "North America"
20
+ timeZone: z.string().trim().max(100).default('UTC'), // IANA identifier
21
+ businessHours: BusinessHoursSchema // per-day { open, close } in HH:MM
22
+ })
23
+ ```
24
+
25
+ `BusinessHoursSchema` is an object with optional keys `monday` through `sunday`, each holding
26
+ `{ open: "HH:MM", close: "HH:MM" }`. An empty object `{}` means not configured.
27
+
28
+ ## Field reference
29
+
30
+ | Field | Type | Max | Notes |
31
+ | ------------------ | ------ | ---- | -------------------------------------------------------- |
32
+ | `mission` | string | 1000 | Why the organization exists |
33
+ | `vision` | string | 1000 | Where the organization is headed long-term |
34
+ | `legalName` | string | 200 | Registered legal name |
35
+ | `entityType` | string | 100 | e.g. "LLC", "Corporation", "Sole Proprietor" |
36
+ | `jurisdiction` | string | 200 | e.g. "United States – Delaware", "Canada – Ontario" |
37
+ | `industryCategory` | string | 200 | e.g. "Marketing Agency", "SaaS", "Professional Services" |
38
+ | `geographicFocus` | string | 200 | e.g. "North America", "Global", "Southeast Asia" |
39
+ | `timeZone` | string | 100 | IANA identifier, e.g. `America/Los_Angeles` |
40
+ | `businessHours` | object | -- | Per-day `{ open: "HH:MM", close: "HH:MM" }` |
41
+
42
+ ## Validation rules
43
+
44
+ - All string fields default to empty string `''`; none are required to be non-empty at schema level
45
+ - `timeZone` defaults to `"UTC"` when not set; agents should treat a value of `"UTC"` as
46
+ potentially unconfigured and surface it for review
47
+ - `businessHours` defaults to `{}` (not configured); an empty object is valid
48
+ - Per-day entries must follow `"HH:MM"` 24-hour format; the schema does not enforce range bounds
49
+ but convention is `00:00`–`23:59`
50
+ - `jurisdiction` should use the format `"Country – Region"` (em dash, not hyphen) for
51
+ consistency across agents that parse it
52
+
53
+ ## Examples
54
+
55
+ ```typescript
56
+ identity: {
57
+ mission: "We help SMBs automate complex operations using AI.",
58
+ vision: "A world where every business operates at the efficiency of a Fortune 500.",
59
+ legalName: "Acme Operations LLC",
60
+ entityType: "LLC",
61
+ jurisdiction: "United States – Delaware",
62
+ industryCategory: "AI Automation / Professional Services",
63
+ geographicFocus: "North America",
64
+ timeZone: "America/Chicago",
65
+ businessHours: {
66
+ monday: { open: "09:00", close: "17:00" },
67
+ tuesday: { open: "09:00", close: "17:00" },
68
+ wednesday: { open: "09:00", close: "17:00" },
69
+ thursday: { open: "09:00", close: "17:00" },
70
+ friday: { open: "09:00", close: "17:00" }
71
+ }
72
+ }
73
+ ```
74
+
75
+ ## Where it lives in the adapter
76
+
77
+ `core/config/organization-model.ts` under the `identity` key of
78
+ `defineOrganizationModel({...})`.
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).
82
+
83
+ ## Write path
84
+
85
+ To edit any field, the `/om` skill runs the codify ceremony
86
+ (`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
+
90
+ ---
91
+
92
+ **Read via `/om`** (legacy `/knowledge` alias also accepted) — natural-language queries like
93
+ "what's our identity set to?" or "what timezone are we in?" route to this domain via the skill's
94
+ intent classifier.