@x12i/memorix-metadata 3.3.0 → 3.4.1

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.
@@ -1,1286 +1,1309 @@
1
- {
2
- "format": "memorix-metadata/1",
3
- "agentId": "opx",
4
- "version": "0.1.0",
5
- "agents": [
6
- {
7
- "id": "opx",
8
- "name": "Operations (generic parent)",
9
- "description": "Complete generic parent agent for ordinary operational work. Permanent Memorix acceptance pack.",
10
- "parentIds": [],
11
- "parentId": null
12
- },
13
- {
14
- "id": "project-opx",
15
- "name": "Project Operations (child of opx)",
16
- "description": "Inheritance smoke agent. Extends opx without replacing core definitions.",
17
- "parentIds": [
18
- "opx"
19
- ],
20
- "parentId": "opx"
21
- }
22
- ],
23
- "objectTypes": [
24
- {
25
- "id": "people",
26
- "name": "People",
27
- "dataCategory": "entity",
28
- "abstractTypes": [
29
- "People"
30
- ],
31
- "notes": "Single people OT. Inside vs outside org is identity kind (concept.identifiers.primary.kind): employeeId | externalPersonId — not separate object types.",
32
- "contentTypes": [
33
- {
1
+ {
2
+ "format": "memorix-metadata/1",
3
+ "agentId": "opx",
4
+ "version": "0.1.0",
5
+ "agents": [
6
+ {
7
+ "id": "opx",
8
+ "name": "Operations (generic parent)",
9
+ "description": "Complete generic parent agent for ordinary operational work. Permanent Memorix acceptance pack.",
10
+ "parentIds": [],
11
+ "parentId": null
12
+ },
13
+ {
14
+ "id": "project-opx",
15
+ "name": "Project Operations (child of opx)",
16
+ "description": "Inheritance smoke agent. Extends opx without replacing core definitions.",
17
+ "parentIds": [
18
+ "opx"
19
+ ],
20
+ "parentId": "opx"
21
+ }
22
+ ],
23
+ "objectTypes": [
24
+ {
25
+ "id": "people",
26
+ "name": "People",
27
+ "dataCategory": "entity",
28
+ "abstractTypes": [
29
+ "People"
30
+ ],
31
+ "notes": "Single people OT. Inside vs outside org is identity kind (concept.identifiers.primary.kind): employeeId | externalPersonId — not separate object types.",
32
+ "contentTypes": [
33
+ {
34
+ "id": "raw",
35
+ "required": true,
36
+ "requiredReason": "Landed provider-native payload; identity and lineage depend on it.",
37
+ "profile": { "allowSnapshotBuckets": false }
38
+ },
39
+ {
40
+ "id": "snapshots",
41
+ "required": true,
42
+ "requiredReason": "Canonical composed person view used by queries and abstracts.",
43
+ "profile": { "allowSnapshotBuckets": true }
44
+ },
45
+ {
46
+ "id": "discovery",
47
+ "discriminator": {
48
+ "path": "data.discoveryType",
49
+ "required": false,
50
+ "defaultValue": "default"
51
+ },
52
+ "profile": { "allowSnapshotBuckets": false }
53
+ },
54
+ {
55
+ "id": "analysis",
56
+ "discriminator": {
57
+ "path": "data.analysisType",
58
+ "required": false,
59
+ "defaultValue": "default"
60
+ },
61
+ "profile": { "allowSnapshotBuckets": false }
62
+ },
63
+ {
64
+ "id": "relationships",
65
+ "notes": "Candidate store shape until Gate G4",
66
+ "profile": { "allowSnapshotBuckets": false }
67
+ }
68
+ ],
69
+ "fields": [
70
+ {
71
+ "path": "data.displayName",
72
+ "valueType": "string",
73
+ "contentType": "snapshots"
74
+ },
75
+ {
76
+ "path": "data.role",
77
+ "valueType": "string",
78
+ "contentType": "snapshots"
79
+ },
80
+ {
81
+ "path": "data.email",
82
+ "valueType": "string",
83
+ "contentType": "snapshots"
84
+ },
85
+ {
86
+ "path": "data.organization",
87
+ "valueType": "string",
88
+ "contentType": "snapshots"
89
+ },
90
+ {
91
+ "path": "data.collaboratorIds",
92
+ "valueType": "array",
93
+ "contentType": "snapshots",
94
+ "refersTo": {
95
+ "objectType": "people"
96
+ }
97
+ }
98
+ ]
99
+ },
100
+ {
101
+ "id": "work-items",
102
+ "name": "Work Items",
103
+ "dataCategory": "entity",
104
+ "abstractTypes": [
105
+ "WorkItems"
106
+ ],
107
+ "contentTypes": [
108
+ {
34
109
  "id": "raw",
35
- "required": true,
36
- "requiredReason": "Landed provider-native payload; identity and lineage depend on it."
37
- },
38
- {
39
- "id": "snapshots",
40
- "required": true,
41
- "requiredReason": "Canonical composed person view used by queries and abstracts."
42
- },
43
- {
44
- "id": "discovery",
45
- "discriminator": {
46
- "path": "data.discoveryType",
47
- "required": false,
48
- "defaultValue": "default"
49
- }
50
- },
51
- {
52
- "id": "analysis",
53
- "discriminator": {
54
- "path": "data.analysisType",
55
- "required": false,
56
- "defaultValue": "default"
57
- }
58
- },
59
- {
60
- "id": "relationships",
61
- "notes": "Candidate store shape until Gate G4"
62
- }
63
- ],
64
- "fields": [
65
- {
66
- "path": "data.displayName",
67
- "valueType": "string",
68
- "contentType": "snapshots"
69
- },
70
- {
71
- "path": "data.role",
72
- "valueType": "string",
73
- "contentType": "snapshots"
74
- },
75
- {
76
- "path": "data.email",
77
- "valueType": "string",
78
- "contentType": "snapshots"
79
- },
80
- {
81
- "path": "data.organization",
82
- "valueType": "string",
83
- "contentType": "snapshots"
84
- },
85
- {
86
- "path": "data.collaboratorIds",
87
- "valueType": "array",
88
- "contentType": "snapshots",
89
- "refersTo": {
90
- "objectType": "people"
91
- }
92
- }
93
- ]
94
- },
95
- {
96
- "id": "work-items",
97
- "name": "Work Items",
98
- "dataCategory": "entity",
99
- "abstractTypes": [
100
- "WorkItems"
101
- ],
102
- "contentTypes": [
103
- {
104
- "id": "raw"
105
- },
106
- {
107
- "id": "snapshots"
108
- },
109
- {
110
- "id": "discovery",
111
- "discriminator": {
112
- "path": "data.discoveryType",
113
- "required": false
114
- }
115
- },
116
- {
117
- "id": "analysis",
118
- "discriminator": {
119
- "path": "data.analysisType",
120
- "required": false,
121
- "defaultValue": "delivery-risk"
122
- }
123
- },
124
- {
125
- "id": "decisions",
126
- "discriminator": {
127
- "path": "data.decisionType",
128
- "required": false,
129
- "defaultValue": "priority"
130
- }
131
- },
132
- {
133
- "id": "workflow"
134
- },
135
- {
136
- "id": "context",
137
- "retention": "work-scoped-ttl"
138
- },
139
- {
140
- "id": "relationships"
141
- }
142
- ],
143
- "snapshotBuckets": {
144
- "analytics": "optional",
145
- "enrichment": "optional",
146
- "insights": "optional"
147
- },
148
- "fields": [
149
- {
150
- "path": "data.title",
151
- "valueType": "string",
152
- "contentType": "snapshots"
153
- },
154
- {
155
- "path": "data.status",
156
- "valueType": "string",
157
- "contentType": "snapshots"
158
- },
159
- {
160
- "path": "data.priority",
161
- "valueType": "string",
162
- "contentType": "snapshots"
163
- },
164
- {
165
- "path": "data.assigneeId",
166
- "valueType": "recordId",
167
- "contentType": "snapshots",
168
- "refersTo": {
169
- "objectType": "people"
170
- }
171
- },
172
- {
173
- "path": "data.playbookIds",
174
- "valueType": "array",
175
- "contentType": "snapshots",
176
- "refersTo": {
177
- "objectType": "playbooks"
178
- }
179
- },
180
- {
181
- "path": "data.dependsOnIds",
182
- "valueType": "array",
183
- "contentType": "snapshots",
184
- "refersTo": {
185
- "objectType": "work-items"
186
- }
187
- }
188
- ]
189
- },
190
- {
191
- "id": "playbooks",
192
- "name": "Playbooks",
193
- "dataCategory": "knowledge",
194
- "abstractTypes": [
195
- "Playbooks"
196
- ],
197
- "contentTypes": [
198
- {
199
- "id": "raw"
200
- },
201
- {
110
+ "profile": { "allowSnapshotBuckets": false }
111
+ },
112
+ {
202
113
  "id": "snapshots",
203
- "notes": "Persistent knowledge content"
204
- },
205
- {
206
- "id": "relationships"
207
- }
208
- ],
209
- "retention": "persistent-knowledge",
210
- "fields": [
211
- {
212
- "path": "data.name",
213
- "valueType": "string",
214
- "contentType": "snapshots"
215
- },
216
- {
217
- "path": "data.body",
218
- "valueType": "string",
219
- "contentType": "snapshots"
220
- },
221
- {
222
- "path": "data.contentHash",
223
- "valueType": "string",
224
- "contentType": "snapshots"
225
- }
226
- ]
227
- },
228
- {
229
- "id": "activity-events",
230
- "name": "Activity Events",
231
- "dataCategory": "event",
232
- "abstractTypes": [
233
- "ActivityEvents"
234
- ],
235
- "contentTypes": [
236
- {
237
- "id": "raw"
238
- },
239
- {
240
- "id": "snapshots",
241
- "notes": "Normalized event content"
242
- },
243
- {
244
- "id": "relationships"
245
- }
246
- ],
247
- "fields": [
248
- {
249
- "path": "data.type",
250
- "valueType": "string",
251
- "contentType": "snapshots"
252
- },
253
- {
254
- "path": "data.message",
255
- "valueType": "string",
256
- "contentType": "snapshots"
257
- },
258
- {
259
- "path": "data.occurredAt",
260
- "valueType": "datetime",
261
- "contentType": "snapshots"
262
- },
263
- {
264
- "path": "data.workItemId",
265
- "valueType": "recordId",
266
- "contentType": "snapshots",
267
- "refersTo": {
268
- "objectType": "work-items"
269
- }
270
- },
271
- {
272
- "path": "data.actorId",
273
- "valueType": "recordId",
274
- "contentType": "snapshots",
275
- "refersTo": {
276
- "objectType": "people"
277
- }
278
- }
279
- ]
280
- },
281
- {
282
- "id": "content",
283
- "name": "Content",
284
- "dataCategory": "knowledge",
285
- "abstractTypes": [
286
- "KnowledgeArtifacts"
287
- ],
288
- "notes": "Knowledge graph snapshots and Nexum apply-plan records (write-record mode nexum)",
289
- "contentTypes": [
290
- {
291
- "id": "raw"
292
- },
293
- {
294
- "id": "snapshots",
295
- "required": false,
296
- "notes": "Knowledge-graph and other snapshot artififacts (data.kind: knowledge-graph)"
297
- },
298
- {
299
- "id": "nexum",
300
- "required": false,
301
- "notes": "Optional Nexum snapshot facet; durable apply-plan kinds use nexum-* object types"
302
- },
303
- {
304
- "id": "relationships"
305
- }
306
- ],
307
- "fields": [
308
- {
309
- "path": "concept.title",
310
- "valueType": "string",
311
- "contentType": "snapshots"
312
- },
313
- {
314
- "path": "data.title",
315
- "valueType": "string",
316
- "contentType": "snapshots"
317
- },
318
- {
319
- "path": "data.kind",
320
- "valueType": "string",
321
- "contentType": "snapshots"
322
- }
323
- ]
324
- }
325
- ],
326
- "abstractTypes": [
327
- {
328
- "id": "People",
329
- "name": "People",
330
- "meaning": "People who perform operational work — inside the org (employeeId) or outside (externalPersonId), distinguished by identity kind",
331
- "category": "entity",
332
- "properties": [
333
- {
334
- "id": "title",
335
- "valueType": "string",
336
- "required": true
337
- },
338
- {
339
- "id": "role",
340
- "valueType": "string",
341
- "required": true
342
- },
343
- {
344
- "id": "lens",
345
- "valueType": "string",
346
- "required": false
347
- },
348
- {
349
- "id": "email",
350
- "valueType": "string",
351
- "required": false
352
- },
353
- {
354
- "id": "organization",
355
- "valueType": "string",
356
- "required": false
357
- }
358
- ],
359
- "members": [
360
- {
361
- "objectType": "people",
362
- "contentType": "snapshots",
363
- "properties": [
364
- {
365
- "abstractProperty": "title",
366
- "contentType": "snapshots",
367
- "mappingId": "opx-people-abstract"
368
- },
369
- {
370
- "abstractProperty": "role",
371
- "contentType": "snapshots",
372
- "mappingId": "opx-people-abstract"
373
- },
374
- {
375
- "abstractProperty": "lens",
376
- "contentType": "snapshots",
377
- "mappingId": "opx-people-abstract"
378
- },
379
- {
380
- "abstractProperty": "email",
381
- "contentType": "snapshots",
382
- "mappingId": "opx-people-abstract"
383
- },
384
- {
385
- "abstractProperty": "organization",
386
- "contentType": "snapshots",
387
- "mappingId": "opx-people-abstract"
388
- }
389
- ]
390
- }
391
- ],
392
- "union": false,
393
- "notes": "People abstract ↔ people OT 1:1. Inside/outside org is concept.identifiers.primary.kind (employeeId | externalPersonId), not a second OT."
394
- },
395
- {
396
- "id": "WorkItems",
397
- "name": "Work Items",
398
- "meaning": "Units of operational work",
399
- "category": "entity",
400
- "properties": [
401
- {
402
- "id": "title",
403
- "valueType": "string",
404
- "required": true
405
- },
406
- {
407
- "id": "status",
408
- "valueType": "string",
409
- "required": true
410
- },
411
- {
412
- "id": "priority",
413
- "valueType": "string",
414
- "required": false
415
- }
416
- ],
417
- "members": [
418
- {
419
- "objectType": "work-items",
420
- "contentType": "snapshots",
421
- "properties": [
422
- {
423
- "abstractProperty": "title",
424
- "contentType": "snapshots",
425
- "propertyPath": "data.title",
426
- "concreteValueType": "string"
427
- },
428
- {
429
- "abstractProperty": "status",
430
- "contentType": "snapshots",
431
- "propertyPath": "data.status",
432
- "concreteValueType": "string"
433
- },
434
- {
435
- "abstractProperty": "priority",
436
- "contentType": "snapshots",
437
- "propertyPath": "data.priority",
438
- "concreteValueType": "string"
439
- }
440
- ]
441
- }
442
- ],
443
- "union": false
444
- },
445
- {
446
- "id": "Playbooks",
447
- "name": "Playbooks",
448
- "meaning": "Reusable operational knowledge / playbooks",
449
- "category": "knowledge",
450
- "properties": [
451
- {
452
- "id": "title",
453
- "valueType": "string",
454
- "required": true
455
- },
456
- {
457
- "id": "body",
458
- "valueType": "string",
459
- "required": true
460
- },
461
- {
462
- "id": "contentHash",
463
- "valueType": "string",
464
- "required": false
465
- }
466
- ],
467
- "members": [
468
- {
469
- "objectType": "playbooks",
470
- "contentType": "snapshots",
471
- "properties": [
472
- {
473
- "abstractProperty": "title",
474
- "contentType": "snapshots",
475
- "propertyPath": "data.name",
476
- "concreteValueType": "string"
477
- },
478
- {
479
- "abstractProperty": "body",
480
- "contentType": "snapshots",
481
- "propertyPath": "data.body",
482
- "concreteValueType": "string"
483
- },
484
- {
485
- "abstractProperty": "contentHash",
486
- "contentType": "snapshots",
487
- "propertyPath": "data.contentHash",
488
- "concreteValueType": "string"
489
- }
490
- ]
491
- }
492
- ],
493
- "union": false
494
- },
495
- {
496
- "id": "ActivityEvents",
497
- "name": "Activity Events",
498
- "meaning": "Progress and activity reports about work items",
499
- "category": "event",
500
- "properties": [
501
- {
502
- "id": "type",
503
- "valueType": "string",
504
- "required": true
505
- },
506
- {
507
- "id": "message",
508
- "valueType": "string",
509
- "required": true
510
- },
511
- {
512
- "id": "workItemId",
513
- "valueType": "recordId",
514
- "required": true
515
- },
516
- {
517
- "id": "actorId",
518
- "valueType": "recordId",
519
- "required": false
520
- },
521
- {
522
- "id": "occurredAt",
523
- "valueType": "datetime",
524
- "required": false
525
- }
526
- ],
527
- "members": [
528
- {
529
- "objectType": "activity-events",
530
- "contentType": "snapshots",
531
- "properties": [
532
- {
533
- "abstractProperty": "type",
534
- "contentType": "snapshots",
535
- "propertyPath": "data.type",
536
- "concreteValueType": "string"
537
- },
538
- {
539
- "abstractProperty": "message",
540
- "contentType": "snapshots",
541
- "propertyPath": "data.message",
542
- "concreteValueType": "string"
543
- },
544
- {
545
- "abstractProperty": "workItemId",
546
- "contentType": "snapshots",
547
- "propertyPath": "data.workItemId",
548
- "concreteValueType": "recordId"
549
- },
550
- {
551
- "abstractProperty": "actorId",
552
- "contentType": "snapshots",
553
- "propertyPath": "data.actorId",
554
- "concreteValueType": "recordId"
555
- },
556
- {
557
- "abstractProperty": "occurredAt",
558
- "contentType": "snapshots",
559
- "propertyPath": "data.occurredAt",
560
- "concreteValueType": "datetime"
561
- }
562
- ]
563
- }
564
- ],
565
- "union": false
566
- },
567
- {
568
- "id": "KnowledgeArtifacts",
569
- "name": "Knowledge Artifacts",
570
- "meaning": "Structured knowledge graphs and snapshot bags produced by analyze workers (Nexum)",
571
- "category": "knowledge",
572
- "properties": [
573
- {
574
- "id": "title",
575
- "valueType": "string",
576
- "required": false
577
- }
578
- ],
579
- "members": [
580
- {
581
- "objectType": "content",
582
- "contentType": "snapshots",
583
- "properties": [
584
- {
585
- "abstractProperty": "title",
586
- "contentType": "snapshots",
587
- "propertyPath": "concept.title",
588
- "concreteValueType": "string"
589
- }
590
- ]
591
- }
592
- ],
593
- "union": false,
594
- "notes": "Used by nexum service ports; durable apply-plan kinds use nexum-* object types (content/snapshots remains the KnowledgeArtifacts member)"
595
- }
596
- ],
597
- "relationshipDefinitions": [
598
- {
599
- "id": "people-assigned-to-work-items",
600
- "name": "People assigned to work items",
601
- "meaning": "A person is assigned to perform a work item",
602
- "directionality": "directed",
603
- "from": {
604
- "abstractType": "People",
605
- "path": "assignedWorkItems"
606
- },
607
- "to": {
608
- "abstractType": "WorkItems",
609
- "path": "assignedPeople"
610
- },
611
- "discoveryRules": [
612
- {
613
- "id": "from-source-assignee",
614
- "kind": "source-field",
615
- "sourcePath": "assigneeId",
616
- "notes": "opx-source work-items.assigneeId resolves to people OT (any identity kind)"
617
- }
618
- ]
619
- },
620
- {
621
- "id": "work-items-use-playbooks",
622
- "name": "Work items use playbooks",
623
- "meaning": "A work item follows one or more reusable playbooks",
624
- "directionality": "directed",
625
- "from": {
626
- "abstractType": "WorkItems",
627
- "path": "usedPlaybooks"
628
- },
629
- "to": {
630
- "abstractType": "Playbooks",
631
- "path": "usedByWorkItems"
632
- },
633
- "discoveryRules": [
634
- {
635
- "id": "from-source-playbook-ids",
636
- "kind": "source-field",
637
- "sourcePath": "playbookIds"
638
- }
639
- ]
640
- },
641
- {
642
- "id": "activity-events-about-work-items",
643
- "name": "Activity events about work items",
644
- "meaning": "An activity event reports progress on a work item",
645
- "directionality": "directed",
646
- "from": {
647
- "abstractType": "ActivityEvents",
648
- "path": "aboutWorkItems"
649
- },
650
- "to": {
651
- "abstractType": "WorkItems",
652
- "path": "activityEvents"
653
- },
654
- "discoveryRules": [
655
- {
656
- "id": "from-source-work-item-id",
657
- "kind": "source-field",
658
- "sourcePath": "workItemId"
659
- }
660
- ]
661
- },
662
- {
663
- "id": "work-items-depend-on-work-items",
664
- "name": "Work items depend on work items",
665
- "meaning": "A work item cannot complete until another work item completes",
666
- "directionality": "directed",
667
- "from": {
668
- "abstractType": "WorkItems",
669
- "path": "dependsOn"
670
- },
671
- "to": {
672
- "abstractType": "WorkItems",
673
- "path": "dependedOnBy"
674
- },
675
- "discoveryRules": [
676
- {
677
- "id": "from-source-depends-on",
678
- "kind": "source-field",
679
- "sourcePath": "dependsOnIds"
680
- }
681
- ]
682
- },
683
- {
684
- "id": "people-collaborate-with-people",
685
- "name": "People collaborate with people",
686
- "meaning": "Two people collaborate on operational work",
687
- "directionality": "undirected",
688
- "from": {
689
- "abstractType": "People",
690
- "path": "collaborators"
691
- },
692
- "to": {
693
- "abstractType": "People",
694
- "path": "collaborators"
695
- },
696
- "discoveryRules": [
697
- {
698
- "id": "from-source-collaborator-ids",
699
- "kind": "source-field",
700
- "sourcePath": "collaboratorIds"
701
- }
702
- ]
703
- }
704
- ],
705
- "mappings": [
706
- {
707
- "id": "opx-source-employees-to-raw",
708
- "purpose": "source",
709
- "sourceId": "opx-source",
710
- "endpoint": "/employees",
711
- "objectType": "people",
712
- "contentType": "raw",
713
- "mode": "knowledge",
714
- "map": {
715
- "recordId": {
716
- "op": "path",
717
- "path": "id",
718
- "required": true
719
- },
720
- "objectType": {
721
- "op": "constant",
722
- "value": "people"
723
- },
724
- "data.displayName": {
725
- "op": "path",
726
- "path": "name",
727
- "required": true
728
- },
729
- "data.role": {
730
- "op": "path",
731
- "path": "role",
732
- "required": true
733
- },
734
- "data.email": {
735
- "op": "path",
736
- "path": "email"
737
- },
738
- "data.sourceId": {
739
- "op": "path",
740
- "path": "id"
741
- }
742
- }
743
- },
744
- {
745
- "id": "opx-source-external-people-to-raw",
746
- "purpose": "source",
747
- "sourceId": "opx-source",
748
- "endpoint": "/external-people",
749
- "objectType": "people",
750
- "contentType": "raw",
751
- "mode": "knowledge",
752
- "map": {
753
- "recordId": {
754
- "op": "path",
755
- "path": "id",
756
- "required": true
757
- },
758
- "objectType": {
759
- "op": "constant",
760
- "value": "people"
761
- },
762
- "data.displayName": {
763
- "op": "path",
764
- "path": "name",
765
- "required": true
766
- },
767
- "data.role": {
768
- "op": "path",
769
- "path": "role",
770
- "required": true
771
- },
772
- "data.organization": {
773
- "op": "path",
774
- "path": "organization"
775
- },
776
- "data.sourceId": {
777
- "op": "path",
778
- "path": "id"
779
- }
780
- }
781
- },
782
- {
783
- "id": "opx-source-work-items-to-raw",
784
- "purpose": "source",
785
- "sourceId": "opx-source",
786
- "endpoint": "/work-items",
787
- "objectType": "work-items",
788
- "contentType": "raw",
789
- "mode": "knowledge",
790
- "map": {
791
- "data": {
792
- "op": "path",
793
- "path": "$"
794
- }
795
- }
796
- },
797
- {
798
- "id": "opx-source-work-item-context",
799
- "purpose": "source",
800
- "sourceId": "opx-source",
801
- "endpoint": "/work-items/:id/context",
802
- "objectType": "work-items",
803
- "contentType": "context",
804
- "mode": "context",
805
- "trigger": "on-demand",
806
- "map": {
807
- "data": {
808
- "op": "path",
809
- "path": "$"
810
- }
811
- }
812
- },
813
- {
814
- "id": "opx-people-abstract",
815
- "purpose": "abstract",
816
- "abstractType": "People",
817
- "objectType": "people",
818
- "contentType": "snapshots",
819
- "map": {
820
- "title": {
821
- "expr": {
822
- "op": "path",
823
- "path": "data.displayName"
114
+ "profile": { "allowSnapshotBuckets": true }
115
+ },
116
+ {
117
+ "id": "discovery",
118
+ "discriminator": {
119
+ "path": "data.discoveryType",
120
+ "required": false
824
121
  },
825
- "required": true
826
- },
827
- "role": {
828
- "expr": {
829
- "op": "path",
830
- "path": "data.role"
122
+ "profile": { "allowSnapshotBuckets": false }
123
+ },
124
+ {
125
+ "id": "analysis",
126
+ "discriminator": {
127
+ "path": "data.analysisType",
128
+ "required": false,
129
+ "defaultValue": "delivery-risk"
831
130
  },
832
- "required": true
833
- },
834
- "lens": {
835
- "op": "constant",
836
- "value": "people"
837
- }
838
- }
839
- },
840
- {
841
- "id": "opx-work-items-completion-priority",
842
- "purpose": "completion",
843
- "objectType": "work-items",
844
- "contentType": "snapshots",
845
- "map": {
846
- "data.priority": {
847
- "op": "coalesce",
848
- "exprs": [
849
- {
850
- "op": "path",
851
- "path": "priority"
852
- },
853
- {
854
- "op": "constant",
855
- "value": "normal"
856
- }
857
- ]
858
- },
859
- "data.title": {
860
- "op": "path",
861
- "path": "title"
862
- }
863
- }
864
- }
865
- ],
866
- "views": [
867
- {
868
- "id": "opx-work-items-list",
869
- "kind": "list",
870
- "title": "Work items",
871
- "columns": [
872
- "concept.title",
873
- "data.status",
874
- "data.priority"
875
- ],
876
- "abstractType": "WorkItems"
877
- },
878
- {
879
- "id": "opx-work-items-item",
880
- "kind": "item",
881
- "title": "Work item",
882
- "sections": [
883
- "concept",
884
- "data",
885
- "workflow",
886
- "analysis",
887
- "decisions"
888
- ],
889
- "abstractType": "WorkItems"
890
- },
891
- {
892
- "id": "opx-people-list",
893
- "kind": "list",
894
- "abstractType": "People",
895
- "title": "People",
896
- "columns": [
897
- "concept.title",
898
- "objectType",
899
- "data.role"
900
- ]
901
- },
902
- {
903
- "id": "opx-work-item-expand-people",
904
- "kind": "relationship-expansion",
905
- "relationshipDefinitionId": "people-assigned-to-work-items",
906
- "direction": "to-from",
907
- "abstractType": "WorkItems"
908
- }
909
- ],
910
- "writes": [
911
- {
912
- "id": "opx-people-employee-snapshots",
913
- "objectType": "people",
914
- "contentType": "snapshots",
915
- "identity": {
916
- "primaryKind": "employeeId",
917
- "issuer": "opx-source"
918
- }
919
- },
920
- {
921
- "id": "opx-people-external-snapshots",
922
- "objectType": "people",
923
- "contentType": "snapshots",
924
- "identity": {
925
- "primaryKind": "externalPersonId",
926
- "issuer": "opx-source"
927
- }
928
- },
929
- {
930
- "id": "opx-work-items-snapshots",
931
- "objectType": "work-items",
932
- "contentType": "snapshots",
933
- "identity": {
934
- "primaryKind": "workItemId",
935
- "issuer": "opx-source"
936
- }
937
- },
938
- {
939
- "id": "opx-playbooks-snapshots",
940
- "objectType": "playbooks",
941
- "contentType": "snapshots",
942
- "identity": {
943
- "primaryKind": "playbookId",
944
- "issuer": "opx-source"
945
- }
946
- },
947
- {
948
- "id": "opx-activity-events-snapshots",
949
- "objectType": "activity-events",
950
- "contentType": "snapshots",
951
- "identity": {
952
- "primaryKind": "activityEventId",
953
- "issuer": "opx-source"
954
- }
955
- }
956
- ],
957
- "sources": [
958
- {
959
- "id": "opx-source",
960
- "name": "Opx-service",
961
- "kind": "rest",
962
- "baseUrlEnv": "OPX_SOURCE_URL",
963
- "defaultBaseUrl": "http://127.0.0.1:5102",
964
- "credentialRef": "opx-source-local",
965
- "connectorRef": "opx-rest",
966
- "endpoints": [
967
- "/employees",
968
- "/external-people",
969
- "/work-items",
970
- "/activity-events",
971
- "/playbooks",
972
- "/work-items/:id/context"
973
- ],
974
- "pagination": {
975
- "style": "cursor",
976
- "defaultPageSize": 50
977
- },
978
- "retention": {
979
- "context": {
980
- "ttlSeconds": 3600,
981
- "discardOnWorkCompletion": true
982
- }
983
- },
984
- "routes": [
985
- {
986
- "endpoint": "/playbooks",
987
- "objectType": "playbooks",
988
- "dataCategory": "knowledge",
989
- "identityPath": "id",
990
- "primaryKind": "playbookId",
991
- "modes": [
992
- "knowledge"
993
- ],
994
- "pageSize": 2,
995
- "checkpoint": {
996
- "method": "cursor"
997
- }
998
- },
999
- {
1000
- "endpoint": "/work-items/:id/context",
1001
- "objectType": "work-items",
1002
- "dataCategory": "entity",
1003
- "identityPath": "workItemId",
1004
- "primaryKind": "workItemId",
1005
- "modes": [
1006
- "context"
1007
- ],
1008
- "checkpoint": {
1009
- "method": "cursor"
1010
- }
1011
- },
1012
- {
1013
- "endpoint": "/work-items",
1014
- "objectType": "work-items",
1015
- "dataCategory": "entity",
1016
- "identityPath": "id",
1017
- "primaryKind": "workItemId",
1018
- "modes": [
1019
- "knowledge"
1020
- ],
1021
- "checkpoint": {
1022
- "method": "cursor"
1023
- }
1024
- },
1025
- {
1026
- "endpoint": "/employees",
1027
- "objectType": "people",
1028
- "dataCategory": "entity",
1029
- "identityPath": "id",
1030
- "primaryKind": "employeeId",
1031
- "modes": [
1032
- "knowledge"
1033
- ],
1034
- "checkpoint": {
1035
- "method": "cursor"
1036
- }
1037
- },
1038
- {
1039
- "endpoint": "/external-people",
1040
- "objectType": "people",
1041
- "dataCategory": "entity",
1042
- "identityPath": "id",
1043
- "primaryKind": "externalPersonId",
1044
- "modes": [
1045
- "knowledge"
1046
- ],
1047
- "checkpoint": {
1048
- "method": "cursor"
1049
- }
1050
- },
1051
- {
1052
- "endpoint": "/activity-events",
1053
- "objectType": "activity-events",
1054
- "dataCategory": "event",
1055
- "identityPath": "id",
1056
- "primaryKind": "activityEventId",
1057
- "modes": [
1058
- "knowledge"
1059
- ],
1060
- "checkpoint": {
1061
- "method": "cursor"
1062
- }
1063
- }
1064
- ]
1065
- }
1066
- ],
1067
- "services": [
1068
- {
1069
- "id": "opx-enrich-priority",
1070
- "name": "Enrich work-item priority",
1071
- "description": "Deterministic priority score draft for WorkItems. Returns a patch plan — does not persist. Pipeline write-record applies the revision-safe mutation on the concrete member.",
1072
- "role": "agent",
1073
- "capabilities": [
1074
- "enrich"
1075
- ],
1076
- "inputs": [
1077
- {
1078
- "id": "snapshot",
1079
- "abstractType": "WorkItems",
1080
- "path": "snapshots",
1081
- "description": "Current WorkItems projection at a captured revision"
1082
- }
1083
- ],
1084
- "outputs": [
1085
- {
1086
- "id": "patch-plan",
1087
- "abstractType": "WorkItems",
1088
- "path": "snapshots",
1089
- "description": "Draft patch / scored fields for the writer step"
1090
- }
1091
- ],
1092
- "invocation": {
1093
- "kind": "worker",
1094
- "operation": "enrich-priority"
1095
- }
1096
- },
1097
- {
1098
- "id": "nexum",
1099
- "name": "Nexum analyze",
1100
- "description": "Deterministic evidence-graph draft and per-item apply plan from @x12i/nexum (zone nexum · worker :7500 · MEMORIX_NEXUM_URL). Does not persist. Pipeline write-record mode nexum applies contributions.",
1101
- "role": "agent",
1102
- "capabilities": [
1103
- "analyze"
1104
- ],
1105
- "memorixAccess": [
1106
- "explore"
1107
- ],
1108
- "inputs": [
1109
- {
1110
- "id": "snapshot",
1111
- "abstractType": "KnowledgeArtifacts",
1112
- "path": "snapshots",
1113
- "description": "KnowledgeArtifacts projection or NexumAnalyzeRequest items"
1114
- }
1115
- ],
1116
- "outputs": [
1117
- {
1118
- "id": "apply-plan",
1119
- "abstractType": "KnowledgeArtifacts",
1120
- "path": "snapshots",
1121
- "description": "x12i-nexum/1 graph draft and replace-contribution apply plan"
1122
- }
1123
- ],
1124
- "invocation": {
1125
- "kind": "worker",
1126
- "operation": "analyze",
1127
- "endpointEnv": "MEMORIX_NEXUM_URL"
1128
- }
1129
- }
1130
- ],
1131
- "pipelines": [
1132
- {
1133
- "id": "opx-knowledge-pull",
1134
- "name": "Scheduled knowledge pull from opx-source",
1135
- "trigger": "scheduled",
1136
- "mode": "knowledge",
1137
- "steps": [
1138
- {
1139
- "id": "pull",
1140
- "kind": "memory-pull",
1141
- "sourceId": "opx-source"
1142
- },
1143
- {
1144
- "id": "land-raw",
1145
- "kind": "write-raw"
1146
- },
1147
- {
1148
- "id": "normalize",
1149
- "kind": "normalize"
1150
- },
1151
- {
1152
- "id": "promote",
1153
- "kind": "promote-snapshots"
1154
- }
1155
- ]
1156
- },
1157
- {
1158
- "id": "opx-context-pull",
1159
- "name": "On-demand work-item context pull",
1160
- "trigger": "on-demand",
1161
- "mode": "context",
1162
- "steps": [
1163
- {
1164
- "id": "pull",
1165
- "kind": "memory-pull",
1166
- "sourceId": "opx-source"
1167
- },
1168
- {
1169
- "id": "land-raw",
1170
- "kind": "write-raw"
1171
- },
1172
- {
1173
- "id": "normalize-context",
1174
- "kind": "normalize-context"
1175
- },
1176
- {
1177
- "id": "ttl",
1178
- "kind": "apply-ttl"
1179
- }
1180
- ]
1181
- },
1182
- {
1183
- "id": "opx-relationship-build",
1184
- "name": "Discover and write lightweight relationships",
1185
- "trigger": "explicit",
1186
- "steps": [
1187
- {
1188
- "id": "discover",
1189
- "kind": "relationship-discover"
1190
- },
1191
- {
1192
- "id": "write",
1193
- "kind": "relationship-write"
1194
- },
1195
- {
1196
- "id": "verify",
1197
- "kind": "relationship-verify"
1198
- }
1199
- ]
1200
- },
1201
- {
1202
- "id": "opx-analysis",
1203
- "name": "Work-item analysis sibling",
1204
- "trigger": "explicit",
1205
- "steps": [
1206
- {
1207
- "id": "analyze",
1208
- "kind": "analysis"
1209
- },
1210
- {
1211
- "id": "write-sibling",
1212
- "kind": "write-content",
1213
- "contentType": "analysis"
1214
- }
1215
- ]
1216
- },
1217
- {
1218
- "id": "opx-workflow",
1219
- "name": "Work-item workflow sibling",
1220
- "trigger": "explicit",
1221
- "steps": [
1222
- {
1223
- "id": "sync-workflow",
1224
- "kind": "workflow-sync"
1225
- },
1226
- {
1227
- "id": "write-sibling",
1228
- "kind": "write-content",
1229
- "contentType": "workflow"
1230
- }
1231
- ]
1232
- },
1233
- {
1234
- "id": "opx-enrich-priority",
1235
- "name": "Enrich WI priority (draft then write)",
1236
- "trigger": "explicit",
1237
- "description": "Capture snapshot → enrich service (opx-enrich-priority) → write-record. Runtime v2 uses stepKind enrich + serviceId.",
1238
- "steps": [
1239
- {
1240
- "id": "enrich",
1241
- "kind": "enrich",
1242
- "serviceId": "opx-enrich-priority"
1243
- },
1244
- {
1245
- "id": "write",
1246
- "kind": "write-record",
1247
- "contentType": "snapshots"
1248
- }
1249
- ]
1250
- },
1251
- {
1252
- "id": "opx-nexum-analyze",
1253
- "name": "Nexum analyze + write-record",
1254
- "trigger": "explicit",
1255
- "description": "Invoke @x12i/nexum analyze (MEMORIX_NEXUM_URL · default :7500), then platform write-record applies proposedGraph (mode nexum). Worker drafts; Memorix persists.",
1256
- "steps": [
1257
- {
1258
- "id": "analyze",
1259
- "kind": "analyze",
1260
- "serviceId": "nexum"
1261
- },
1262
- {
1263
- "id": "write-graph",
1264
- "kind": "write-record",
1265
- "contentType": "snapshots",
1266
- "portConfig": {
1267
- "mode": "nexum"
131
+ "profile": { "allowSnapshotBuckets": false }
132
+ },
133
+ {
134
+ "id": "decisions",
135
+ "discriminator": {
136
+ "path": "data.decisionType",
137
+ "required": false,
138
+ "defaultValue": "priority"
1268
139
  },
1269
- "dependsOn": [
1270
- "analyze"
1271
- ],
1272
- "inputs": [
1273
- {
1274
- "fromStep": "analyze",
1275
- "key": "analyze"
1276
- }
1277
- ],
1278
- "notes": "mode nexum — create-or-update contribution/node/claim records from proposedGraph"
1279
- }
1280
- ]
1281
- }
1282
- ],
1283
- "schedules": [],
1284
- "kindDeclarations": [],
1285
- "extensions": {}
1286
- }
140
+ "profile": { "allowSnapshotBuckets": false }
141
+ },
142
+ {
143
+ "id": "workflow",
144
+ "profile": { "allowSnapshotBuckets": false }
145
+ },
146
+ {
147
+ "id": "context",
148
+ "retention": "work-scoped-ttl",
149
+ "profile": { "allowSnapshotBuckets": false }
150
+ },
151
+ {
152
+ "id": "relationships",
153
+ "profile": { "allowSnapshotBuckets": false }
154
+ }
155
+ ],
156
+ "snapshotBuckets": {
157
+ "analytics": "optional",
158
+ "enrichment": "optional",
159
+ "insights": "optional"
160
+ },
161
+ "fields": [
162
+ {
163
+ "path": "data.title",
164
+ "valueType": "string",
165
+ "contentType": "snapshots"
166
+ },
167
+ {
168
+ "path": "data.status",
169
+ "valueType": "string",
170
+ "contentType": "snapshots"
171
+ },
172
+ {
173
+ "path": "data.priority",
174
+ "valueType": "string",
175
+ "contentType": "snapshots"
176
+ },
177
+ {
178
+ "path": "data.assigneeId",
179
+ "valueType": "recordId",
180
+ "contentType": "snapshots",
181
+ "refersTo": {
182
+ "objectType": "people"
183
+ }
184
+ },
185
+ {
186
+ "path": "data.playbookIds",
187
+ "valueType": "array",
188
+ "contentType": "snapshots",
189
+ "refersTo": {
190
+ "objectType": "playbooks"
191
+ }
192
+ },
193
+ {
194
+ "path": "data.dependsOnIds",
195
+ "valueType": "array",
196
+ "contentType": "snapshots",
197
+ "refersTo": {
198
+ "objectType": "work-items"
199
+ }
200
+ }
201
+ ]
202
+ },
203
+ {
204
+ "id": "playbooks",
205
+ "name": "Playbooks",
206
+ "dataCategory": "knowledge",
207
+ "abstractTypes": [
208
+ "Playbooks"
209
+ ],
210
+ "contentTypes": [
211
+ {
212
+ "id": "raw",
213
+ "profile": { "allowSnapshotBuckets": false }
214
+ },
215
+ {
216
+ "id": "snapshots",
217
+ "notes": "Persistent knowledge content",
218
+ "profile": { "allowSnapshotBuckets": true }
219
+ },
220
+ {
221
+ "id": "relationships",
222
+ "profile": { "allowSnapshotBuckets": false }
223
+ }
224
+ ],
225
+ "retention": "persistent-knowledge",
226
+ "fields": [
227
+ {
228
+ "path": "data.name",
229
+ "valueType": "string",
230
+ "contentType": "snapshots"
231
+ },
232
+ {
233
+ "path": "data.body",
234
+ "valueType": "string",
235
+ "contentType": "snapshots"
236
+ },
237
+ {
238
+ "path": "data.contentHash",
239
+ "valueType": "string",
240
+ "contentType": "snapshots"
241
+ }
242
+ ]
243
+ },
244
+ {
245
+ "id": "activity-events",
246
+ "name": "Activity Events",
247
+ "dataCategory": "event",
248
+ "abstractTypes": [
249
+ "ActivityEvents"
250
+ ],
251
+ "contentTypes": [
252
+ {
253
+ "id": "raw",
254
+ "profile": { "allowSnapshotBuckets": false }
255
+ },
256
+ {
257
+ "id": "snapshots",
258
+ "notes": "Normalized event content",
259
+ "profile": { "allowSnapshotBuckets": true }
260
+ },
261
+ {
262
+ "id": "relationships",
263
+ "profile": { "allowSnapshotBuckets": false }
264
+ }
265
+ ],
266
+ "fields": [
267
+ {
268
+ "path": "data.type",
269
+ "valueType": "string",
270
+ "contentType": "snapshots"
271
+ },
272
+ {
273
+ "path": "data.message",
274
+ "valueType": "string",
275
+ "contentType": "snapshots"
276
+ },
277
+ {
278
+ "path": "data.occurredAt",
279
+ "valueType": "datetime",
280
+ "contentType": "snapshots"
281
+ },
282
+ {
283
+ "path": "data.workItemId",
284
+ "valueType": "recordId",
285
+ "contentType": "snapshots",
286
+ "refersTo": {
287
+ "objectType": "work-items"
288
+ }
289
+ },
290
+ {
291
+ "path": "data.actorId",
292
+ "valueType": "recordId",
293
+ "contentType": "snapshots",
294
+ "refersTo": {
295
+ "objectType": "people"
296
+ }
297
+ }
298
+ ]
299
+ },
300
+ {
301
+ "id": "content",
302
+ "name": "Content",
303
+ "dataCategory": "knowledge",
304
+ "abstractTypes": [
305
+ "KnowledgeArtifacts"
306
+ ],
307
+ "notes": "Knowledge graph snapshots and Nexum apply-plan records (write-record mode nexum)",
308
+ "contentTypes": [
309
+ {
310
+ "id": "raw",
311
+ "profile": { "allowSnapshotBuckets": false }
312
+ },
313
+ {
314
+ "id": "snapshots",
315
+ "required": false,
316
+ "notes": "Knowledge-graph and other snapshot artififacts (data.kind: knowledge-graph)",
317
+ "profile": { "allowSnapshotBuckets": true }
318
+ },
319
+ {
320
+ "id": "nexum",
321
+ "required": false,
322
+ "notes": "Optional Nexum snapshot facet; durable apply-plan kinds use nexum-* object types",
323
+ "profile": { "allowSnapshotBuckets": false }
324
+ },
325
+ {
326
+ "id": "relationships",
327
+ "profile": { "allowSnapshotBuckets": false }
328
+ }
329
+ ],
330
+ "fields": [
331
+ {
332
+ "path": "concept.title",
333
+ "valueType": "string",
334
+ "contentType": "snapshots"
335
+ },
336
+ {
337
+ "path": "data.title",
338
+ "valueType": "string",
339
+ "contentType": "snapshots"
340
+ },
341
+ {
342
+ "path": "data.kind",
343
+ "valueType": "string",
344
+ "contentType": "snapshots"
345
+ }
346
+ ]
347
+ }
348
+ ],
349
+ "abstractTypes": [
350
+ {
351
+ "id": "People",
352
+ "name": "People",
353
+ "meaning": "People who perform operational work — inside the org (employeeId) or outside (externalPersonId), distinguished by identity kind",
354
+ "category": "entity",
355
+ "properties": [
356
+ {
357
+ "id": "title",
358
+ "valueType": "string",
359
+ "required": true
360
+ },
361
+ {
362
+ "id": "role",
363
+ "valueType": "string",
364
+ "required": true
365
+ },
366
+ {
367
+ "id": "lens",
368
+ "valueType": "string",
369
+ "required": false
370
+ },
371
+ {
372
+ "id": "email",
373
+ "valueType": "string",
374
+ "required": false
375
+ },
376
+ {
377
+ "id": "organization",
378
+ "valueType": "string",
379
+ "required": false
380
+ }
381
+ ],
382
+ "members": [
383
+ {
384
+ "objectType": "people",
385
+ "contentType": "snapshots",
386
+ "properties": [
387
+ {
388
+ "abstractProperty": "title",
389
+ "contentType": "snapshots",
390
+ "mappingId": "opx-people-abstract"
391
+ },
392
+ {
393
+ "abstractProperty": "role",
394
+ "contentType": "snapshots",
395
+ "mappingId": "opx-people-abstract"
396
+ },
397
+ {
398
+ "abstractProperty": "lens",
399
+ "contentType": "snapshots",
400
+ "mappingId": "opx-people-abstract"
401
+ },
402
+ {
403
+ "abstractProperty": "email",
404
+ "contentType": "snapshots",
405
+ "mappingId": "opx-people-abstract"
406
+ },
407
+ {
408
+ "abstractProperty": "organization",
409
+ "contentType": "snapshots",
410
+ "mappingId": "opx-people-abstract"
411
+ }
412
+ ]
413
+ }
414
+ ],
415
+ "union": false,
416
+ "notes": "People abstract ↔ people OT 1:1. Inside/outside org is concept.identifiers.primary.kind (employeeId | externalPersonId), not a second OT."
417
+ },
418
+ {
419
+ "id": "WorkItems",
420
+ "name": "Work Items",
421
+ "meaning": "Units of operational work",
422
+ "category": "entity",
423
+ "properties": [
424
+ {
425
+ "id": "title",
426
+ "valueType": "string",
427
+ "required": true
428
+ },
429
+ {
430
+ "id": "status",
431
+ "valueType": "string",
432
+ "required": true
433
+ },
434
+ {
435
+ "id": "priority",
436
+ "valueType": "string",
437
+ "required": false
438
+ }
439
+ ],
440
+ "members": [
441
+ {
442
+ "objectType": "work-items",
443
+ "contentType": "snapshots",
444
+ "properties": [
445
+ {
446
+ "abstractProperty": "title",
447
+ "contentType": "snapshots",
448
+ "propertyPath": "data.title",
449
+ "concreteValueType": "string"
450
+ },
451
+ {
452
+ "abstractProperty": "status",
453
+ "contentType": "snapshots",
454
+ "propertyPath": "data.status",
455
+ "concreteValueType": "string"
456
+ },
457
+ {
458
+ "abstractProperty": "priority",
459
+ "contentType": "snapshots",
460
+ "propertyPath": "data.priority",
461
+ "concreteValueType": "string"
462
+ }
463
+ ]
464
+ }
465
+ ],
466
+ "union": false
467
+ },
468
+ {
469
+ "id": "Playbooks",
470
+ "name": "Playbooks",
471
+ "meaning": "Reusable operational knowledge / playbooks",
472
+ "category": "knowledge",
473
+ "properties": [
474
+ {
475
+ "id": "title",
476
+ "valueType": "string",
477
+ "required": true
478
+ },
479
+ {
480
+ "id": "body",
481
+ "valueType": "string",
482
+ "required": true
483
+ },
484
+ {
485
+ "id": "contentHash",
486
+ "valueType": "string",
487
+ "required": false
488
+ }
489
+ ],
490
+ "members": [
491
+ {
492
+ "objectType": "playbooks",
493
+ "contentType": "snapshots",
494
+ "properties": [
495
+ {
496
+ "abstractProperty": "title",
497
+ "contentType": "snapshots",
498
+ "propertyPath": "data.name",
499
+ "concreteValueType": "string"
500
+ },
501
+ {
502
+ "abstractProperty": "body",
503
+ "contentType": "snapshots",
504
+ "propertyPath": "data.body",
505
+ "concreteValueType": "string"
506
+ },
507
+ {
508
+ "abstractProperty": "contentHash",
509
+ "contentType": "snapshots",
510
+ "propertyPath": "data.contentHash",
511
+ "concreteValueType": "string"
512
+ }
513
+ ]
514
+ }
515
+ ],
516
+ "union": false
517
+ },
518
+ {
519
+ "id": "ActivityEvents",
520
+ "name": "Activity Events",
521
+ "meaning": "Progress and activity reports about work items",
522
+ "category": "event",
523
+ "properties": [
524
+ {
525
+ "id": "type",
526
+ "valueType": "string",
527
+ "required": true
528
+ },
529
+ {
530
+ "id": "message",
531
+ "valueType": "string",
532
+ "required": true
533
+ },
534
+ {
535
+ "id": "workItemId",
536
+ "valueType": "recordId",
537
+ "required": true
538
+ },
539
+ {
540
+ "id": "actorId",
541
+ "valueType": "recordId",
542
+ "required": false
543
+ },
544
+ {
545
+ "id": "occurredAt",
546
+ "valueType": "datetime",
547
+ "required": false
548
+ }
549
+ ],
550
+ "members": [
551
+ {
552
+ "objectType": "activity-events",
553
+ "contentType": "snapshots",
554
+ "properties": [
555
+ {
556
+ "abstractProperty": "type",
557
+ "contentType": "snapshots",
558
+ "propertyPath": "data.type",
559
+ "concreteValueType": "string"
560
+ },
561
+ {
562
+ "abstractProperty": "message",
563
+ "contentType": "snapshots",
564
+ "propertyPath": "data.message",
565
+ "concreteValueType": "string"
566
+ },
567
+ {
568
+ "abstractProperty": "workItemId",
569
+ "contentType": "snapshots",
570
+ "propertyPath": "data.workItemId",
571
+ "concreteValueType": "recordId"
572
+ },
573
+ {
574
+ "abstractProperty": "actorId",
575
+ "contentType": "snapshots",
576
+ "propertyPath": "data.actorId",
577
+ "concreteValueType": "recordId"
578
+ },
579
+ {
580
+ "abstractProperty": "occurredAt",
581
+ "contentType": "snapshots",
582
+ "propertyPath": "data.occurredAt",
583
+ "concreteValueType": "datetime"
584
+ }
585
+ ]
586
+ }
587
+ ],
588
+ "union": false
589
+ },
590
+ {
591
+ "id": "KnowledgeArtifacts",
592
+ "name": "Knowledge Artifacts",
593
+ "meaning": "Structured knowledge graphs and snapshot bags produced by analyze workers (Nexum)",
594
+ "category": "knowledge",
595
+ "properties": [
596
+ {
597
+ "id": "title",
598
+ "valueType": "string",
599
+ "required": false
600
+ }
601
+ ],
602
+ "members": [
603
+ {
604
+ "objectType": "content",
605
+ "contentType": "snapshots",
606
+ "properties": [
607
+ {
608
+ "abstractProperty": "title",
609
+ "contentType": "snapshots",
610
+ "propertyPath": "concept.title",
611
+ "concreteValueType": "string"
612
+ }
613
+ ]
614
+ }
615
+ ],
616
+ "union": false,
617
+ "notes": "Used by nexum service ports; durable apply-plan kinds use nexum-* object types (content/snapshots remains the KnowledgeArtifacts member)"
618
+ }
619
+ ],
620
+ "relationshipDefinitions": [
621
+ {
622
+ "id": "people-assigned-to-work-items",
623
+ "name": "People assigned to work items",
624
+ "meaning": "A person is assigned to perform a work item",
625
+ "directionality": "directed",
626
+ "from": {
627
+ "abstractType": "People",
628
+ "path": "assignedWorkItems"
629
+ },
630
+ "to": {
631
+ "abstractType": "WorkItems",
632
+ "path": "assignedPeople"
633
+ },
634
+ "discoveryRules": [
635
+ {
636
+ "id": "from-source-assignee",
637
+ "kind": "source-field",
638
+ "sourcePath": "assigneeId",
639
+ "notes": "opx-source work-items.assigneeId resolves to people OT (any identity kind)"
640
+ }
641
+ ]
642
+ },
643
+ {
644
+ "id": "work-items-use-playbooks",
645
+ "name": "Work items use playbooks",
646
+ "meaning": "A work item follows one or more reusable playbooks",
647
+ "directionality": "directed",
648
+ "from": {
649
+ "abstractType": "WorkItems",
650
+ "path": "usedPlaybooks"
651
+ },
652
+ "to": {
653
+ "abstractType": "Playbooks",
654
+ "path": "usedByWorkItems"
655
+ },
656
+ "discoveryRules": [
657
+ {
658
+ "id": "from-source-playbook-ids",
659
+ "kind": "source-field",
660
+ "sourcePath": "playbookIds"
661
+ }
662
+ ]
663
+ },
664
+ {
665
+ "id": "activity-events-about-work-items",
666
+ "name": "Activity events about work items",
667
+ "meaning": "An activity event reports progress on a work item",
668
+ "directionality": "directed",
669
+ "from": {
670
+ "abstractType": "ActivityEvents",
671
+ "path": "aboutWorkItems"
672
+ },
673
+ "to": {
674
+ "abstractType": "WorkItems",
675
+ "path": "activityEvents"
676
+ },
677
+ "discoveryRules": [
678
+ {
679
+ "id": "from-source-work-item-id",
680
+ "kind": "source-field",
681
+ "sourcePath": "workItemId"
682
+ }
683
+ ]
684
+ },
685
+ {
686
+ "id": "work-items-depend-on-work-items",
687
+ "name": "Work items depend on work items",
688
+ "meaning": "A work item cannot complete until another work item completes",
689
+ "directionality": "directed",
690
+ "from": {
691
+ "abstractType": "WorkItems",
692
+ "path": "dependsOn"
693
+ },
694
+ "to": {
695
+ "abstractType": "WorkItems",
696
+ "path": "dependedOnBy"
697
+ },
698
+ "discoveryRules": [
699
+ {
700
+ "id": "from-source-depends-on",
701
+ "kind": "source-field",
702
+ "sourcePath": "dependsOnIds"
703
+ }
704
+ ]
705
+ },
706
+ {
707
+ "id": "people-collaborate-with-people",
708
+ "name": "People collaborate with people",
709
+ "meaning": "Two people collaborate on operational work",
710
+ "directionality": "undirected",
711
+ "from": {
712
+ "abstractType": "People",
713
+ "path": "collaborators"
714
+ },
715
+ "to": {
716
+ "abstractType": "People",
717
+ "path": "collaborators"
718
+ },
719
+ "discoveryRules": [
720
+ {
721
+ "id": "from-source-collaborator-ids",
722
+ "kind": "source-field",
723
+ "sourcePath": "collaboratorIds"
724
+ }
725
+ ]
726
+ }
727
+ ],
728
+ "mappings": [
729
+ {
730
+ "id": "opx-source-employees-to-raw",
731
+ "purpose": "source",
732
+ "sourceId": "opx-source",
733
+ "endpoint": "/employees",
734
+ "objectType": "people",
735
+ "contentType": "raw",
736
+ "mode": "knowledge",
737
+ "map": {
738
+ "recordId": {
739
+ "op": "path",
740
+ "path": "id",
741
+ "required": true
742
+ },
743
+ "objectType": {
744
+ "op": "constant",
745
+ "value": "people"
746
+ },
747
+ "data.displayName": {
748
+ "op": "path",
749
+ "path": "name",
750
+ "required": true
751
+ },
752
+ "data.role": {
753
+ "op": "path",
754
+ "path": "role",
755
+ "required": true
756
+ },
757
+ "data.email": {
758
+ "op": "path",
759
+ "path": "email"
760
+ },
761
+ "data.sourceId": {
762
+ "op": "path",
763
+ "path": "id"
764
+ }
765
+ }
766
+ },
767
+ {
768
+ "id": "opx-source-external-people-to-raw",
769
+ "purpose": "source",
770
+ "sourceId": "opx-source",
771
+ "endpoint": "/external-people",
772
+ "objectType": "people",
773
+ "contentType": "raw",
774
+ "mode": "knowledge",
775
+ "map": {
776
+ "recordId": {
777
+ "op": "path",
778
+ "path": "id",
779
+ "required": true
780
+ },
781
+ "objectType": {
782
+ "op": "constant",
783
+ "value": "people"
784
+ },
785
+ "data.displayName": {
786
+ "op": "path",
787
+ "path": "name",
788
+ "required": true
789
+ },
790
+ "data.role": {
791
+ "op": "path",
792
+ "path": "role",
793
+ "required": true
794
+ },
795
+ "data.organization": {
796
+ "op": "path",
797
+ "path": "organization"
798
+ },
799
+ "data.sourceId": {
800
+ "op": "path",
801
+ "path": "id"
802
+ }
803
+ }
804
+ },
805
+ {
806
+ "id": "opx-source-work-items-to-raw",
807
+ "purpose": "source",
808
+ "sourceId": "opx-source",
809
+ "endpoint": "/work-items",
810
+ "objectType": "work-items",
811
+ "contentType": "raw",
812
+ "mode": "knowledge",
813
+ "map": {
814
+ "data": {
815
+ "op": "path",
816
+ "path": "$"
817
+ }
818
+ }
819
+ },
820
+ {
821
+ "id": "opx-source-work-item-context",
822
+ "purpose": "source",
823
+ "sourceId": "opx-source",
824
+ "endpoint": "/work-items/:id/context",
825
+ "objectType": "work-items",
826
+ "contentType": "context",
827
+ "mode": "context",
828
+ "trigger": "on-demand",
829
+ "map": {
830
+ "data": {
831
+ "op": "path",
832
+ "path": "$"
833
+ }
834
+ }
835
+ },
836
+ {
837
+ "id": "opx-people-abstract",
838
+ "purpose": "abstract",
839
+ "abstractType": "People",
840
+ "objectType": "people",
841
+ "contentType": "snapshots",
842
+ "map": {
843
+ "title": {
844
+ "expr": {
845
+ "op": "path",
846
+ "path": "data.displayName"
847
+ },
848
+ "required": true
849
+ },
850
+ "role": {
851
+ "expr": {
852
+ "op": "path",
853
+ "path": "data.role"
854
+ },
855
+ "required": true
856
+ },
857
+ "lens": {
858
+ "op": "constant",
859
+ "value": "people"
860
+ }
861
+ }
862
+ },
863
+ {
864
+ "id": "opx-work-items-completion-priority",
865
+ "purpose": "completion",
866
+ "objectType": "work-items",
867
+ "contentType": "snapshots",
868
+ "map": {
869
+ "data.priority": {
870
+ "op": "coalesce",
871
+ "exprs": [
872
+ {
873
+ "op": "path",
874
+ "path": "priority"
875
+ },
876
+ {
877
+ "op": "constant",
878
+ "value": "normal"
879
+ }
880
+ ]
881
+ },
882
+ "data.title": {
883
+ "op": "path",
884
+ "path": "title"
885
+ }
886
+ }
887
+ }
888
+ ],
889
+ "views": [
890
+ {
891
+ "id": "opx-work-items-list",
892
+ "kind": "list",
893
+ "title": "Work items",
894
+ "columns": [
895
+ "concept.title",
896
+ "data.status",
897
+ "data.priority"
898
+ ],
899
+ "abstractType": "WorkItems"
900
+ },
901
+ {
902
+ "id": "opx-work-items-item",
903
+ "kind": "item",
904
+ "title": "Work item",
905
+ "sections": [
906
+ "concept",
907
+ "data",
908
+ "workflow",
909
+ "analysis",
910
+ "decisions"
911
+ ],
912
+ "abstractType": "WorkItems"
913
+ },
914
+ {
915
+ "id": "opx-people-list",
916
+ "kind": "list",
917
+ "abstractType": "People",
918
+ "title": "People",
919
+ "columns": [
920
+ "concept.title",
921
+ "objectType",
922
+ "data.role"
923
+ ]
924
+ },
925
+ {
926
+ "id": "opx-work-item-expand-people",
927
+ "kind": "relationship-expansion",
928
+ "relationshipDefinitionId": "people-assigned-to-work-items",
929
+ "direction": "to-from",
930
+ "abstractType": "WorkItems"
931
+ }
932
+ ],
933
+ "writes": [
934
+ {
935
+ "id": "opx-people-employee-snapshots",
936
+ "objectType": "people",
937
+ "contentType": "snapshots",
938
+ "identity": {
939
+ "primaryKind": "employeeId",
940
+ "issuer": "opx-source"
941
+ }
942
+ },
943
+ {
944
+ "id": "opx-people-external-snapshots",
945
+ "objectType": "people",
946
+ "contentType": "snapshots",
947
+ "identity": {
948
+ "primaryKind": "externalPersonId",
949
+ "issuer": "opx-source"
950
+ }
951
+ },
952
+ {
953
+ "id": "opx-work-items-snapshots",
954
+ "objectType": "work-items",
955
+ "contentType": "snapshots",
956
+ "identity": {
957
+ "primaryKind": "workItemId",
958
+ "issuer": "opx-source"
959
+ }
960
+ },
961
+ {
962
+ "id": "opx-playbooks-snapshots",
963
+ "objectType": "playbooks",
964
+ "contentType": "snapshots",
965
+ "identity": {
966
+ "primaryKind": "playbookId",
967
+ "issuer": "opx-source"
968
+ }
969
+ },
970
+ {
971
+ "id": "opx-activity-events-snapshots",
972
+ "objectType": "activity-events",
973
+ "contentType": "snapshots",
974
+ "identity": {
975
+ "primaryKind": "activityEventId",
976
+ "issuer": "opx-source"
977
+ }
978
+ }
979
+ ],
980
+ "sources": [
981
+ {
982
+ "id": "opx-source",
983
+ "name": "Opx-service",
984
+ "kind": "rest",
985
+ "baseUrlEnv": "OPX_SOURCE_URL",
986
+ "defaultBaseUrl": "http://127.0.0.1:5102",
987
+ "credentialRef": "opx-source-local",
988
+ "connectorRef": "opx-rest",
989
+ "endpoints": [
990
+ "/employees",
991
+ "/external-people",
992
+ "/work-items",
993
+ "/activity-events",
994
+ "/playbooks",
995
+ "/work-items/:id/context"
996
+ ],
997
+ "pagination": {
998
+ "style": "cursor",
999
+ "defaultPageSize": 50
1000
+ },
1001
+ "retention": {
1002
+ "context": {
1003
+ "ttlSeconds": 3600,
1004
+ "discardOnWorkCompletion": true
1005
+ }
1006
+ },
1007
+ "routes": [
1008
+ {
1009
+ "endpoint": "/playbooks",
1010
+ "objectType": "playbooks",
1011
+ "dataCategory": "knowledge",
1012
+ "identityPath": "id",
1013
+ "primaryKind": "playbookId",
1014
+ "modes": [
1015
+ "knowledge"
1016
+ ],
1017
+ "pageSize": 2,
1018
+ "checkpoint": {
1019
+ "method": "cursor"
1020
+ }
1021
+ },
1022
+ {
1023
+ "endpoint": "/work-items/:id/context",
1024
+ "objectType": "work-items",
1025
+ "dataCategory": "entity",
1026
+ "identityPath": "workItemId",
1027
+ "primaryKind": "workItemId",
1028
+ "modes": [
1029
+ "context"
1030
+ ],
1031
+ "checkpoint": {
1032
+ "method": "cursor"
1033
+ }
1034
+ },
1035
+ {
1036
+ "endpoint": "/work-items",
1037
+ "objectType": "work-items",
1038
+ "dataCategory": "entity",
1039
+ "identityPath": "id",
1040
+ "primaryKind": "workItemId",
1041
+ "modes": [
1042
+ "knowledge"
1043
+ ],
1044
+ "checkpoint": {
1045
+ "method": "cursor"
1046
+ }
1047
+ },
1048
+ {
1049
+ "endpoint": "/employees",
1050
+ "objectType": "people",
1051
+ "dataCategory": "entity",
1052
+ "identityPath": "id",
1053
+ "primaryKind": "employeeId",
1054
+ "modes": [
1055
+ "knowledge"
1056
+ ],
1057
+ "checkpoint": {
1058
+ "method": "cursor"
1059
+ }
1060
+ },
1061
+ {
1062
+ "endpoint": "/external-people",
1063
+ "objectType": "people",
1064
+ "dataCategory": "entity",
1065
+ "identityPath": "id",
1066
+ "primaryKind": "externalPersonId",
1067
+ "modes": [
1068
+ "knowledge"
1069
+ ],
1070
+ "checkpoint": {
1071
+ "method": "cursor"
1072
+ }
1073
+ },
1074
+ {
1075
+ "endpoint": "/activity-events",
1076
+ "objectType": "activity-events",
1077
+ "dataCategory": "event",
1078
+ "identityPath": "id",
1079
+ "primaryKind": "activityEventId",
1080
+ "modes": [
1081
+ "knowledge"
1082
+ ],
1083
+ "checkpoint": {
1084
+ "method": "cursor"
1085
+ }
1086
+ }
1087
+ ]
1088
+ }
1089
+ ],
1090
+ "services": [
1091
+ {
1092
+ "id": "opx-enrich-priority",
1093
+ "name": "Enrich work-item priority",
1094
+ "description": "Deterministic priority score draft for WorkItems. Returns a patch plan — does not persist. Pipeline write-record applies the revision-safe mutation on the concrete member.",
1095
+ "role": "agent",
1096
+ "capabilities": [
1097
+ "enrich"
1098
+ ],
1099
+ "inputs": [
1100
+ {
1101
+ "id": "snapshot",
1102
+ "abstractType": "WorkItems",
1103
+ "path": "snapshots",
1104
+ "description": "Current WorkItems projection at a captured revision"
1105
+ }
1106
+ ],
1107
+ "outputs": [
1108
+ {
1109
+ "id": "patch-plan",
1110
+ "abstractType": "WorkItems",
1111
+ "path": "snapshots",
1112
+ "description": "Draft patch / scored fields for the writer step"
1113
+ }
1114
+ ],
1115
+ "invocation": {
1116
+ "kind": "worker",
1117
+ "operation": "enrich-priority"
1118
+ }
1119
+ },
1120
+ {
1121
+ "id": "nexum",
1122
+ "name": "Nexum analyze",
1123
+ "description": "Deterministic evidence-graph draft and per-item apply plan from @x12i/nexum (zone nexum · worker :7500 · MEMORIX_NEXUM_URL). Does not persist. Pipeline write-record mode nexum applies contributions.",
1124
+ "role": "agent",
1125
+ "capabilities": [
1126
+ "analyze"
1127
+ ],
1128
+ "memorixAccess": [
1129
+ "explore"
1130
+ ],
1131
+ "inputs": [
1132
+ {
1133
+ "id": "snapshot",
1134
+ "abstractType": "KnowledgeArtifacts",
1135
+ "path": "snapshots",
1136
+ "description": "KnowledgeArtifacts projection or NexumAnalyzeRequest items"
1137
+ }
1138
+ ],
1139
+ "outputs": [
1140
+ {
1141
+ "id": "apply-plan",
1142
+ "abstractType": "KnowledgeArtifacts",
1143
+ "path": "snapshots",
1144
+ "description": "x12i-nexum/1 graph draft and replace-contribution apply plan"
1145
+ }
1146
+ ],
1147
+ "invocation": {
1148
+ "kind": "worker",
1149
+ "operation": "analyze",
1150
+ "endpointEnv": "MEMORIX_NEXUM_URL"
1151
+ }
1152
+ }
1153
+ ],
1154
+ "pipelines": [
1155
+ {
1156
+ "id": "opx-knowledge-pull",
1157
+ "name": "Scheduled knowledge pull from opx-source",
1158
+ "trigger": "scheduled",
1159
+ "mode": "knowledge",
1160
+ "steps": [
1161
+ {
1162
+ "id": "pull",
1163
+ "kind": "memory-pull",
1164
+ "sourceId": "opx-source"
1165
+ },
1166
+ {
1167
+ "id": "land-raw",
1168
+ "kind": "write-raw"
1169
+ },
1170
+ {
1171
+ "id": "normalize",
1172
+ "kind": "normalize"
1173
+ },
1174
+ {
1175
+ "id": "promote",
1176
+ "kind": "promote-snapshots"
1177
+ }
1178
+ ]
1179
+ },
1180
+ {
1181
+ "id": "opx-context-pull",
1182
+ "name": "On-demand work-item context pull",
1183
+ "trigger": "on-demand",
1184
+ "mode": "context",
1185
+ "steps": [
1186
+ {
1187
+ "id": "pull",
1188
+ "kind": "memory-pull",
1189
+ "sourceId": "opx-source"
1190
+ },
1191
+ {
1192
+ "id": "land-raw",
1193
+ "kind": "write-raw"
1194
+ },
1195
+ {
1196
+ "id": "normalize-context",
1197
+ "kind": "normalize-context"
1198
+ },
1199
+ {
1200
+ "id": "ttl",
1201
+ "kind": "apply-ttl"
1202
+ }
1203
+ ]
1204
+ },
1205
+ {
1206
+ "id": "opx-relationship-build",
1207
+ "name": "Discover and write lightweight relationships",
1208
+ "trigger": "explicit",
1209
+ "steps": [
1210
+ {
1211
+ "id": "discover",
1212
+ "kind": "relationship-discover"
1213
+ },
1214
+ {
1215
+ "id": "write",
1216
+ "kind": "relationship-write"
1217
+ },
1218
+ {
1219
+ "id": "verify",
1220
+ "kind": "relationship-verify"
1221
+ }
1222
+ ]
1223
+ },
1224
+ {
1225
+ "id": "opx-analysis",
1226
+ "name": "Work-item analysis sibling",
1227
+ "trigger": "explicit",
1228
+ "steps": [
1229
+ {
1230
+ "id": "analyze",
1231
+ "kind": "analysis"
1232
+ },
1233
+ {
1234
+ "id": "write-sibling",
1235
+ "kind": "write-content",
1236
+ "contentType": "analysis"
1237
+ }
1238
+ ]
1239
+ },
1240
+ {
1241
+ "id": "opx-workflow",
1242
+ "name": "Work-item workflow sibling",
1243
+ "trigger": "explicit",
1244
+ "steps": [
1245
+ {
1246
+ "id": "sync-workflow",
1247
+ "kind": "workflow-sync"
1248
+ },
1249
+ {
1250
+ "id": "write-sibling",
1251
+ "kind": "write-content",
1252
+ "contentType": "workflow"
1253
+ }
1254
+ ]
1255
+ },
1256
+ {
1257
+ "id": "opx-enrich-priority",
1258
+ "name": "Enrich WI priority (draft then write)",
1259
+ "trigger": "explicit",
1260
+ "description": "Capture snapshot → enrich service (opx-enrich-priority) → write-record. Runtime v2 uses stepKind enrich + serviceId.",
1261
+ "steps": [
1262
+ {
1263
+ "id": "enrich",
1264
+ "kind": "enrich",
1265
+ "serviceId": "opx-enrich-priority"
1266
+ },
1267
+ {
1268
+ "id": "write",
1269
+ "kind": "write-record",
1270
+ "contentType": "snapshots"
1271
+ }
1272
+ ]
1273
+ },
1274
+ {
1275
+ "id": "opx-nexum-analyze",
1276
+ "name": "Nexum analyze + write-record",
1277
+ "trigger": "explicit",
1278
+ "description": "Invoke @x12i/nexum analyze (MEMORIX_NEXUM_URL · default :7500), then platform write-record applies proposedGraph (mode nexum). Worker drafts; Memorix persists.",
1279
+ "steps": [
1280
+ {
1281
+ "id": "analyze",
1282
+ "kind": "analyze",
1283
+ "serviceId": "nexum"
1284
+ },
1285
+ {
1286
+ "id": "write-graph",
1287
+ "kind": "write-record",
1288
+ "contentType": "snapshots",
1289
+ "portConfig": {
1290
+ "mode": "nexum"
1291
+ },
1292
+ "dependsOn": [
1293
+ "analyze"
1294
+ ],
1295
+ "inputs": [
1296
+ {
1297
+ "fromStep": "analyze",
1298
+ "key": "analyze"
1299
+ }
1300
+ ],
1301
+ "notes": "mode nexum — create-or-update contribution/node/claim records from proposedGraph"
1302
+ }
1303
+ ]
1304
+ }
1305
+ ],
1306
+ "schedules": [],
1307
+ "kindDeclarations": [],
1308
+ "extensions": {}
1309
+ }