@x12i/memorix-metadata 0.0.0-bootstrap.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 (61) hide show
  1. package/README.md +35 -0
  2. package/dist/abstracts.d.ts +98 -0
  3. package/dist/abstracts.d.ts.map +1 -0
  4. package/dist/abstracts.js +419 -0
  5. package/dist/abstracts.js.map +1 -0
  6. package/dist/fingerprint.d.ts +11 -0
  7. package/dist/fingerprint.d.ts.map +1 -0
  8. package/dist/fingerprint.js +66 -0
  9. package/dist/fingerprint.js.map +1 -0
  10. package/dist/index.d.ts +8 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +7 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/kind-fields.d.ts +13 -0
  15. package/dist/kind-fields.d.ts.map +1 -0
  16. package/dist/kind-fields.js +39 -0
  17. package/dist/kind-fields.js.map +1 -0
  18. package/dist/kinds.d.ts +21 -0
  19. package/dist/kinds.d.ts.map +1 -0
  20. package/dist/kinds.js +147 -0
  21. package/dist/kinds.js.map +1 -0
  22. package/dist/multi-agent-rule.d.ts +15 -0
  23. package/dist/multi-agent-rule.d.ts.map +1 -0
  24. package/dist/multi-agent-rule.js +30 -0
  25. package/dist/multi-agent-rule.js.map +1 -0
  26. package/dist/normalize.d.ts +26 -0
  27. package/dist/normalize.d.ts.map +1 -0
  28. package/dist/normalize.js +114 -0
  29. package/dist/normalize.js.map +1 -0
  30. package/dist/resolve.d.ts +85 -0
  31. package/dist/resolve.d.ts.map +1 -0
  32. package/dist/resolve.js +464 -0
  33. package/dist/resolve.js.map +1 -0
  34. package/dist/types.d.ts +277 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +6 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/validate.d.ts +7 -0
  39. package/dist/validate.d.ts.map +1 -0
  40. package/dist/validate.js +563 -0
  41. package/dist/validate.js.map +1 -0
  42. package/examples/invalid/agent-classification.json +709 -0
  43. package/examples/invalid/broken-binding.json +688 -0
  44. package/examples/invalid/completion-mapping-with-exec-policy.json +659 -0
  45. package/examples/invalid/missing-parent.json +708 -0
  46. package/examples/invalid/operational-kind-root.json +720 -0
  47. package/examples/invalid/pipeline-unknown-service.json +611 -0
  48. package/examples/invalid/relationship-missing-rules.json +624 -0
  49. package/examples/invalid/relationship-with-storage.json +631 -0
  50. package/examples/invalid/service-with-secrets.json +679 -0
  51. package/examples/ops/normalized/pack.json +1010 -0
  52. package/examples/ops/raw/abstract-bindings.json +38 -0
  53. package/examples/ops/raw/abstract-types.json +28 -0
  54. package/examples/ops/raw/agents.json +33 -0
  55. package/examples/ops/raw/object-types.json +170 -0
  56. package/examples/ops/raw/pipelines-and-sources.json +185 -0
  57. package/examples/ops/raw/relationship-definitions.json +110 -0
  58. package/examples/ops/raw/view-definitions.json +46 -0
  59. package/examples/ops/raw/write-and-source-mappings.json +108 -0
  60. package/examples/project-ops/normalized/pack.json +944 -0
  61. package/package.json +49 -0
@@ -0,0 +1,944 @@
1
+ {
2
+ "format": "memorix-metadata/1",
3
+ "agentId": "project-ops",
4
+ "version": "0.1.0",
5
+ "agents": [
6
+ {
7
+ "id": "ops",
8
+ "name": "Operations (generic parent)",
9
+ "description": "Complete generic parent agent for ordinary operational work. Permanent Memorix acceptance pack.",
10
+ "parentId": null
11
+ },
12
+ {
13
+ "id": "project-ops",
14
+ "name": "Project Operations (child of ops)",
15
+ "description": "Inheritance smoke agent. Extends ops without replacing core definitions.",
16
+ "parentId": "ops"
17
+ }
18
+ ],
19
+ "objectTypes": [
20
+ {
21
+ "id": "employees",
22
+ "name": "Employees",
23
+ "dataCategory": "entity",
24
+ "abstractTypes": [
25
+ "People"
26
+ ],
27
+ "contentTypes": [
28
+ {
29
+ "id": "raw",
30
+ "required": true
31
+ },
32
+ {
33
+ "id": "snapshots",
34
+ "required": true
35
+ },
36
+ {
37
+ "id": "discovery",
38
+ "discriminator": {
39
+ "path": "data.discoveryType",
40
+ "required": false,
41
+ "defaultValue": "default"
42
+ }
43
+ },
44
+ {
45
+ "id": "analysis",
46
+ "discriminator": {
47
+ "path": "data.analysisType",
48
+ "required": false,
49
+ "defaultValue": "default"
50
+ }
51
+ },
52
+ {
53
+ "id": "relationships",
54
+ "notes": "Candidate store shape until Gate G4"
55
+ }
56
+ ],
57
+ "fields": [
58
+ {
59
+ "path": "data.displayName",
60
+ "valueType": "string",
61
+ "contentType": "snapshots"
62
+ },
63
+ {
64
+ "path": "data.role",
65
+ "valueType": "string",
66
+ "contentType": "snapshots"
67
+ }
68
+ ]
69
+ },
70
+ {
71
+ "id": "contractors",
72
+ "name": "Contractors",
73
+ "dataCategory": "entity",
74
+ "abstractTypes": [
75
+ "People"
76
+ ],
77
+ "contentTypes": [
78
+ {
79
+ "id": "raw"
80
+ },
81
+ {
82
+ "id": "snapshots"
83
+ },
84
+ {
85
+ "id": "discovery",
86
+ "discriminator": {
87
+ "path": "data.discoveryType",
88
+ "required": false
89
+ }
90
+ },
91
+ {
92
+ "id": "analysis",
93
+ "discriminator": {
94
+ "path": "data.analysisType",
95
+ "required": false
96
+ }
97
+ },
98
+ {
99
+ "id": "relationships"
100
+ }
101
+ ],
102
+ "fields": [
103
+ {
104
+ "path": "data.displayName",
105
+ "valueType": "string",
106
+ "contentType": "snapshots"
107
+ },
108
+ {
109
+ "path": "data.role",
110
+ "valueType": "string",
111
+ "contentType": "snapshots"
112
+ }
113
+ ]
114
+ },
115
+ {
116
+ "id": "work-items",
117
+ "name": "Work Items",
118
+ "dataCategory": "entity",
119
+ "abstractTypes": [
120
+ "WorkItems"
121
+ ],
122
+ "contentTypes": [
123
+ {
124
+ "id": "raw"
125
+ },
126
+ {
127
+ "id": "snapshots"
128
+ },
129
+ {
130
+ "id": "discovery",
131
+ "discriminator": {
132
+ "path": "data.discoveryType",
133
+ "required": false
134
+ }
135
+ },
136
+ {
137
+ "id": "analysis",
138
+ "discriminator": {
139
+ "path": "data.analysisType",
140
+ "required": false,
141
+ "defaultValue": "delivery-risk"
142
+ }
143
+ },
144
+ {
145
+ "id": "decisions",
146
+ "discriminator": {
147
+ "path": "data.decisionType",
148
+ "required": false,
149
+ "defaultValue": "priority"
150
+ }
151
+ },
152
+ {
153
+ "id": "workflow"
154
+ },
155
+ {
156
+ "id": "context",
157
+ "retention": "work-scoped-ttl"
158
+ },
159
+ {
160
+ "id": "relationships"
161
+ }
162
+ ],
163
+ "snapshotBuckets": {
164
+ "analytics": "optional",
165
+ "enrichment": "optional",
166
+ "insights": "optional"
167
+ }
168
+ },
169
+ {
170
+ "id": "procedures",
171
+ "name": "Procedures",
172
+ "dataCategory": "knowledge",
173
+ "abstractTypes": [
174
+ "Procedures"
175
+ ],
176
+ "contentTypes": [
177
+ {
178
+ "id": "raw"
179
+ },
180
+ {
181
+ "id": "snapshots",
182
+ "notes": "Persistent knowledge content"
183
+ },
184
+ {
185
+ "id": "relationships"
186
+ }
187
+ ],
188
+ "retention": "persistent-knowledge"
189
+ },
190
+ {
191
+ "id": "activity-events",
192
+ "name": "Activity Events",
193
+ "dataCategory": "event",
194
+ "abstractTypes": [
195
+ "ActivityEvents"
196
+ ],
197
+ "contentTypes": [
198
+ {
199
+ "id": "raw"
200
+ },
201
+ {
202
+ "id": "snapshots",
203
+ "notes": "Normalized event content"
204
+ },
205
+ {
206
+ "id": "relationships"
207
+ }
208
+ ]
209
+ }
210
+ ],
211
+ "abstractTypes": [
212
+ {
213
+ "id": "People",
214
+ "name": "People",
215
+ "meaning": "Employees and contractors who perform operational work",
216
+ "category": "entity",
217
+ "properties": [
218
+ {
219
+ "id": "title",
220
+ "valueType": "string",
221
+ "required": true
222
+ },
223
+ {
224
+ "id": "role",
225
+ "valueType": "string",
226
+ "required": true
227
+ },
228
+ {
229
+ "id": "lens",
230
+ "valueType": "string",
231
+ "required": false
232
+ }
233
+ ]
234
+ },
235
+ {
236
+ "id": "WorkItems",
237
+ "name": "Work Items",
238
+ "meaning": "Units of operational work",
239
+ "category": "entity"
240
+ },
241
+ {
242
+ "id": "Procedures",
243
+ "name": "Procedures",
244
+ "meaning": "Reusable operational knowledge / playbooks",
245
+ "category": "knowledge"
246
+ },
247
+ {
248
+ "id": "ActivityEvents",
249
+ "name": "Activity Events",
250
+ "meaning": "Progress and activity reports about work items",
251
+ "category": "event"
252
+ }
253
+ ],
254
+ "abstractBindings": [
255
+ {
256
+ "id": "people-employees-contractors",
257
+ "abstractType": "People",
258
+ "concreteObjectTypes": [
259
+ "employees",
260
+ "contractors"
261
+ ],
262
+ "union": true,
263
+ "notes": "People = Employees ∪ Contractors. No abstract records exist.",
264
+ "members": [
265
+ {
266
+ "objectType": "employees",
267
+ "contentType": "snapshots",
268
+ "properties": [
269
+ {
270
+ "abstractProperty": "title",
271
+ "contentType": "snapshots",
272
+ "mappingId": "ops-people-abstract-employees"
273
+ },
274
+ {
275
+ "abstractProperty": "role",
276
+ "contentType": "snapshots",
277
+ "mappingId": "ops-people-abstract-employees"
278
+ },
279
+ {
280
+ "abstractProperty": "lens",
281
+ "contentType": "snapshots",
282
+ "mappingId": "ops-people-abstract-employees"
283
+ }
284
+ ]
285
+ },
286
+ {
287
+ "objectType": "contractors",
288
+ "contentType": "snapshots",
289
+ "properties": [
290
+ {
291
+ "abstractProperty": "title",
292
+ "contentType": "snapshots",
293
+ "mappingId": "ops-people-abstract-contractors"
294
+ },
295
+ {
296
+ "abstractProperty": "role",
297
+ "contentType": "snapshots",
298
+ "mappingId": "ops-people-abstract-contractors"
299
+ },
300
+ {
301
+ "abstractProperty": "lens",
302
+ "contentType": "snapshots",
303
+ "mappingId": "ops-people-abstract-contractors"
304
+ }
305
+ ]
306
+ }
307
+ ]
308
+ },
309
+ {
310
+ "id": "work-items-concrete",
311
+ "abstractType": "WorkItems",
312
+ "concreteObjectTypes": [
313
+ "work-items"
314
+ ],
315
+ "union": false
316
+ },
317
+ {
318
+ "id": "procedures-concrete",
319
+ "abstractType": "Procedures",
320
+ "concreteObjectTypes": [
321
+ "procedures"
322
+ ],
323
+ "union": false
324
+ },
325
+ {
326
+ "id": "activity-events-concrete",
327
+ "abstractType": "ActivityEvents",
328
+ "concreteObjectTypes": [
329
+ "activity-events"
330
+ ],
331
+ "union": false
332
+ }
333
+ ],
334
+ "relationshipDefinitions": [
335
+ {
336
+ "id": "people-assigned-to-work-items",
337
+ "name": "People assigned to work items",
338
+ "meaning": "A person (employee or contractor) is assigned to perform a work item",
339
+ "directionality": "directed",
340
+ "from": {
341
+ "abstractType": "People",
342
+ "path": "assignedWorkItems"
343
+ },
344
+ "to": {
345
+ "abstractType": "WorkItems",
346
+ "path": "assignedPeople"
347
+ },
348
+ "discoveryRules": [
349
+ {
350
+ "id": "from-source-assignee",
351
+ "kind": "source-field",
352
+ "sourcePath": "assigneeId",
353
+ "notes": "ops-source work-items.assigneeId resolves across employees and contractors"
354
+ }
355
+ ]
356
+ },
357
+ {
358
+ "id": "work-items-use-procedures",
359
+ "name": "Work items use procedures",
360
+ "meaning": "A work item follows one or more reusable procedures",
361
+ "directionality": "directed",
362
+ "from": {
363
+ "abstractType": "WorkItems",
364
+ "path": "usedProcedures"
365
+ },
366
+ "to": {
367
+ "abstractType": "Procedures",
368
+ "path": "usedByWorkItems"
369
+ },
370
+ "discoveryRules": [
371
+ {
372
+ "id": "from-source-procedure-ids",
373
+ "kind": "source-field",
374
+ "sourcePath": "procedureIds"
375
+ }
376
+ ]
377
+ },
378
+ {
379
+ "id": "activity-events-about-work-items",
380
+ "name": "Activity events about work items",
381
+ "meaning": "An activity event reports progress on a work item",
382
+ "directionality": "directed",
383
+ "from": {
384
+ "abstractType": "ActivityEvents",
385
+ "path": "aboutWorkItems"
386
+ },
387
+ "to": {
388
+ "abstractType": "WorkItems",
389
+ "path": "activityEvents"
390
+ },
391
+ "discoveryRules": [
392
+ {
393
+ "id": "from-source-work-item-id",
394
+ "kind": "source-field",
395
+ "sourcePath": "workItemId"
396
+ }
397
+ ]
398
+ },
399
+ {
400
+ "id": "work-items-depend-on-work-items",
401
+ "name": "Work items depend on work items",
402
+ "meaning": "A work item cannot complete until another work item completes",
403
+ "directionality": "directed",
404
+ "from": {
405
+ "abstractType": "WorkItems",
406
+ "path": "dependsOn"
407
+ },
408
+ "to": {
409
+ "abstractType": "WorkItems",
410
+ "path": "dependedOnBy"
411
+ },
412
+ "discoveryRules": [
413
+ {
414
+ "id": "from-source-depends-on",
415
+ "kind": "source-field",
416
+ "sourcePath": "dependsOnIds"
417
+ }
418
+ ]
419
+ },
420
+ {
421
+ "id": "people-collaborate-with-people",
422
+ "name": "People collaborate with people",
423
+ "meaning": "Two people collaborate on operational work",
424
+ "directionality": "undirected",
425
+ "from": {
426
+ "abstractType": "People",
427
+ "path": "collaborators"
428
+ },
429
+ "to": {
430
+ "abstractType": "People",
431
+ "path": "collaborators"
432
+ },
433
+ "discoveryRules": [
434
+ {
435
+ "id": "from-source-collaborator-ids",
436
+ "kind": "source-field",
437
+ "sourcePath": "collaboratorIds"
438
+ }
439
+ ]
440
+ }
441
+ ],
442
+ "mappings": [
443
+ {
444
+ "id": "ops-source-employees-to-raw",
445
+ "sourceId": "ops-source",
446
+ "endpoint": "/employees",
447
+ "objectType": "employees",
448
+ "contentType": "raw",
449
+ "mode": "knowledge",
450
+ "purpose": "source",
451
+ "map": {
452
+ "recordId": {
453
+ "op": "path",
454
+ "path": "id",
455
+ "required": true
456
+ },
457
+ "objectType": {
458
+ "op": "constant",
459
+ "value": "employees"
460
+ },
461
+ "data.displayName": {
462
+ "op": "path",
463
+ "path": "name",
464
+ "required": true
465
+ },
466
+ "data.role": {
467
+ "op": "path",
468
+ "path": "role",
469
+ "required": true
470
+ },
471
+ "data.email": {
472
+ "op": "path",
473
+ "path": "email"
474
+ },
475
+ "data.sourceId": {
476
+ "op": "path",
477
+ "path": "id"
478
+ }
479
+ }
480
+ },
481
+ {
482
+ "id": "ops-source-contractors-to-raw",
483
+ "sourceId": "ops-source",
484
+ "endpoint": "/contractors",
485
+ "objectType": "contractors",
486
+ "contentType": "raw",
487
+ "mode": "knowledge",
488
+ "purpose": "source",
489
+ "map": {
490
+ "recordId": {
491
+ "op": "path",
492
+ "path": "id",
493
+ "required": true
494
+ },
495
+ "objectType": {
496
+ "op": "constant",
497
+ "value": "contractors"
498
+ },
499
+ "data.displayName": {
500
+ "op": "path",
501
+ "path": "name",
502
+ "required": true
503
+ },
504
+ "data.role": {
505
+ "op": "path",
506
+ "path": "role",
507
+ "required": true
508
+ },
509
+ "data.vendor": {
510
+ "op": "path",
511
+ "path": "vendor"
512
+ },
513
+ "data.sourceId": {
514
+ "op": "path",
515
+ "path": "id"
516
+ }
517
+ }
518
+ },
519
+ {
520
+ "id": "ops-source-work-items-to-raw",
521
+ "sourceId": "ops-source",
522
+ "endpoint": "/work-items",
523
+ "objectType": "work-items",
524
+ "contentType": "raw",
525
+ "mode": "knowledge",
526
+ "purpose": "source",
527
+ "map": {
528
+ "data": {
529
+ "op": "path",
530
+ "path": "$"
531
+ }
532
+ }
533
+ },
534
+ {
535
+ "id": "ops-source-work-item-context",
536
+ "sourceId": "ops-source",
537
+ "endpoint": "/work-items/:id/context",
538
+ "objectType": "work-items",
539
+ "contentType": "context",
540
+ "mode": "context",
541
+ "trigger": "on-demand",
542
+ "purpose": "source",
543
+ "map": {
544
+ "data": {
545
+ "op": "path",
546
+ "path": "$"
547
+ }
548
+ }
549
+ },
550
+ {
551
+ "id": "ops-people-abstract-employees",
552
+ "purpose": "abstract",
553
+ "abstractType": "People",
554
+ "objectType": "employees",
555
+ "contentType": "snapshots",
556
+ "map": {
557
+ "title": {
558
+ "expr": {
559
+ "op": "path",
560
+ "path": "data.displayName"
561
+ },
562
+ "required": true
563
+ },
564
+ "role": {
565
+ "expr": {
566
+ "op": "path",
567
+ "path": "data.role"
568
+ },
569
+ "required": true
570
+ },
571
+ "lens": {
572
+ "op": "constant",
573
+ "value": "people"
574
+ }
575
+ },
576
+ "reverse": {
577
+ "title": {
578
+ "expr": {
579
+ "op": "path",
580
+ "path": "title"
581
+ },
582
+ "targetPath": "data.displayName"
583
+ }
584
+ }
585
+ },
586
+ {
587
+ "id": "ops-people-abstract-contractors",
588
+ "purpose": "abstract",
589
+ "abstractType": "People",
590
+ "objectType": "contractors",
591
+ "contentType": "snapshots",
592
+ "map": {
593
+ "title": {
594
+ "expr": {
595
+ "op": "path",
596
+ "path": "data.displayName"
597
+ },
598
+ "required": true
599
+ },
600
+ "role": {
601
+ "expr": {
602
+ "op": "path",
603
+ "path": "data.role"
604
+ },
605
+ "required": true
606
+ },
607
+ "lens": {
608
+ "op": "constant",
609
+ "value": "people"
610
+ }
611
+ },
612
+ "reverse": {
613
+ "title": {
614
+ "expr": {
615
+ "op": "path",
616
+ "path": "title"
617
+ },
618
+ "targetPath": "data.displayName"
619
+ }
620
+ }
621
+ },
622
+ {
623
+ "id": "ops-work-items-completion-priority",
624
+ "purpose": "completion",
625
+ "objectType": "work-items",
626
+ "contentType": "snapshots",
627
+ "map": {
628
+ "data.priority": {
629
+ "op": "coalesce",
630
+ "exprs": [
631
+ {
632
+ "op": "path",
633
+ "path": "priority"
634
+ },
635
+ {
636
+ "op": "constant",
637
+ "value": "normal"
638
+ }
639
+ ]
640
+ },
641
+ "data.title": {
642
+ "op": "path",
643
+ "path": "title"
644
+ }
645
+ }
646
+ }
647
+ ],
648
+ "views": [
649
+ {
650
+ "id": "ops-work-items-list",
651
+ "kind": "list",
652
+ "objectType": "work-items",
653
+ "title": "Work items",
654
+ "columns": [
655
+ "concept.title",
656
+ "data.status",
657
+ "data.priority"
658
+ ]
659
+ },
660
+ {
661
+ "id": "ops-work-items-item",
662
+ "kind": "item",
663
+ "objectType": "work-items",
664
+ "title": "Work item",
665
+ "sections": [
666
+ "concept",
667
+ "data",
668
+ "workflow",
669
+ "analysis",
670
+ "decisions"
671
+ ]
672
+ },
673
+ {
674
+ "id": "ops-people-list",
675
+ "kind": "list",
676
+ "abstractType": "People",
677
+ "title": "People",
678
+ "columns": [
679
+ "concept.title",
680
+ "objectType",
681
+ "data.role"
682
+ ]
683
+ },
684
+ {
685
+ "id": "ops-work-item-expand-people",
686
+ "kind": "relationship-expansion",
687
+ "objectType": "work-items",
688
+ "relationshipDefinitionId": "people-assigned-to-work-items",
689
+ "direction": "to-from"
690
+ },
691
+ {
692
+ "id": "project-ops-work-items-list",
693
+ "kind": "list",
694
+ "objectType": "work-items",
695
+ "title": "Project work items",
696
+ "extends": "ops-work-items-list",
697
+ "columns": [
698
+ "concept.title",
699
+ "data.status"
700
+ ]
701
+ }
702
+ ],
703
+ "writes": [
704
+ {
705
+ "id": "ops-employees-snapshots",
706
+ "objectType": "employees",
707
+ "contentType": "snapshots",
708
+ "identity": {
709
+ "primaryKind": "employeeId",
710
+ "issuer": "ops-source"
711
+ }
712
+ },
713
+ {
714
+ "id": "ops-contractors-snapshots",
715
+ "objectType": "contractors",
716
+ "contentType": "snapshots",
717
+ "identity": {
718
+ "primaryKind": "contractorId",
719
+ "issuer": "ops-source"
720
+ }
721
+ },
722
+ {
723
+ "id": "ops-work-items-snapshots",
724
+ "objectType": "work-items",
725
+ "contentType": "snapshots",
726
+ "identity": {
727
+ "primaryKind": "workItemId",
728
+ "issuer": "ops-source"
729
+ }
730
+ },
731
+ {
732
+ "id": "ops-procedures-snapshots",
733
+ "objectType": "procedures",
734
+ "contentType": "snapshots",
735
+ "identity": {
736
+ "primaryKind": "procedureId",
737
+ "issuer": "ops-source"
738
+ }
739
+ },
740
+ {
741
+ "id": "ops-activity-events-snapshots",
742
+ "objectType": "activity-events",
743
+ "contentType": "snapshots",
744
+ "identity": {
745
+ "primaryKind": "activityEventId",
746
+ "issuer": "ops-source"
747
+ }
748
+ }
749
+ ],
750
+ "sources": [
751
+ {
752
+ "id": "ops-source",
753
+ "name": "Fieldstone ops fixture source",
754
+ "kind": "rest-fixture",
755
+ "baseUrlEnv": "OPS_SOURCE_URL",
756
+ "defaultBaseUrl": "http://127.0.0.1:7099",
757
+ "credentialRef": "ops-source-local",
758
+ "endpoints": [
759
+ "/employees",
760
+ "/contractors",
761
+ "/work-items",
762
+ "/activity-events",
763
+ "/procedures",
764
+ "/work-items/:id/context"
765
+ ]
766
+ }
767
+ ],
768
+ "services": [
769
+ {
770
+ "id": "ops-normalize",
771
+ "name": "Normalize records",
772
+ "description": "Logical normalize capability for ops knowledge pull",
773
+ "capabilities": [
774
+ "normalize"
775
+ ],
776
+ "inputs": [
777
+ {
778
+ "id": "raw-records",
779
+ "schemaRef": "memorix-record/raw"
780
+ }
781
+ ],
782
+ "outputs": [
783
+ {
784
+ "id": "normalized-records",
785
+ "schemaRef": "memorix-record/snapshots"
786
+ }
787
+ ],
788
+ "invocation": {
789
+ "kind": "worker",
790
+ "operation": "normalize"
791
+ }
792
+ },
793
+ {
794
+ "id": "ops-completion",
795
+ "name": "Field completion",
796
+ "capabilities": [
797
+ "completion"
798
+ ],
799
+ "inputs": [
800
+ {
801
+ "id": "snapshot",
802
+ "schemaRef": "memorix-record/snapshots"
803
+ }
804
+ ],
805
+ "outputs": [
806
+ {
807
+ "id": "completed",
808
+ "schemaRef": "memorix-record/snapshots"
809
+ }
810
+ ],
811
+ "invocation": {
812
+ "kind": "worker",
813
+ "operation": "complete"
814
+ }
815
+ }
816
+ ],
817
+ "pipelines": [
818
+ {
819
+ "id": "ops-knowledge-pull",
820
+ "name": "Scheduled knowledge pull from ops-source",
821
+ "trigger": "scheduled",
822
+ "mode": "knowledge",
823
+ "steps": [
824
+ {
825
+ "id": "pull",
826
+ "kind": "memory-pull",
827
+ "sourceId": "ops-source"
828
+ },
829
+ {
830
+ "id": "land-raw",
831
+ "kind": "write-raw"
832
+ },
833
+ {
834
+ "id": "normalize",
835
+ "kind": "normalize"
836
+ },
837
+ {
838
+ "id": "promote",
839
+ "kind": "promote-snapshots"
840
+ },
841
+ {
842
+ "id": "normalize-svc",
843
+ "kind": "invoke-service",
844
+ "serviceId": "ops-normalize"
845
+ },
846
+ {
847
+ "id": "complete",
848
+ "kind": "completion",
849
+ "serviceId": "ops-completion",
850
+ "mappingId": "ops-work-items-completion-priority",
851
+ "completionPolicy": {
852
+ "mode": "fill-missing",
853
+ "maxFields": 20
854
+ }
855
+ }
856
+ ]
857
+ },
858
+ {
859
+ "id": "ops-context-pull",
860
+ "name": "On-demand work-item context pull",
861
+ "trigger": "on-demand",
862
+ "mode": "context",
863
+ "steps": [
864
+ {
865
+ "id": "pull",
866
+ "kind": "memory-pull",
867
+ "sourceId": "ops-source"
868
+ },
869
+ {
870
+ "id": "land-raw",
871
+ "kind": "write-raw"
872
+ },
873
+ {
874
+ "id": "normalize-context",
875
+ "kind": "normalize-context"
876
+ },
877
+ {
878
+ "id": "ttl",
879
+ "kind": "apply-ttl"
880
+ }
881
+ ]
882
+ },
883
+ {
884
+ "id": "ops-relationship-build",
885
+ "name": "Discover and write lightweight relationships",
886
+ "trigger": "explicit",
887
+ "steps": [
888
+ {
889
+ "id": "discover",
890
+ "kind": "relationship-discover"
891
+ },
892
+ {
893
+ "id": "write",
894
+ "kind": "relationship-write"
895
+ },
896
+ {
897
+ "id": "verify",
898
+ "kind": "relationship-verify"
899
+ }
900
+ ]
901
+ },
902
+ {
903
+ "id": "ops-analysis",
904
+ "name": "Work-item analysis sibling",
905
+ "trigger": "explicit",
906
+ "steps": [
907
+ {
908
+ "id": "analyze",
909
+ "kind": "analysis"
910
+ },
911
+ {
912
+ "id": "write-sibling",
913
+ "kind": "write-content",
914
+ "contentType": "analysis"
915
+ }
916
+ ]
917
+ },
918
+ {
919
+ "id": "ops-workflow",
920
+ "name": "Work-item workflow sibling",
921
+ "trigger": "explicit",
922
+ "steps": [
923
+ {
924
+ "id": "sync-workflow",
925
+ "kind": "workflow-sync"
926
+ },
927
+ {
928
+ "id": "write-sibling",
929
+ "kind": "write-content",
930
+ "contentType": "workflow"
931
+ }
932
+ ]
933
+ }
934
+ ],
935
+ "schedules": [
936
+ {
937
+ "id": "ops-knowledge-hourly",
938
+ "pipelineId": "ops-knowledge-pull",
939
+ "cron": "0 * * * *",
940
+ "timezone": "UTC",
941
+ "enabled": true
942
+ }
943
+ ]
944
+ }