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