@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,1010 @@
1
+ {
2
+ "format": "memorix-metadata/1",
3
+ "agentId": "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-procedures-to-raw",
536
+ "sourceId": "ops-source",
537
+ "endpoint": "/procedures",
538
+ "objectType": "procedures",
539
+ "contentType": "raw",
540
+ "mode": "knowledge",
541
+ "purpose": "source",
542
+ "map": {
543
+ "data": {
544
+ "op": "path",
545
+ "path": "$"
546
+ }
547
+ }
548
+ },
549
+ {
550
+ "id": "ops-source-work-item-context",
551
+ "sourceId": "ops-source",
552
+ "endpoint": "/work-items/:id/context",
553
+ "objectType": "work-items",
554
+ "contentType": "raw",
555
+ "mode": "context",
556
+ "trigger": "on-demand",
557
+ "purpose": "source",
558
+ "map": {
559
+ "data": {
560
+ "op": "path",
561
+ "path": "$"
562
+ }
563
+ }
564
+ },
565
+ {
566
+ "id": "ops-people-abstract-employees",
567
+ "purpose": "abstract",
568
+ "abstractType": "People",
569
+ "objectType": "employees",
570
+ "contentType": "snapshots",
571
+ "map": {
572
+ "title": {
573
+ "expr": {
574
+ "op": "path",
575
+ "path": "data.displayName"
576
+ },
577
+ "required": true
578
+ },
579
+ "role": {
580
+ "expr": {
581
+ "op": "path",
582
+ "path": "data.role"
583
+ },
584
+ "required": true
585
+ },
586
+ "lens": {
587
+ "op": "constant",
588
+ "value": "people"
589
+ }
590
+ },
591
+ "reverse": {
592
+ "title": {
593
+ "expr": {
594
+ "op": "path",
595
+ "path": "title"
596
+ },
597
+ "targetPath": "data.displayName"
598
+ }
599
+ }
600
+ },
601
+ {
602
+ "id": "ops-people-abstract-contractors",
603
+ "purpose": "abstract",
604
+ "abstractType": "People",
605
+ "objectType": "contractors",
606
+ "contentType": "snapshots",
607
+ "map": {
608
+ "title": {
609
+ "expr": {
610
+ "op": "path",
611
+ "path": "data.displayName"
612
+ },
613
+ "required": true
614
+ },
615
+ "role": {
616
+ "expr": {
617
+ "op": "path",
618
+ "path": "data.role"
619
+ },
620
+ "required": true
621
+ },
622
+ "lens": {
623
+ "op": "constant",
624
+ "value": "people"
625
+ }
626
+ },
627
+ "reverse": {
628
+ "title": {
629
+ "expr": {
630
+ "op": "path",
631
+ "path": "title"
632
+ },
633
+ "targetPath": "data.displayName"
634
+ }
635
+ }
636
+ },
637
+ {
638
+ "id": "ops-work-items-completion-priority",
639
+ "purpose": "completion",
640
+ "objectType": "work-items",
641
+ "contentType": "snapshots",
642
+ "map": {
643
+ "data.priority": {
644
+ "op": "coalesce",
645
+ "exprs": [
646
+ {
647
+ "op": "path",
648
+ "path": "priority"
649
+ },
650
+ {
651
+ "op": "constant",
652
+ "value": "normal"
653
+ }
654
+ ]
655
+ },
656
+ "data.title": {
657
+ "op": "path",
658
+ "path": "title"
659
+ }
660
+ }
661
+ }
662
+ ],
663
+ "views": [
664
+ {
665
+ "id": "ops-work-items-list",
666
+ "kind": "list",
667
+ "objectType": "work-items",
668
+ "title": "Work items",
669
+ "columns": [
670
+ "concept.title",
671
+ "data.status",
672
+ "data.priority"
673
+ ]
674
+ },
675
+ {
676
+ "id": "ops-work-items-item",
677
+ "kind": "item",
678
+ "objectType": "work-items",
679
+ "title": "Work item",
680
+ "sections": [
681
+ "concept",
682
+ "data",
683
+ "workflow",
684
+ "analysis",
685
+ "decisions"
686
+ ]
687
+ },
688
+ {
689
+ "id": "ops-people-list",
690
+ "kind": "list",
691
+ "abstractType": "People",
692
+ "title": "People",
693
+ "columns": [
694
+ "concept.title",
695
+ "objectType",
696
+ "data.role"
697
+ ]
698
+ },
699
+ {
700
+ "id": "ops-work-item-expand-people",
701
+ "kind": "relationship-expansion",
702
+ "objectType": "work-items",
703
+ "relationshipDefinitionId": "people-assigned-to-work-items",
704
+ "direction": "to-from"
705
+ }
706
+ ],
707
+ "writes": [
708
+ {
709
+ "id": "ops-employees-snapshots",
710
+ "objectType": "employees",
711
+ "contentType": "snapshots",
712
+ "identity": {
713
+ "primaryKind": "employeeId",
714
+ "issuer": "ops-source"
715
+ }
716
+ },
717
+ {
718
+ "id": "ops-contractors-snapshots",
719
+ "objectType": "contractors",
720
+ "contentType": "snapshots",
721
+ "identity": {
722
+ "primaryKind": "contractorId",
723
+ "issuer": "ops-source"
724
+ }
725
+ },
726
+ {
727
+ "id": "ops-work-items-snapshots",
728
+ "objectType": "work-items",
729
+ "contentType": "snapshots",
730
+ "identity": {
731
+ "primaryKind": "workItemId",
732
+ "issuer": "ops-source"
733
+ }
734
+ },
735
+ {
736
+ "id": "ops-procedures-snapshots",
737
+ "objectType": "procedures",
738
+ "contentType": "snapshots",
739
+ "identity": {
740
+ "primaryKind": "procedureId",
741
+ "issuer": "ops-source"
742
+ }
743
+ },
744
+ {
745
+ "id": "ops-activity-events-snapshots",
746
+ "objectType": "activity-events",
747
+ "contentType": "snapshots",
748
+ "identity": {
749
+ "primaryKind": "activityEventId",
750
+ "issuer": "ops-source"
751
+ }
752
+ }
753
+ ],
754
+ "sources": [
755
+ {
756
+ "id": "ops-source",
757
+ "name": "Fieldstone ops fixture source",
758
+ "kind": "rest-fixture",
759
+ "baseUrlEnv": "OPS_SOURCE_URL",
760
+ "defaultBaseUrl": "http://127.0.0.1:7099",
761
+ "credentialRef": "ops-source-local",
762
+ "connectorRef": "ops-fixture",
763
+ "endpoints": [
764
+ "/employees",
765
+ "/contractors",
766
+ "/work-items",
767
+ "/activity-events",
768
+ "/procedures",
769
+ "/work-items/:id/context"
770
+ ],
771
+ "pagination": {
772
+ "style": "cursor",
773
+ "defaultPageSize": 50
774
+ },
775
+ "retention": {
776
+ "context": {
777
+ "ttlSeconds": 3600,
778
+ "discardOnWorkCompletion": true
779
+ }
780
+ },
781
+ "routes": [
782
+ {
783
+ "endpoint": "/procedures",
784
+ "objectType": "procedures",
785
+ "dataCategory": "knowledge",
786
+ "identityPath": "id",
787
+ "primaryKind": "procedureId",
788
+ "modes": ["knowledge"],
789
+ "pageSize": 2
790
+ },
791
+ {
792
+ "endpoint": "/work-items/:id/context",
793
+ "objectType": "work-items",
794
+ "dataCategory": "entity",
795
+ "identityPath": "workItemId",
796
+ "primaryKind": "workItemId",
797
+ "modes": ["context"]
798
+ },
799
+ {
800
+ "endpoint": "/work-items",
801
+ "objectType": "work-items",
802
+ "dataCategory": "entity",
803
+ "identityPath": "id",
804
+ "primaryKind": "workItemId",
805
+ "modes": ["knowledge"]
806
+ },
807
+ {
808
+ "endpoint": "/employees",
809
+ "objectType": "employees",
810
+ "dataCategory": "entity",
811
+ "identityPath": "id",
812
+ "primaryKind": "employeeId",
813
+ "modes": ["knowledge"]
814
+ },
815
+ {
816
+ "endpoint": "/contractors",
817
+ "objectType": "contractors",
818
+ "dataCategory": "entity",
819
+ "identityPath": "id",
820
+ "primaryKind": "contractorId",
821
+ "modes": ["knowledge"]
822
+ },
823
+ {
824
+ "endpoint": "/activity-events",
825
+ "objectType": "activity-events",
826
+ "dataCategory": "event",
827
+ "identityPath": "id",
828
+ "primaryKind": "activityEventId",
829
+ "modes": ["knowledge"]
830
+ }
831
+ ]
832
+ }
833
+ ],
834
+ "services": [
835
+ {
836
+ "id": "ops-normalize",
837
+ "name": "Normalize records",
838
+ "description": "Logical normalize capability for ops knowledge pull",
839
+ "capabilities": [
840
+ "normalize"
841
+ ],
842
+ "inputs": [
843
+ {
844
+ "id": "raw-records",
845
+ "schemaRef": "memorix-record/raw"
846
+ }
847
+ ],
848
+ "outputs": [
849
+ {
850
+ "id": "normalized-records",
851
+ "schemaRef": "memorix-record/snapshots"
852
+ }
853
+ ],
854
+ "invocation": {
855
+ "kind": "worker",
856
+ "operation": "normalize"
857
+ }
858
+ },
859
+ {
860
+ "id": "ops-completion",
861
+ "name": "Field completion",
862
+ "capabilities": [
863
+ "completion"
864
+ ],
865
+ "inputs": [
866
+ {
867
+ "id": "snapshot",
868
+ "schemaRef": "memorix-record/snapshots"
869
+ }
870
+ ],
871
+ "outputs": [
872
+ {
873
+ "id": "completed",
874
+ "schemaRef": "memorix-record/snapshots"
875
+ }
876
+ ],
877
+ "invocation": {
878
+ "kind": "worker",
879
+ "operation": "complete"
880
+ }
881
+ }
882
+ ],
883
+ "pipelines": [
884
+ {
885
+ "id": "ops-knowledge-pull",
886
+ "name": "Scheduled knowledge pull from ops-source",
887
+ "trigger": "scheduled",
888
+ "mode": "knowledge",
889
+ "steps": [
890
+ {
891
+ "id": "pull",
892
+ "kind": "memory-pull",
893
+ "sourceId": "ops-source"
894
+ },
895
+ {
896
+ "id": "land-raw",
897
+ "kind": "write-raw"
898
+ },
899
+ {
900
+ "id": "normalize",
901
+ "kind": "normalize"
902
+ },
903
+ {
904
+ "id": "promote",
905
+ "kind": "promote-snapshots"
906
+ },
907
+ {
908
+ "id": "normalize-svc",
909
+ "kind": "invoke-service",
910
+ "serviceId": "ops-normalize"
911
+ },
912
+ {
913
+ "id": "complete",
914
+ "kind": "completion",
915
+ "serviceId": "ops-completion",
916
+ "mappingId": "ops-work-items-completion-priority",
917
+ "completionPolicy": {
918
+ "mode": "fill-missing",
919
+ "maxFields": 20
920
+ }
921
+ }
922
+ ]
923
+ },
924
+ {
925
+ "id": "ops-context-pull",
926
+ "name": "On-demand work-item context pull",
927
+ "trigger": "on-demand",
928
+ "mode": "context",
929
+ "steps": [
930
+ {
931
+ "id": "pull",
932
+ "kind": "memory-pull",
933
+ "sourceId": "ops-source"
934
+ },
935
+ {
936
+ "id": "land-raw",
937
+ "kind": "write-raw"
938
+ },
939
+ {
940
+ "id": "normalize-context",
941
+ "kind": "normalize-context"
942
+ },
943
+ {
944
+ "id": "ttl",
945
+ "kind": "apply-ttl"
946
+ }
947
+ ]
948
+ },
949
+ {
950
+ "id": "ops-relationship-build",
951
+ "name": "Discover and write lightweight relationships",
952
+ "trigger": "explicit",
953
+ "steps": [
954
+ {
955
+ "id": "discover",
956
+ "kind": "relationship-discover"
957
+ },
958
+ {
959
+ "id": "write",
960
+ "kind": "relationship-write"
961
+ },
962
+ {
963
+ "id": "verify",
964
+ "kind": "relationship-verify"
965
+ }
966
+ ]
967
+ },
968
+ {
969
+ "id": "ops-analysis",
970
+ "name": "Work-item analysis sibling",
971
+ "trigger": "explicit",
972
+ "steps": [
973
+ {
974
+ "id": "analyze",
975
+ "kind": "analysis"
976
+ },
977
+ {
978
+ "id": "write-sibling",
979
+ "kind": "write-content",
980
+ "contentType": "analysis"
981
+ }
982
+ ]
983
+ },
984
+ {
985
+ "id": "ops-workflow",
986
+ "name": "Work-item workflow sibling",
987
+ "trigger": "explicit",
988
+ "steps": [
989
+ {
990
+ "id": "sync-workflow",
991
+ "kind": "workflow-sync"
992
+ },
993
+ {
994
+ "id": "write-sibling",
995
+ "kind": "write-content",
996
+ "contentType": "workflow"
997
+ }
998
+ ]
999
+ }
1000
+ ],
1001
+ "schedules": [
1002
+ {
1003
+ "id": "ops-knowledge-hourly",
1004
+ "pipelineId": "ops-knowledge-pull",
1005
+ "cron": "0 * * * *",
1006
+ "timezone": "UTC",
1007
+ "enabled": true
1008
+ }
1009
+ ]
1010
+ }