@elevasis/core 0.22.0 → 0.23.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 (112) hide show
  1. package/dist/index.d.ts +2330 -2391
  2. package/dist/index.js +2322 -1147
  3. package/dist/knowledge/index.d.ts +702 -1136
  4. package/dist/knowledge/index.js +9 -9
  5. package/dist/organization-model/index.d.ts +2330 -2391
  6. package/dist/organization-model/index.js +2322 -1147
  7. package/dist/test-utils/index.d.ts +703 -1106
  8. package/dist/test-utils/index.js +1735 -1089
  9. package/package.json +1 -1
  10. package/src/__tests__/template-core-compatibility.test.ts +11 -79
  11. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +360 -98
  12. package/src/business/acquisition/api-schemas.test.ts +2 -2
  13. package/src/business/acquisition/api-schemas.ts +7 -9
  14. package/src/business/acquisition/build-templates.test.ts +4 -4
  15. package/src/business/acquisition/build-templates.ts +72 -30
  16. package/src/business/acquisition/crm-state-actions.test.ts +13 -11
  17. package/src/business/acquisition/types.ts +7 -3
  18. package/src/execution/engine/agent/core/types.ts +1 -1
  19. package/src/execution/engine/workflow/types.ts +2 -2
  20. package/src/knowledge/README.md +8 -7
  21. package/src/knowledge/__tests__/queries.test.ts +74 -73
  22. package/src/knowledge/format.ts +10 -9
  23. package/src/knowledge/index.ts +1 -1
  24. package/src/knowledge/published.ts +1 -1
  25. package/src/knowledge/queries.ts +26 -25
  26. package/src/organization-model/README.md +66 -26
  27. package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -0
  28. package/src/organization-model/__tests__/defaults.test.ts +72 -98
  29. package/src/organization-model/__tests__/domains/actions.test.ts +56 -0
  30. package/src/organization-model/__tests__/domains/customers.test.ts +299 -295
  31. package/src/organization-model/__tests__/domains/entities.test.ts +56 -0
  32. package/src/organization-model/__tests__/domains/goals.test.ts +493 -479
  33. package/src/organization-model/__tests__/domains/identity.test.ts +280 -279
  34. package/src/organization-model/__tests__/domains/navigation.test.ts +268 -212
  35. package/src/organization-model/__tests__/domains/offerings.test.ts +414 -419
  36. package/src/organization-model/__tests__/domains/policies.test.ts +323 -0
  37. package/src/organization-model/__tests__/domains/resource-mappings.test.ts +271 -271
  38. package/src/organization-model/__tests__/domains/resources.test.ts +159 -37
  39. package/src/organization-model/__tests__/domains/roles.test.ts +147 -86
  40. package/src/organization-model/__tests__/domains/statuses.test.ts +246 -243
  41. package/src/organization-model/__tests__/domains/systems.test.ts +67 -51
  42. package/src/organization-model/__tests__/flatten-additive-merge.test.ts +361 -0
  43. package/src/organization-model/__tests__/foundation.test.ts +74 -102
  44. package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -0
  45. package/src/organization-model/__tests__/graph.test.ts +899 -71
  46. package/src/organization-model/__tests__/knowledge.test.ts +173 -52
  47. package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -0
  48. package/src/organization-model/__tests__/migration-helpers.test.ts +591 -0
  49. package/src/organization-model/__tests__/prospecting-ssot.test.ts +36 -27
  50. package/src/organization-model/__tests__/recursive-system-schema.test.ts +520 -0
  51. package/src/organization-model/__tests__/resolve.test.ts +174 -23
  52. package/src/organization-model/__tests__/schema.test.ts +291 -114
  53. package/src/organization-model/__tests__/surface-projection.test.ts +207 -97
  54. package/src/organization-model/catalogs/lead-gen.ts +144 -0
  55. package/src/organization-model/content-kinds/config.ts +36 -0
  56. package/src/organization-model/content-kinds/index.ts +74 -0
  57. package/src/organization-model/content-kinds/pipeline.ts +68 -0
  58. package/src/organization-model/content-kinds/registry.ts +44 -0
  59. package/src/organization-model/content-kinds/status.ts +71 -0
  60. package/src/organization-model/content-kinds/template.ts +83 -0
  61. package/src/organization-model/content-kinds/types.ts +117 -0
  62. package/src/organization-model/contracts.ts +13 -3
  63. package/src/organization-model/defaults.ts +488 -96
  64. package/src/organization-model/domains/actions.ts +239 -0
  65. package/src/organization-model/domains/customers.ts +78 -75
  66. package/src/organization-model/domains/entities.ts +144 -0
  67. package/src/organization-model/domains/goals.ts +83 -80
  68. package/src/organization-model/domains/knowledge.ts +74 -16
  69. package/src/organization-model/domains/navigation.ts +107 -384
  70. package/src/organization-model/domains/offerings.ts +71 -66
  71. package/src/organization-model/domains/policies.ts +102 -0
  72. package/src/organization-model/domains/projects.ts +14 -48
  73. package/src/organization-model/domains/prospecting.ts +62 -181
  74. package/src/organization-model/domains/resources.ts +81 -24
  75. package/src/organization-model/domains/roles.ts +13 -10
  76. package/src/organization-model/domains/sales.ts +10 -219
  77. package/src/organization-model/domains/shared.ts +57 -57
  78. package/src/organization-model/domains/statuses.ts +339 -130
  79. package/src/organization-model/domains/systems.ts +186 -29
  80. package/src/organization-model/foundation.ts +54 -67
  81. package/src/organization-model/graph/build.ts +682 -54
  82. package/src/organization-model/graph/link.ts +1 -1
  83. package/src/organization-model/graph/schema.ts +24 -9
  84. package/src/organization-model/graph/types.ts +20 -7
  85. package/src/organization-model/helpers.ts +231 -26
  86. package/src/organization-model/index.ts +116 -5
  87. package/src/organization-model/migration-helpers.ts +249 -0
  88. package/src/organization-model/organization-graph.mdx +16 -15
  89. package/src/organization-model/organization-model.mdx +89 -41
  90. package/src/organization-model/published.ts +120 -18
  91. package/src/organization-model/resolve.ts +117 -54
  92. package/src/organization-model/schema.ts +561 -140
  93. package/src/organization-model/surface-projection.ts +116 -122
  94. package/src/organization-model/types.ts +102 -21
  95. package/src/platform/constants/versions.ts +1 -1
  96. package/src/platform/registry/__tests__/command-view.test.ts +6 -8
  97. package/src/platform/registry/__tests__/resource-link.test.ts +13 -8
  98. package/src/platform/registry/__tests__/resource-registry.integration.test.ts +16 -31
  99. package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -0
  100. package/src/platform/registry/__tests__/resource-registry.test.ts +9 -7
  101. package/src/platform/registry/__tests__/validation.test.ts +15 -11
  102. package/src/platform/registry/resource-registry.ts +20 -8
  103. package/src/platform/registry/serialization.ts +7 -7
  104. package/src/platform/registry/types.ts +3 -3
  105. package/src/platform/registry/validation.ts +17 -15
  106. package/src/reference/_generated/contracts.md +362 -99
  107. package/src/reference/glossary.md +18 -18
  108. package/src/supabase/database.types.ts +60 -0
  109. package/src/test-utils/test-utils.test.ts +1 -6
  110. package/src/organization-model/__tests__/domains/operations.test.ts +0 -203
  111. package/src/organization-model/domains/features.ts +0 -31
  112. package/src/organization-model/domains/operations.ts +0 -85
@@ -1,130 +1,339 @@
1
- import { z } from 'zod'
2
-
3
- // ---------------------------------------------------------------------------
4
- // Semantic class enum — one value per status category.
5
- // Every status entry declares which category it belongs to via semanticClass.
6
- // ---------------------------------------------------------------------------
7
-
8
- export const StatusSemanticClassSchema = z.enum([
9
- 'delivery.task',
10
- 'delivery.project',
11
- 'delivery.milestone',
12
- 'queue',
13
- 'execution',
14
- 'schedule',
15
- 'schedule.run',
16
- 'request'
17
- ])
18
-
19
- // ---------------------------------------------------------------------------
20
- // Status entry schema
21
- // ---------------------------------------------------------------------------
22
-
23
- export const StatusEntrySchema = z.object({
24
- id: z.string().trim().min(1).max(100),
25
- label: z.string().trim().min(1).max(120),
26
- semanticClass: StatusSemanticClassSchema,
27
- category: z.string().trim().min(1).max(80).optional()
28
- })
29
-
30
- // ---------------------------------------------------------------------------
31
- // Domain schema — a flat array of status entries keyed by id
32
- // ---------------------------------------------------------------------------
33
-
34
- export const StatusesDomainSchema = z.object({
35
- entries: z.array(StatusEntrySchema).default([])
36
- })
37
-
38
- // ---------------------------------------------------------------------------
39
- // Seed covers all status enums in scope (delivery, queue, execution,
40
- // schedule, schedule.run, request). Delivery project/milestone statuses are
41
- // included here as semantic references; they mirror delivery.ts but live in
42
- // the statuses domain as the vibe-readable registry.
43
- // ---------------------------------------------------------------------------
44
-
45
- export const DEFAULT_ORGANIZATION_MODEL_STATUSES: z.infer<typeof StatusesDomainSchema> = {
46
- entries: [
47
- // --- delivery.task (TaskStatus 9 values) ---
48
- { id: 'delivery.task.planned', label: 'Planned', semanticClass: 'delivery.task', category: 'delivery' },
49
- { id: 'delivery.task.in_progress', label: 'In Progress', semanticClass: 'delivery.task', category: 'delivery' },
50
- { id: 'delivery.task.blocked', label: 'Blocked', semanticClass: 'delivery.task', category: 'delivery' },
51
- { id: 'delivery.task.submitted', label: 'Submitted', semanticClass: 'delivery.task', category: 'delivery' },
52
- { id: 'delivery.task.approved', label: 'Approved', semanticClass: 'delivery.task', category: 'delivery' },
53
- {
54
- id: 'delivery.task.revision_requested',
55
- label: 'Revision Requested',
56
- semanticClass: 'delivery.task',
57
- category: 'delivery'
58
- },
59
- { id: 'delivery.task.rejected', label: 'Rejected', semanticClass: 'delivery.task', category: 'delivery' },
60
- { id: 'delivery.task.cancelled', label: 'Cancelled', semanticClass: 'delivery.task', category: 'delivery' },
61
- { id: 'delivery.task.completed', label: 'Completed', semanticClass: 'delivery.task', category: 'delivery' },
62
-
63
- // --- delivery.project (ProjectStatus — 6 values) ---
64
- { id: 'delivery.project.active', label: 'Active', semanticClass: 'delivery.project', category: 'delivery' },
65
- { id: 'delivery.project.on_track', label: 'On Track', semanticClass: 'delivery.project', category: 'delivery' },
66
- { id: 'delivery.project.at_risk', label: 'At Risk', semanticClass: 'delivery.project', category: 'delivery' },
67
- { id: 'delivery.project.blocked', label: 'Blocked', semanticClass: 'delivery.project', category: 'delivery' },
68
- { id: 'delivery.project.paused', label: 'Paused', semanticClass: 'delivery.project', category: 'delivery' },
69
- { id: 'delivery.project.completed', label: 'Completed', semanticClass: 'delivery.project', category: 'delivery' },
70
-
71
- // --- delivery.milestone (MilestoneStatus — 5 values) ---
72
- {
73
- id: 'delivery.milestone.upcoming',
74
- label: 'Upcoming',
75
- semanticClass: 'delivery.milestone',
76
- category: 'delivery'
77
- },
78
- {
79
- id: 'delivery.milestone.in_progress',
80
- label: 'In Progress',
81
- semanticClass: 'delivery.milestone',
82
- category: 'delivery'
83
- },
84
- {
85
- id: 'delivery.milestone.blocked',
86
- label: 'Blocked',
87
- semanticClass: 'delivery.milestone',
88
- category: 'delivery'
89
- },
90
- { id: 'delivery.milestone.overdue', label: 'Overdue', semanticClass: 'delivery.milestone', category: 'delivery' },
91
- {
92
- id: 'delivery.milestone.completed',
93
- label: 'Completed',
94
- semanticClass: 'delivery.milestone',
95
- category: 'delivery'
96
- },
97
-
98
- // --- queue (QueueTaskStatus — 5 values, maps hitl/command-queue tasks) ---
99
- { id: 'queue.pending', label: 'Pending', semanticClass: 'queue', category: 'queue' },
100
- { id: 'queue.processing', label: 'Processing', semanticClass: 'queue', category: 'queue' },
101
- { id: 'queue.completed', label: 'Completed', semanticClass: 'queue', category: 'queue' },
102
- { id: 'queue.failed', label: 'Failed', semanticClass: 'queue', category: 'queue' },
103
- { id: 'queue.expired', label: 'Expired', semanticClass: 'queue', category: 'queue' },
104
-
105
- // --- execution (ExecutionStatus — 5 values) ---
106
- { id: 'execution.pending', label: 'Pending', semanticClass: 'execution', category: 'execution' },
107
- { id: 'execution.running', label: 'Running', semanticClass: 'execution', category: 'execution' },
108
- { id: 'execution.completed', label: 'Completed', semanticClass: 'execution', category: 'execution' },
109
- { id: 'execution.failed', label: 'Failed', semanticClass: 'execution', category: 'execution' },
110
- { id: 'execution.warning', label: 'Warning', semanticClass: 'execution', category: 'execution' },
111
-
112
- // --- schedule (schedule status — 4 values) ---
113
- { id: 'schedule.active', label: 'Active', semanticClass: 'schedule', category: 'schedule' },
114
- { id: 'schedule.paused', label: 'Paused', semanticClass: 'schedule', category: 'schedule' },
115
- { id: 'schedule.completed', label: 'Completed', semanticClass: 'schedule', category: 'schedule' },
116
- { id: 'schedule.cancelled', label: 'Cancelled', semanticClass: 'schedule', category: 'schedule' },
117
-
118
- // --- schedule.run (schedule run status — 4 values) ---
119
- { id: 'schedule.run.running', label: 'Running', semanticClass: 'schedule.run', category: 'schedule' },
120
- { id: 'schedule.run.completed', label: 'Completed', semanticClass: 'schedule.run', category: 'schedule' },
121
- { id: 'schedule.run.failed', label: 'Failed', semanticClass: 'schedule.run', category: 'schedule' },
122
- { id: 'schedule.run.cancelled', label: 'Cancelled', semanticClass: 'schedule.run', category: 'schedule' },
123
-
124
- // --- request (RequestStatus — 4 values, maps reported_requests) ---
125
- { id: 'request.open', label: 'Open', semanticClass: 'request', category: 'request' },
126
- { id: 'request.investigating', label: 'Investigating', semanticClass: 'request', category: 'request' },
127
- { id: 'request.resolved', label: 'Resolved', semanticClass: 'request', category: 'request' },
128
- { id: 'request.wont_fix', label: "Won't Fix", semanticClass: 'request', category: 'request' }
129
- ]
130
- }
1
+ import { z } from 'zod'
2
+
3
+ // ---------------------------------------------------------------------------
4
+ // Semantic class enum — one value per status category.
5
+ // Every status entry declares which category it belongs to via semanticClass.
6
+ // ---------------------------------------------------------------------------
7
+
8
+ export const StatusSemanticClassSchema = z.enum([
9
+ 'delivery.task',
10
+ 'delivery.project',
11
+ 'delivery.milestone',
12
+ 'queue',
13
+ 'execution',
14
+ 'schedule',
15
+ 'schedule.run',
16
+ 'request'
17
+ ])
18
+
19
+ // ---------------------------------------------------------------------------
20
+ // Status entry schema
21
+ // ---------------------------------------------------------------------------
22
+
23
+ export const StatusEntrySchema = z.object({
24
+ id: z.string().trim().min(1).max(100),
25
+ /** Domain-map iteration order. Convention: multiples of 10 (10, 20, 30, ...) to allow easy insertion. */
26
+ order: z.number(),
27
+ label: z.string().trim().min(1).max(120),
28
+ semanticClass: StatusSemanticClassSchema,
29
+ category: z.string().trim().min(1).max(80).optional()
30
+ })
31
+
32
+ // ---------------------------------------------------------------------------
33
+ // Domain schema — id-keyed map of status entries
34
+ // ---------------------------------------------------------------------------
35
+
36
+ export const StatusesDomainSchema = z
37
+ .record(z.string(), StatusEntrySchema)
38
+ .refine((record) => Object.entries(record).every(([key, entry]) => entry.id === key), {
39
+ message: 'Each status entry id must match its map key'
40
+ })
41
+ .default({})
42
+
43
+ // ---------------------------------------------------------------------------
44
+ // Seed — covers all status enums in scope (delivery, queue, execution,
45
+ // schedule, schedule.run, request). Delivery project/milestone statuses are
46
+ // included here as semantic references; they mirror delivery.ts but live in
47
+ // the statuses domain as the vibe-readable registry.
48
+ // ---------------------------------------------------------------------------
49
+
50
+ export type StatusEntry = z.infer<typeof StatusEntrySchema>
51
+ export type StatusesDomain = z.infer<typeof StatusesDomainSchema>
52
+
53
+ export const DEFAULT_ORGANIZATION_MODEL_STATUSES: StatusesDomain = {
54
+ // --- delivery.task (TaskStatus — 9 values) ---
55
+ 'delivery.task.planned': {
56
+ id: 'delivery.task.planned',
57
+ order: 10,
58
+ label: 'Planned',
59
+ semanticClass: 'delivery.task',
60
+ category: 'delivery'
61
+ },
62
+ 'delivery.task.in_progress': {
63
+ id: 'delivery.task.in_progress',
64
+ order: 20,
65
+ label: 'In Progress',
66
+ semanticClass: 'delivery.task',
67
+ category: 'delivery'
68
+ },
69
+ 'delivery.task.blocked': {
70
+ id: 'delivery.task.blocked',
71
+ order: 30,
72
+ label: 'Blocked',
73
+ semanticClass: 'delivery.task',
74
+ category: 'delivery'
75
+ },
76
+ 'delivery.task.submitted': {
77
+ id: 'delivery.task.submitted',
78
+ order: 40,
79
+ label: 'Submitted',
80
+ semanticClass: 'delivery.task',
81
+ category: 'delivery'
82
+ },
83
+ 'delivery.task.approved': {
84
+ id: 'delivery.task.approved',
85
+ order: 50,
86
+ label: 'Approved',
87
+ semanticClass: 'delivery.task',
88
+ category: 'delivery'
89
+ },
90
+ 'delivery.task.revision_requested': {
91
+ id: 'delivery.task.revision_requested',
92
+ order: 60,
93
+ label: 'Revision Requested',
94
+ semanticClass: 'delivery.task',
95
+ category: 'delivery'
96
+ },
97
+ 'delivery.task.rejected': {
98
+ id: 'delivery.task.rejected',
99
+ order: 70,
100
+ label: 'Rejected',
101
+ semanticClass: 'delivery.task',
102
+ category: 'delivery'
103
+ },
104
+ 'delivery.task.cancelled': {
105
+ id: 'delivery.task.cancelled',
106
+ order: 80,
107
+ label: 'Cancelled',
108
+ semanticClass: 'delivery.task',
109
+ category: 'delivery'
110
+ },
111
+ 'delivery.task.completed': {
112
+ id: 'delivery.task.completed',
113
+ order: 90,
114
+ label: 'Completed',
115
+ semanticClass: 'delivery.task',
116
+ category: 'delivery'
117
+ },
118
+
119
+ // --- delivery.project (ProjectStatus 6 values) ---
120
+ 'delivery.project.active': {
121
+ id: 'delivery.project.active',
122
+ order: 100,
123
+ label: 'Active',
124
+ semanticClass: 'delivery.project',
125
+ category: 'delivery'
126
+ },
127
+ 'delivery.project.on_track': {
128
+ id: 'delivery.project.on_track',
129
+ order: 110,
130
+ label: 'On Track',
131
+ semanticClass: 'delivery.project',
132
+ category: 'delivery'
133
+ },
134
+ 'delivery.project.at_risk': {
135
+ id: 'delivery.project.at_risk',
136
+ order: 120,
137
+ label: 'At Risk',
138
+ semanticClass: 'delivery.project',
139
+ category: 'delivery'
140
+ },
141
+ 'delivery.project.blocked': {
142
+ id: 'delivery.project.blocked',
143
+ order: 130,
144
+ label: 'Blocked',
145
+ semanticClass: 'delivery.project',
146
+ category: 'delivery'
147
+ },
148
+ 'delivery.project.paused': {
149
+ id: 'delivery.project.paused',
150
+ order: 140,
151
+ label: 'Paused',
152
+ semanticClass: 'delivery.project',
153
+ category: 'delivery'
154
+ },
155
+ 'delivery.project.completed': {
156
+ id: 'delivery.project.completed',
157
+ order: 150,
158
+ label: 'Completed',
159
+ semanticClass: 'delivery.project',
160
+ category: 'delivery'
161
+ },
162
+
163
+ // --- delivery.milestone (MilestoneStatus — 5 values) ---
164
+ 'delivery.milestone.upcoming': {
165
+ id: 'delivery.milestone.upcoming',
166
+ order: 160,
167
+ label: 'Upcoming',
168
+ semanticClass: 'delivery.milestone',
169
+ category: 'delivery'
170
+ },
171
+ 'delivery.milestone.in_progress': {
172
+ id: 'delivery.milestone.in_progress',
173
+ order: 170,
174
+ label: 'In Progress',
175
+ semanticClass: 'delivery.milestone',
176
+ category: 'delivery'
177
+ },
178
+ 'delivery.milestone.blocked': {
179
+ id: 'delivery.milestone.blocked',
180
+ order: 180,
181
+ label: 'Blocked',
182
+ semanticClass: 'delivery.milestone',
183
+ category: 'delivery'
184
+ },
185
+ 'delivery.milestone.overdue': {
186
+ id: 'delivery.milestone.overdue',
187
+ order: 190,
188
+ label: 'Overdue',
189
+ semanticClass: 'delivery.milestone',
190
+ category: 'delivery'
191
+ },
192
+ 'delivery.milestone.completed': {
193
+ id: 'delivery.milestone.completed',
194
+ order: 200,
195
+ label: 'Completed',
196
+ semanticClass: 'delivery.milestone',
197
+ category: 'delivery'
198
+ },
199
+
200
+ // --- queue (QueueTaskStatus — 5 values, maps hitl/command-queue tasks) ---
201
+ 'queue.pending': { id: 'queue.pending', order: 210, label: 'Pending', semanticClass: 'queue', category: 'queue' },
202
+ 'queue.processing': {
203
+ id: 'queue.processing',
204
+ order: 220,
205
+ label: 'Processing',
206
+ semanticClass: 'queue',
207
+ category: 'queue'
208
+ },
209
+ 'queue.completed': {
210
+ id: 'queue.completed',
211
+ order: 230,
212
+ label: 'Completed',
213
+ semanticClass: 'queue',
214
+ category: 'queue'
215
+ },
216
+ 'queue.failed': { id: 'queue.failed', order: 240, label: 'Failed', semanticClass: 'queue', category: 'queue' },
217
+ 'queue.expired': { id: 'queue.expired', order: 250, label: 'Expired', semanticClass: 'queue', category: 'queue' },
218
+
219
+ // --- execution (ExecutionStatus — 5 values) ---
220
+ 'execution.pending': {
221
+ id: 'execution.pending',
222
+ order: 260,
223
+ label: 'Pending',
224
+ semanticClass: 'execution',
225
+ category: 'execution'
226
+ },
227
+ 'execution.running': {
228
+ id: 'execution.running',
229
+ order: 270,
230
+ label: 'Running',
231
+ semanticClass: 'execution',
232
+ category: 'execution'
233
+ },
234
+ 'execution.completed': {
235
+ id: 'execution.completed',
236
+ order: 280,
237
+ label: 'Completed',
238
+ semanticClass: 'execution',
239
+ category: 'execution'
240
+ },
241
+ 'execution.failed': {
242
+ id: 'execution.failed',
243
+ order: 290,
244
+ label: 'Failed',
245
+ semanticClass: 'execution',
246
+ category: 'execution'
247
+ },
248
+ 'execution.warning': {
249
+ id: 'execution.warning',
250
+ order: 300,
251
+ label: 'Warning',
252
+ semanticClass: 'execution',
253
+ category: 'execution'
254
+ },
255
+
256
+ // --- schedule (schedule status — 4 values) ---
257
+ 'schedule.active': {
258
+ id: 'schedule.active',
259
+ order: 310,
260
+ label: 'Active',
261
+ semanticClass: 'schedule',
262
+ category: 'schedule'
263
+ },
264
+ 'schedule.paused': {
265
+ id: 'schedule.paused',
266
+ order: 320,
267
+ label: 'Paused',
268
+ semanticClass: 'schedule',
269
+ category: 'schedule'
270
+ },
271
+ 'schedule.completed': {
272
+ id: 'schedule.completed',
273
+ order: 330,
274
+ label: 'Completed',
275
+ semanticClass: 'schedule',
276
+ category: 'schedule'
277
+ },
278
+ 'schedule.cancelled': {
279
+ id: 'schedule.cancelled',
280
+ order: 340,
281
+ label: 'Cancelled',
282
+ semanticClass: 'schedule',
283
+ category: 'schedule'
284
+ },
285
+
286
+ // --- schedule.run (schedule run status — 4 values) ---
287
+ 'schedule.run.running': {
288
+ id: 'schedule.run.running',
289
+ order: 350,
290
+ label: 'Running',
291
+ semanticClass: 'schedule.run',
292
+ category: 'schedule'
293
+ },
294
+ 'schedule.run.completed': {
295
+ id: 'schedule.run.completed',
296
+ order: 360,
297
+ label: 'Completed',
298
+ semanticClass: 'schedule.run',
299
+ category: 'schedule'
300
+ },
301
+ 'schedule.run.failed': {
302
+ id: 'schedule.run.failed',
303
+ order: 370,
304
+ label: 'Failed',
305
+ semanticClass: 'schedule.run',
306
+ category: 'schedule'
307
+ },
308
+ 'schedule.run.cancelled': {
309
+ id: 'schedule.run.cancelled',
310
+ order: 380,
311
+ label: 'Cancelled',
312
+ semanticClass: 'schedule.run',
313
+ category: 'schedule'
314
+ },
315
+
316
+ // --- request (RequestStatus — 4 values, maps reported_requests) ---
317
+ 'request.open': { id: 'request.open', order: 390, label: 'Open', semanticClass: 'request', category: 'request' },
318
+ 'request.investigating': {
319
+ id: 'request.investigating',
320
+ order: 400,
321
+ label: 'Investigating',
322
+ semanticClass: 'request',
323
+ category: 'request'
324
+ },
325
+ 'request.resolved': {
326
+ id: 'request.resolved',
327
+ order: 410,
328
+ label: 'Resolved',
329
+ semanticClass: 'request',
330
+ category: 'request'
331
+ },
332
+ 'request.wont_fix': {
333
+ id: 'request.wont_fix',
334
+ order: 420,
335
+ label: "Won't Fix",
336
+ semanticClass: 'request',
337
+ category: 'request'
338
+ }
339
+ }