@x12i/memorix-metadata 3.4.0 → 3.4.2

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,1866 +1,1888 @@
1
- {
2
- "format": "memorix-metadata/1",
3
- "agentId": "knowx",
4
- "version": "0.1.0",
5
- "agents": [
6
- {
7
- "id": "knowx",
8
- "name": "KnowX (knowledge agent)",
9
- "description": "First-party KnowX agent: extract knowledge from text+source, associate to existing knowledge, associate novel knowledge to entities. Standalone root agent — does not inherit from opx.",
10
- "parentIds": [],
11
- "parentId": null
12
- }
13
- ],
14
- "objectTypes": [
15
- {
16
- "id": "people",
17
- "name": "People",
18
- "dataCategory": "entity",
19
- "abstractTypes": [
20
- "People"
21
- ],
22
- "notes": "Single people OT. Inside vs outside org is identity kind (concept.identifiers.primary.kind): employeeId | externalPersonId.",
23
- "contentTypes": [
24
- {
25
- "id": "raw",
26
- "required": true,
27
- "requiredReason": "Landed provider-native payload; identity and lineage depend on it."
28
- },
29
- {
30
- "id": "snapshots",
31
- "required": true,
32
- "requiredReason": "Canonical composed person view used by queries and abstracts."
33
- },
34
- {
35
- "id": "discovery",
36
- "discriminator": {
37
- "path": "data.discoveryType",
38
- "required": false,
39
- "defaultValue": "default"
40
- }
41
- },
42
- {
43
- "id": "analysis",
44
- "discriminator": {
45
- "path": "data.analysisType",
46
- "required": false,
47
- "defaultValue": "default"
48
- }
49
- },
50
- {
51
- "id": "relationships",
52
- "notes": "Candidate store shape until Gate G4"
53
- },
54
- {
55
- "id": "knowx",
56
- "notes": "KnowX NODE facet — provenance required in .data"
57
- }
58
- ],
59
- "fields": [
60
- {
61
- "path": "data.title",
62
- "valueType": "string",
63
- "contentType": "snapshots"
64
- },
65
- {
66
- "path": "data.role",
67
- "valueType": "string",
68
- "contentType": "snapshots"
69
- },
70
- {
71
- "path": "data.lens",
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
- },
87
- {
88
- "id": "work-items",
89
- "name": "Work Items",
90
- "dataCategory": "entity",
91
- "abstractTypes": [
92
- "WorkItems"
93
- ],
94
- "contentTypes": [
95
- {
96
- "id": "raw"
97
- },
98
- {
99
- "id": "snapshots"
100
- },
101
- {
102
- "id": "discovery",
103
- "discriminator": {
104
- "path": "data.discoveryType",
105
- "required": false
106
- }
107
- },
108
- {
109
- "id": "analysis",
110
- "discriminator": {
111
- "path": "data.analysisType",
112
- "required": false,
113
- "defaultValue": "delivery-risk"
114
- }
115
- },
116
- {
117
- "id": "decisions",
118
- "discriminator": {
119
- "path": "data.decisionType",
120
- "required": false,
121
- "defaultValue": "priority"
122
- }
123
- },
124
- {
125
- "id": "workflow"
126
- },
127
- {
128
- "id": "context",
129
- "retention": "work-scoped-ttl"
130
- },
131
- {
132
- "id": "relationships"
133
- },
134
- {
135
- "id": "knowx",
136
- "notes": "KnowX NODE facet — provenance required in .data"
137
- }
138
- ],
139
- "snapshotBuckets": {
140
- "analytics": "optional",
141
- "enrichment": "optional",
142
- "insights": "optional"
143
- },
144
- "fields": [
145
- {
146
- "path": "data.title",
147
- "valueType": "string",
148
- "contentType": "snapshots"
149
- },
150
- {
151
- "path": "data.status",
152
- "valueType": "string",
153
- "contentType": "snapshots"
154
- },
155
- {
156
- "path": "data.priority",
157
- "valueType": "string",
158
- "contentType": "snapshots"
159
- },
160
- {
161
- "path": "data.assigneeId",
162
- "valueType": "recordId",
163
- "contentType": "snapshots",
164
- "refersTo": {
165
- "objectType": "people"
166
- }
167
- }
168
- ]
169
- },
170
- {
171
- "id": "content",
172
- "name": "Content",
173
- "dataCategory": "knowledge",
174
- "abstractTypes": [
175
- "Content"
176
- ],
177
- "notes": "Ingested documents (raw/snapshots) plus free-floating KnowX knowledge items (knowx NODE/EDGE with own recordId). Nexum apply-plan records use nexum-* object types. Entity NODE facets stay on people/work-items.",
178
- "contentTypes": [
179
- {
1
+ {
2
+ "format": "memorix-metadata/1",
3
+ "agentId": "knowx",
4
+ "version": "0.1.0",
5
+ "agents": [
6
+ {
7
+ "id": "knowx",
8
+ "name": "KnowX (knowledge agent)",
9
+ "description": "First-party KnowX agent: extract knowledge from text+source, associate to existing knowledge, associate novel knowledge to entities. Standalone root agent — does not inherit from opx.",
10
+ "parentIds": [],
11
+ "parentId": null
12
+ }
13
+ ],
14
+ "objectTypes": [
15
+ {
16
+ "id": "people",
17
+ "name": "People",
18
+ "dataCategory": "entity",
19
+ "abstractTypes": [
20
+ "People"
21
+ ],
22
+ "notes": "Single people OT. Inside vs outside org is identity kind (concept.identifiers.primary.kind): employeeId | externalPersonId.",
23
+ "contentTypes": [
24
+ {
25
+ "id": "raw",
26
+ "required": true,
27
+ "requiredReason": "Landed provider-native payload; identity and lineage depend on it.",
28
+ "profile": { "allowSnapshotBuckets": false }
29
+ },
30
+ {
31
+ "id": "snapshots",
32
+ "required": true,
33
+ "requiredReason": "Canonical composed person view used by queries and abstracts.",
34
+ "profile": { "allowSnapshotBuckets": true }
35
+ },
36
+ {
37
+ "id": "discovery",
38
+ "discriminator": {
39
+ "path": "data.discoveryType",
40
+ "required": false,
41
+ "defaultValue": "default"
42
+ },
43
+ "profile": { "allowSnapshotBuckets": false }
44
+ },
45
+ {
46
+ "id": "analysis",
47
+ "discriminator": {
48
+ "path": "data.analysisType",
49
+ "required": false,
50
+ "defaultValue": "default"
51
+ },
52
+ "profile": { "allowSnapshotBuckets": false }
53
+ },
54
+ {
55
+ "id": "relationships",
56
+ "notes": "Candidate store shape until Gate G4",
57
+ "profile": { "allowSnapshotBuckets": false }
58
+ },
59
+ {
60
+ "id": "knowx",
61
+ "notes": "KnowX NODE facet — provenance required in .data",
62
+ "profile": { "allowSnapshotBuckets": false }
63
+ }
64
+ ],
65
+ "fields": [
66
+ {
67
+ "path": "data.title",
68
+ "valueType": "string",
69
+ "contentType": "snapshots"
70
+ },
71
+ {
72
+ "path": "data.role",
73
+ "valueType": "string",
74
+ "contentType": "snapshots"
75
+ },
76
+ {
77
+ "path": "data.lens",
78
+ "valueType": "string",
79
+ "contentType": "snapshots"
80
+ },
81
+ {
82
+ "path": "data.email",
83
+ "valueType": "string",
84
+ "contentType": "snapshots"
85
+ },
86
+ {
87
+ "path": "data.organization",
88
+ "valueType": "string",
89
+ "contentType": "snapshots"
90
+ }
91
+ ]
92
+ },
93
+ {
94
+ "id": "work-items",
95
+ "name": "Work Items",
96
+ "dataCategory": "entity",
97
+ "abstractTypes": [
98
+ "WorkItems"
99
+ ],
100
+ "contentTypes": [
101
+ {
180
102
  "id": "raw",
181
- "required": true,
182
- "requiredReason": "Exact provider-native land from knowx-folder / knowx-rest connectors; ingest identity depends on it.",
183
- "notes": "Exact provider-native land from knowx-folder / knowx-rest connectors"
184
- },
185
- {
103
+ "profile": { "allowSnapshotBuckets": false }
104
+ },
105
+ {
186
106
  "id": "snapshots",
187
- "required": false,
188
- "notes": "Promoted Markdown ContentRecordData via knowx-promote-content (or knowledge-pull promote)"
189
- },
190
- {
191
- "id": "knowx",
192
- "notes": "Knowledge item payloads — data.kind NODE|EDGE (topology); data.identity.category claim|fact|opinion|assumption (AI classifier, orthogonal to kind); data.epistemic.state is review standing (≠ identity.category); provenance mandatory. EDGE and content-derived items use their own recordId."
193
- },
194
- {
195
- "id": "nexum",
196
- "required": false,
197
- "notes": "Optional Nexum snapshot facet; durable apply-plan kinds use nexum-* object types"
198
- },
199
- {
200
- "id": "workflow",
201
- "notes": "Human review assignment sibling for knowledge items"
202
- },
203
- {
204
- "id": "confirmations",
205
- "notes": "Accept/reject decision sibling for knowledge items"
206
- },
207
- {
208
- "id": "relationships",
209
- "notes": "Content↔Knowledge lineage and knowledge links"
210
- }
211
- ],
212
- "fields": [
213
- {
214
- "path": "data.title",
215
- "valueType": "string",
216
- "contentType": "raw"
217
- },
218
- {
219
- "path": "data.markdown",
220
- "valueType": "string",
221
- "contentType": "raw"
222
- },
223
- {
224
- "path": "data.contentHash",
225
- "valueType": "string",
226
- "contentType": "raw"
227
- },
228
- {
229
- "path": "data.sourceFormat",
230
- "valueType": "string",
231
- "contentType": "raw"
232
- },
233
- {
234
- "path": "data.sourceMediaType",
235
- "valueType": "string",
236
- "contentType": "raw"
237
- },
238
- {
239
- "path": "data.byteSize",
240
- "valueType": "number",
241
- "contentType": "raw"
242
- },
243
- {
244
- "path": "data.language",
245
- "valueType": "string",
246
- "contentType": "raw"
247
- },
248
- {
249
- "path": "data.state",
250
- "valueType": "string",
251
- "contentType": "raw"
252
- },
253
- {
254
- "path": "data.revision",
255
- "valueType": "number",
256
- "contentType": "raw"
257
- },
258
- {
259
- "path": "data.extraction.extractorId",
260
- "valueType": "string",
261
- "contentType": "raw"
262
- },
263
- {
264
- "path": "data.extraction.extractorVersion",
265
- "valueType": "string",
266
- "contentType": "raw"
267
- },
268
- {
269
- "path": "data.extraction.extractedAt",
270
- "valueType": "datetime",
271
- "contentType": "raw"
272
- },
273
- {
274
- "path": "data.origins",
275
- "valueType": "array",
276
- "contentType": "raw"
277
- },
278
- {
279
- "path": "data.nav.derivedKnowledge",
280
- "valueType": "array",
281
- "contentType": "relationships"
282
- }
283
- ]
284
- }
285
- ],
286
- "abstractTypes": [
287
- {
288
- "id": "People",
289
- "name": "People",
290
- "meaning": "People who perform operational work — inside the org (employeeId) or outside (externalPersonId), distinguished by identity kind",
291
- "category": "entity",
292
- "properties": [
293
- {
294
- "id": "title",
295
- "valueType": "string",
296
- "required": true
297
- },
298
- {
299
- "id": "role",
300
- "valueType": "string",
301
- "required": true
302
- },
303
- {
304
- "id": "lens",
305
- "valueType": "string",
306
- "required": false
307
- },
308
- {
309
- "id": "email",
310
- "valueType": "string",
311
- "required": false
312
- },
313
- {
314
- "id": "organization",
315
- "valueType": "string",
316
- "required": false
317
- },
318
- {
319
- "id": "contentEdgesFrom",
320
- "valueType": "array",
321
- "required": false
322
- }
323
- ],
324
- "members": [
325
- {
326
- "objectType": "people",
327
- "contentType": "snapshots",
328
- "properties": [
329
- {
330
- "abstractProperty": "title",
331
- "contentType": "snapshots",
332
- "propertyPath": "data.title",
333
- "concreteValueType": "string"
334
- },
335
- {
336
- "abstractProperty": "role",
337
- "contentType": "snapshots",
338
- "propertyPath": "data.role",
339
- "concreteValueType": "string"
340
- },
341
- {
342
- "abstractProperty": "lens",
343
- "contentType": "snapshots",
344
- "propertyPath": "data.lens",
345
- "concreteValueType": "string"
346
- },
347
- {
348
- "abstractProperty": "email",
349
- "contentType": "snapshots",
350
- "propertyPath": "data.email",
351
- "concreteValueType": "string"
352
- },
353
- {
354
- "abstractProperty": "organization",
355
- "contentType": "snapshots",
356
- "propertyPath": "data.organization",
357
- "concreteValueType": "string"
358
- },
359
- {
360
- "abstractProperty": "contentEdgesFrom",
361
- "contentType": "relationships",
362
- "propertyPath": "data.nav.contentEdgesFrom"
363
- }
364
- ]
365
- }
366
- ],
367
- "union": false,
368
- "notes": "People abstract ↔ people OT 1:1. Identity kind employeeId | externalPersonId distinguishes inside/outside org."
369
- },
370
- {
371
- "id": "WorkItems",
372
- "name": "Work Items",
373
- "meaning": "Units of operational work",
374
- "category": "entity",
375
- "properties": [
376
- {
377
- "id": "title",
378
- "valueType": "string",
379
- "required": true
380
- },
381
- {
382
- "id": "status",
383
- "valueType": "string",
384
- "required": true
385
- },
386
- {
387
- "id": "priority",
388
- "valueType": "string",
389
- "required": false
390
- },
391
- {
392
- "id": "contentEdgesTo",
393
- "valueType": "array",
394
- "required": false
395
- }
396
- ],
397
- "members": [
398
- {
399
- "objectType": "work-items",
400
- "contentType": "snapshots",
401
- "properties": [
402
- {
403
- "abstractProperty": "title",
404
- "contentType": "snapshots",
405
- "propertyPath": "data.title",
406
- "concreteValueType": "string"
407
- },
408
- {
409
- "abstractProperty": "status",
410
- "contentType": "snapshots",
411
- "propertyPath": "data.status",
412
- "concreteValueType": "string"
413
- },
414
- {
415
- "abstractProperty": "priority",
416
- "contentType": "snapshots",
417
- "propertyPath": "data.priority",
418
- "concreteValueType": "string"
419
- },
420
- {
421
- "abstractProperty": "contentEdgesTo",
422
- "contentType": "relationships",
423
- "propertyPath": "data.nav.contentEdgesTo"
424
- }
425
- ]
426
- }
427
- ],
428
- "union": false
429
- },
430
- {
431
- "id": "Content",
432
- "name": "Content",
433
- "meaning": "Canonical ingested documents and derived knowledge items (Markdown + provenance). Knowledge claims are derived from content; content is the source of claims, not the claims themselves.",
434
- "category": "knowledge",
435
- "properties": [
436
- {
437
- "id": "title",
438
- "valueType": "string",
439
- "required": false
440
- },
441
- {
442
- "id": "markdown",
443
- "valueType": "string",
444
- "required": true
445
- },
446
- {
447
- "id": "contentHash",
448
- "valueType": "string",
449
- "required": true
450
- },
451
- {
452
- "id": "sourceFormat",
453
- "valueType": "string",
454
- "required": true
455
- },
456
- {
457
- "id": "sourceMediaType",
458
- "valueType": "string",
459
- "required": true
460
- },
461
- {
462
- "id": "byteSize",
463
- "valueType": "number",
464
- "required": true
465
- },
466
- {
467
- "id": "language",
468
- "valueType": "string",
469
- "required": false
470
- },
471
- {
472
- "id": "state",
473
- "valueType": "string",
474
- "required": true
475
- },
476
- {
477
- "id": "revision",
478
- "valueType": "number",
479
- "required": true
480
- },
481
- {
482
- "id": "extractorId",
483
- "valueType": "string",
484
- "required": false
485
- },
486
- {
487
- "id": "extractorVersion",
488
- "valueType": "string",
489
- "required": false
490
- },
491
- {
492
- "id": "extractedAt",
493
- "valueType": "datetime",
494
- "required": false
495
- },
496
- {
497
- "id": "origins",
498
- "valueType": "array",
499
- "required": false
500
- },
501
- {
502
- "id": "derivedKnowledge",
503
- "valueType": "array",
504
- "required": false
505
- },
506
- {
507
- "id": "sameAs",
508
- "valueType": "array",
509
- "required": false
510
- },
511
- {
512
- "id": "supports",
513
- "valueType": "array",
514
- "required": false
515
- },
516
- {
517
- "id": "supportedBy",
518
- "valueType": "array",
519
- "required": false
520
- },
521
- {
522
- "id": "contradicts",
523
- "valueType": "array",
524
- "required": false
525
- },
526
- {
527
- "id": "contradictedBy",
528
- "valueType": "array",
529
- "required": false
530
- },
531
- {
532
- "id": "derivedFrom",
533
- "valueType": "array",
534
- "required": false
535
- },
536
- {
537
- "id": "derivedClaims",
538
- "valueType": "array",
539
- "required": false
540
- },
541
- {
542
- "id": "derivedFromContent",
543
- "valueType": "array",
544
- "required": false
545
- },
546
- {
547
- "id": "edgeFrom",
548
- "valueType": "array",
549
- "required": false
550
- },
551
- {
552
- "id": "edgeTo",
553
- "valueType": "array",
554
- "required": false
555
- }
556
- ],
557
- "members": [
558
- {
559
- "objectType": "content",
560
- "contentType": "raw",
561
- "properties": [
562
- {
563
- "abstractProperty": "title",
564
- "contentType": "raw",
565
- "propertyPath": "data.title"
566
- },
567
- {
568
- "abstractProperty": "markdown",
569
- "contentType": "raw",
570
- "propertyPath": "data.markdown"
571
- },
572
- {
573
- "abstractProperty": "contentHash",
574
- "contentType": "raw",
575
- "propertyPath": "data.contentHash"
576
- },
577
- {
578
- "abstractProperty": "sourceFormat",
579
- "contentType": "raw",
580
- "propertyPath": "data.sourceFormat"
581
- },
582
- {
583
- "abstractProperty": "sourceMediaType",
584
- "contentType": "raw",
585
- "propertyPath": "data.sourceMediaType"
586
- },
587
- {
588
- "abstractProperty": "byteSize",
589
- "contentType": "raw",
590
- "propertyPath": "data.byteSize"
591
- },
592
- {
593
- "abstractProperty": "language",
594
- "contentType": "raw",
595
- "propertyPath": "data.language"
596
- },
597
- {
598
- "abstractProperty": "state",
599
- "contentType": "raw",
600
- "propertyPath": "data.state"
601
- },
602
- {
603
- "abstractProperty": "revision",
604
- "contentType": "raw",
605
- "propertyPath": "data.revision"
606
- },
607
- {
608
- "abstractProperty": "extractorId",
609
- "contentType": "raw",
610
- "propertyPath": "data.extraction.extractorId"
611
- },
612
- {
613
- "abstractProperty": "extractorVersion",
614
- "contentType": "raw",
615
- "propertyPath": "data.extraction.extractorVersion"
616
- },
617
- {
618
- "abstractProperty": "extractedAt",
619
- "contentType": "raw",
620
- "propertyPath": "data.extraction.extractedAt"
621
- },
622
- {
623
- "abstractProperty": "origins",
624
- "contentType": "raw",
625
- "propertyPath": "data.origins"
626
- },
627
- {
628
- "abstractProperty": "derivedKnowledge",
629
- "contentType": "relationships",
630
- "propertyPath": "data.nav.derivedKnowledge"
631
- },
632
- {
633
- "abstractProperty": "sameAs",
634
- "contentType": "relationships",
635
- "propertyPath": "data.nav.sameAs"
636
- },
637
- {
638
- "abstractProperty": "supports",
639
- "contentType": "relationships",
640
- "propertyPath": "data.nav.supports"
641
- },
642
- {
643
- "abstractProperty": "supportedBy",
644
- "contentType": "relationships",
645
- "propertyPath": "data.nav.supportedBy"
646
- },
647
- {
648
- "abstractProperty": "contradicts",
649
- "contentType": "relationships",
650
- "propertyPath": "data.nav.contradicts"
651
- },
652
- {
653
- "abstractProperty": "contradictedBy",
654
- "contentType": "relationships",
655
- "propertyPath": "data.nav.contradictedBy"
656
- },
657
- {
658
- "abstractProperty": "derivedFrom",
659
- "contentType": "relationships",
660
- "propertyPath": "data.nav.derivedFrom"
661
- },
662
- {
663
- "abstractProperty": "derivedClaims",
664
- "contentType": "relationships",
665
- "propertyPath": "data.nav.derivedClaims"
666
- },
667
- {
668
- "abstractProperty": "derivedFromContent",
669
- "contentType": "relationships",
670
- "propertyPath": "data.nav.derivedFromContent"
671
- },
672
- {
673
- "abstractProperty": "edgeFrom",
674
- "contentType": "relationships",
675
- "propertyPath": "data.nav.edgeFrom"
676
- },
677
- {
678
- "abstractProperty": "edgeTo",
679
- "contentType": "relationships",
680
- "propertyPath": "data.nav.edgeTo"
681
- }
682
- ]
683
- }
684
- ],
685
- "union": false,
686
- "notes": "Content abstract ↔ content OT. Domain noun — not product-branded. Documents (raw/snapshots) and derived knowledge items (knowx) share this abstract; writers always target concrete content types on the OT."
687
- }
688
- ],
689
- "relationshipDefinitions": [
690
- {
691
- "id": "knowx-same-as",
692
- "name": "Same as",
693
- "meaning": "Two knowledge claims refer to the same underlying assertion",
694
- "directionality": "undirected",
695
- "from": {
696
- "abstractType": "Content",
697
- "path": "sameAs"
698
- },
699
- "to": {
700
- "abstractType": "Content",
701
- "path": "sameAs"
702
- },
703
- "discoveryRules": [
704
- {
705
- "id": "from-associate-plan",
706
- "kind": "service-plan",
707
- "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
708
- }
709
- ]
710
- },
711
- {
712
- "id": "knowx-supports",
713
- "name": "Supports",
714
- "meaning": "One knowledge claim supports another",
715
- "directionality": "directed",
716
- "from": {
717
- "abstractType": "Content",
718
- "path": "supports"
719
- },
720
- "to": {
721
- "abstractType": "Content",
722
- "path": "supportedBy"
723
- },
724
- "discoveryRules": [
725
- {
726
- "id": "from-associate-plan",
727
- "kind": "service-plan",
728
- "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
729
- }
730
- ]
731
- },
732
- {
733
- "id": "knowx-contradicts",
734
- "name": "Contradicts",
735
- "meaning": "Two knowledge claims contradict each other",
736
- "directionality": "directed",
737
- "from": {
738
- "abstractType": "Content",
739
- "path": "contradicts"
740
- },
741
- "to": {
742
- "abstractType": "Content",
743
- "path": "contradictedBy"
744
- },
745
- "discoveryRules": [
746
- {
747
- "id": "from-associate-plan",
748
- "kind": "service-plan",
749
- "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
750
- }
751
- ]
752
- },
753
- {
754
- "id": "knowx-derived-from",
755
- "name": "Derived from claim",
756
- "meaning": "A knowledge claim is derived from another knowledge claim",
757
- "directionality": "directed",
758
- "from": {
759
- "abstractType": "Content",
760
- "path": "derivedFrom"
761
- },
762
- "to": {
763
- "abstractType": "Content",
764
- "path": "derivedClaims"
765
- },
766
- "discoveryRules": [
767
- {
768
- "id": "from-associate-plan",
769
- "kind": "service-plan",
770
- "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
771
- }
772
- ]
773
- },
774
- {
775
- "id": "knowx-derived-from-content",
776
- "name": "Derived from content",
777
- "meaning": "A knowledge claim is derived from ingested content",
778
- "directionality": "directed",
779
- "from": {
780
- "abstractType": "Content",
781
- "path": "derivedFromContent"
782
- },
783
- "to": {
784
- "abstractType": "Content",
785
- "path": "derivedKnowledge"
786
- },
787
- "discoveryRules": [
788
- {
789
- "id": "from-associate-plan",
790
- "kind": "service-plan",
791
- "notes": "Materialized from knowx-associate-knowledge when provenance.lineage.sourceContentId is present"
792
- }
793
- ]
794
- },
795
- {
796
- "id": "knowx-edge-from",
797
- "name": "Edge from",
798
- "meaning": "A knowledge EDGE claim starts at an entity",
799
- "directionality": "directed",
800
- "from": {
801
- "abstractType": "Content",
802
- "path": "edgeFrom"
803
- },
804
- "to": {
805
- "abstractType": "People",
806
- "path": "contentEdgesFrom"
807
- },
808
- "discoveryRules": [
809
- {
810
- "id": "from-associate-entities-plan",
811
- "kind": "service-plan",
812
- "notes": "Materialized from knowx-associate-entities entityRelationshipPlans"
813
- }
814
- ]
815
- },
816
- {
817
- "id": "knowx-edge-to",
818
- "name": "Edge to",
819
- "meaning": "A knowledge EDGE claim ends at an entity",
820
- "directionality": "directed",
821
- "from": {
822
- "abstractType": "Content",
823
- "path": "edgeTo"
824
- },
825
- "to": {
826
- "abstractType": "WorkItems",
827
- "path": "contentEdgesTo"
828
- },
829
- "discoveryRules": [
830
- {
831
- "id": "from-associate-entities-plan",
832
- "kind": "service-plan",
833
- "notes": "Materialized from knowx-associate-entities entityRelationshipPlans"
834
- }
835
- ]
836
- }
837
- ],
838
- "mappings": [],
839
- "views": [],
840
- "writes": [],
841
- "sources": [
842
- {
843
- "id": "knowx-source",
844
- "name": "Knowledge source",
845
- "kind": "rest",
846
- "baseUrlEnv": "KNOWX_SOURCE_URL",
847
- "defaultBaseUrl": "http://127.0.0.1:5104",
848
- "credentialRef": "knowx-source-local",
849
- "connectorRef": "knowx-rest",
850
- "endpoints": [
851
- "/content"
852
- ],
853
- "pagination": {
854
- "style": "cursor",
855
- "defaultPageSize": 50
856
- },
857
- "streams": [
858
- {
859
- "streamId": "content",
860
- "endpoint": "/content",
861
- "objectType": "content",
862
- "dataCategory": "knowledge",
863
- "identityPath": "id",
864
- "modes": [
865
- "knowledge"
866
- ],
867
- "pageSize": 10,
868
- "checkpoint": {
869
- "method": "cursor"
870
- }
871
- }
872
- ],
873
- "routes": [
874
- {
875
- "endpoint": "/content",
876
- "objectType": "content",
877
- "dataCategory": "knowledge",
878
- "identityPath": "id",
879
- "primaryKind": "contentId",
880
- "modes": [
881
- "knowledge"
882
- ],
883
- "pageSize": 10,
884
- "checkpoint": {
885
- "method": "cursor"
886
- }
887
- }
888
- ]
889
- },
890
- {
891
- "id": "knowx-managed",
892
- "name": "Knowledge Drive (managed)",
893
- "kind": "knowx-managed",
894
- "connectorRef": "knowx-managed",
895
- "endpoints": [
896
- "/items"
897
- ],
898
- "pagination": {
899
- "style": "page",
900
- "defaultPageSize": 25
901
- },
902
- "streams": [
903
- {
904
- "streamId": "items",
905
- "endpoint": "/items",
906
- "objectType": "content",
907
- "dataCategory": "knowledge",
908
- "identityPath": "id",
909
- "modes": [
910
- "knowledge"
911
- ],
912
- "pageSize": 25,
913
- "checkpoint": {
914
- "method": "cursor"
915
- }
916
- }
917
- ],
918
- "routes": [
919
- {
920
- "endpoint": "/items",
921
- "objectType": "content",
922
- "dataCategory": "knowledge",
923
- "identityPath": "id",
924
- "primaryKind": "contentId",
925
- "modes": [
926
- "knowledge"
927
- ],
928
- "pageSize": 25,
929
- "checkpoint": {
930
- "method": "cursor"
931
- }
932
- }
933
- ]
934
- }
935
- ],
936
- "services": [
937
- {
938
- "id": "knowx-folder-pull",
939
- "name": "Folder connector pull",
940
- "description": "Runs the remote-hosted knowx-folder defineConnector (collectStream + fullScanHash). Lands exact file raw only — does not extract Markdown or derive knowledge. Connector-adjacent worker — not agent vocabulary.",
941
- "role": "connector",
942
- "capabilities": [
943
- "analyze"
944
- ],
945
- "memorixAccess": [
946
- "raw",
947
- "checkpoints"
948
- ],
949
- "inputs": [
950
- {
951
- "id": "sourceId",
952
- "control": true,
953
- "description": "Managed folder ContentSource id"
954
- },
955
- {
956
- "id": "relativePath",
957
- "control": true,
958
- "description": "Optional single relative path for targeted ingest"
959
- },
960
- {
961
- "id": "triggerReason",
962
- "control": true,
963
- "description": "manual | scheduled | watch | delete"
964
- }
965
- ],
966
- "outputs": [
967
- {
968
- "id": "pullSummary",
969
- "control": true,
970
- "description": "Pull status, discovered counts, rawItemIds"
971
- },
972
- {
973
- "id": "rawItemIds",
974
- "control": true,
975
- "description": "Relative-path identities landed as content/raw"
976
- }
977
- ],
978
- "invocation": {
979
- "kind": "worker",
980
- "operation": "knowx-folder-pull"
981
- }
982
- },
983
- {
984
- "id": "knowx-managed-pull",
985
- "name": "Managed drive pull",
986
- "description": "Runs the remote-hosted knowx-managed defineConnector over managed upload events / item versions. Lands exact bytes as content/raw via collectStream. Connector-adjacent worker — not agent vocabulary.",
987
- "role": "connector",
988
- "capabilities": [
989
- "analyze"
990
- ],
991
- "memorixAccess": [
992
- "raw",
993
- "checkpoints"
994
- ],
995
- "inputs": [
996
- {
997
- "id": "itemIds",
998
- "control": true,
999
- "description": "Managed Knowledge Drive item ids to pull"
1000
- },
1001
- {
1002
- "id": "eventCursor",
1003
- "control": true,
1004
- "description": "Optional managed event cursor"
1005
- }
1006
- ],
1007
- "outputs": [
1008
- {
1009
- "id": "pullSummary",
1010
- "control": true,
1011
- "description": "Pull status and counts"
1012
- },
1013
- {
1014
- "id": "rawItemIds",
1015
- "control": true,
1016
- "description": "Managed item identities landed as content/raw"
1017
- }
1018
- ],
1019
- "invocation": {
1020
- "kind": "worker",
1021
- "operation": "knowx-managed-pull"
1022
- }
1023
- },
1024
- {
1025
- "id": "knowx-promote-content",
1026
- "name": "Promote content",
1027
- "description": "Reads landed content/raw file envelopes, runs format→Markdown extractors, writes Content snapshots. Connector-pipeline step — promotes concrete raw onto the Content abstract member.",
1028
- "role": "connector",
1029
- "capabilities": [
1030
- "analyze"
1031
- ],
1032
- "memorixAccess": [
1033
- "raw",
1034
- "explore"
1035
- ],
1036
- "inputs": [
1037
- {
1038
- "id": "sourceId",
1039
- "control": true,
1040
- "description": "Managed folder source id"
1041
- },
1042
- {
1043
- "id": "rawItemIds",
1044
- "control": true,
1045
- "description": "Raw identities from knowx-folder-pull"
1046
- },
1047
- {
1048
- "id": "pullSummary",
1049
- "control": true,
1050
- "description": "Optional pull summary carrying rawItemIds"
1051
- }
1052
- ],
1053
- "outputs": [
1054
- {
1055
- "id": "contentDrafts",
1056
- "abstractType": "Content",
1057
- "description": "Canonical ContentRecordData drafts on Content"
1058
- },
1059
- {
1060
- "id": "contentIds",
1061
- "abstractType": "Content",
1062
- "description": "Promoted Content record ids"
1063
- }
1064
- ],
1065
- "invocation": {
1066
- "kind": "worker",
1067
- "operation": "knowx-promote-content"
1068
- }
1069
- },
1070
- {
1071
- "id": "knowx-extract",
1072
- "name": "Extract knowledge",
1073
- "description": "Extract NODE/EDGE knowledge-item drafts from Content (text + knowledge source, or promoted content). Each draft includes data.identity.category (claim|fact|opinion|assumption). Returns drafts only — does not persist. Pipeline write-record applies knowx content. When aiService is bound and AI_SKILLS_URL is set, Memorix invokes Catalox skill knowx.extract via ai-services/1. Fallback: pack worker; test-only KNOWX_AI_SIM=1 routes to APS AI sim (:5112).",
1074
- "role": "agent",
1075
- "capabilities": [
1076
- "analyze"
1077
- ],
1078
- "memorixAccess": [
1079
- "explore"
1080
- ],
1081
- "inputs": [
1082
- {
1083
- "id": "text",
1084
- "control": true,
1085
- "description": "Input text to analyze (inline string or resolved from Content)"
1086
- },
1087
- {
1088
- "id": "knowledgeSource",
1089
- "abstractType": "Content",
1090
- "description": "Exact source bytes / provenance envelope for Content"
1091
- },
1092
- {
1093
- "id": "contentId",
1094
- "abstractType": "Content",
1095
- "description": "Promoted Content record id — open via Explore"
1096
- },
1097
- {
1098
- "id": "contentIds",
1099
- "abstractType": "Content",
1100
- "description": "Batch of promoted Content ids"
1101
- },
1102
- {
1103
- "id": "contentDrafts",
1104
- "abstractType": "Content",
1105
- "description": "In-pipeline ContentRecordData from knowx-promote-content"
1106
- }
1107
- ],
1108
- "outputs": [
1109
- {
1110
- "id": "knowxDrafts",
1111
- "abstractType": "Content",
1112
- "description": "Array of knowx knowledge-item drafts (NODE/EDGE + data.identity.category claim|fact|opinion|assumption) with mandatory provenance and content lineage"
1113
- }
1114
- ],
1115
- "aiService": {
1116
- "aiServiceType": "skill",
1117
- "itemId": "knowx.extract",
1118
- "endpointEnv": "AI_SKILLS_URL"
1119
- },
1120
- "invocation": {
1121
- "kind": "worker",
1122
- "operation": "knowx-extract",
1123
- "endpointEnv": "KNOWX_EXTRACT_WORKER_URL",
1124
- "notes": "Worker fallback when AI_SKILLS_URL unset / compile cannot resolve skill origin. KNOWX_EXTRACT_WORKER_URL honored only when KNOWX_AI_SIM=1 (test-only)."
1125
- }
1126
- },
1127
- {
1128
- "id": "knowx-retrieval-index",
1129
- "name": "Index / candidates (candidate-retrieval)",
1130
- "description": "Companion step for @x12i/candidate-retrival-service (MEMORIX_RETRIEVAL_URL, default local :6560). (1) POST /v1/candidates for open knowx drafts so associate sees corpus-scale priors, (2) POST /v1/index/upsert for knowx drafts (knowx.knowledge) and Content snapshots (knowx.snapshot). Soft-skips only when URL unset; when URL is set, remote failures hard-fail the step — associate then receives real CRS priors.",
1131
- "role": "agent",
1132
- "capabilities": [
1133
- "analyze"
1134
- ],
1135
- "memorixAccess": [],
1136
- "inputs": [
1137
- {
1138
- "id": "knowxDrafts",
1139
- "abstractType": "Content",
1140
- "description": "Drafts from knowx-extract / write path (candidates + upsert)"
1141
- },
1142
- {
1143
- "id": "contentDrafts",
1144
- "abstractType": "Content",
1145
- "description": "Optional Content snapshot drafts from knowx-promote-content (knowx.snapshot upsert)"
1146
- },
1147
- {
1148
- "id": "fetchCandidates",
1149
- "control": true,
1150
- "description": "When false, index only (no /v1/candidates). Default true when knowxDrafts present."
1151
- }
1152
- ],
1153
- "outputs": [
1154
- {
1155
- "id": "existingKnowx",
1156
- "abstractType": "Content",
1157
- "description": "Ranked prior knowx from /v1/candidates for associate (self-ids excluded)"
1158
- },
1159
- {
1160
- "id": "retrieval",
1161
- "control": true,
1162
- "description": "enabled / upserted / warnings for ops"
1163
- },
1164
- {
1165
- "id": "indexedRecordIds",
1166
- "control": true,
1167
- "description": "recordId / contentId list submitted for upsert"
1168
- }
1169
- ],
1170
- "invocation": {
1171
- "kind": "worker",
1172
- "operation": "knowx-retrieval-index",
1173
- "notes": "Requires MEMORIX_RETRIEVAL_URL (or CANDIDATE_RETRIEVAL_URL) pointing at the candidate-retrieval companion."
1174
- }
1175
- },
1176
- {
1177
- "id": "knowx-nexum",
1178
- "name": "Knowledge graph analyze (Nexum)",
1179
- "description": "KnowX control-plane adapter for @x12i/nexum (MEMORIX_NEXUM_URL, default local :7500). Maps KnowX pipeline bags (extract/promote/write) to Nexum items[], POSTs memorix-capability/1 analyze (serviceId nexum), returns proposedGraph. Soft-skips only when URL unset; when URL is set (or MEMORIX_NEXUM_REQUIRED=1), companion failures hard-fail. Persistence is platform write-record mode nexum after this step. Explore view: createKnowxNexumExploreClient (NEXUM_API_URL · :8080).",
1180
- "role": "agent",
1181
- "capabilities": [
1182
- "analyze"
1183
- ],
1184
- "memorixAccess": [],
1185
- "inputs": [
1186
- {
1187
- "id": "knowxDrafts",
1188
- "abstractType": "Content",
1189
- "description": "Drafts from knowx-extract / write path (structured items for Nexum)"
1190
- },
1191
- {
1192
- "id": "contentDrafts",
1193
- "abstractType": "Content",
1194
- "description": "Optional Content snapshot drafts from knowx-promote-content"
1195
- }
1196
- ],
1197
- "outputs": [
1198
- {
1199
- "id": "apply-plan",
1200
- "control": true,
1201
- "description": "x12i-nexum/1 replace-contribution / remove-contribution apply plan (not applied by this step)"
1202
- },
1203
- {
1204
- "id": "nexum",
1205
- "control": true,
1206
- "description": "enabled / itemCount / warnings for ops"
1207
- },
1208
- {
1209
- "id": "diagnostics",
1210
- "control": true,
1211
- "description": "Remote worker diagnostics"
1212
- }
1213
- ],
1214
- "invocation": {
1215
- "kind": "worker",
1216
- "operation": "analyze",
1217
- "notes": "KnowX control-plane adapter (serviceId knowx-nexum — not nexum). Maps bags then POSTs to nexum-worker via MEMORIX_NEXUM_URL (alias NEXUM_URL). Compile must not treat this id as serviceId nexum. Explore REST uses MEMORIX_NEXUM_READ_URL + createKnowxNexumExploreClient."
1218
- }
1219
- },
1220
- {
1221
- "id": "knowx-associate-knowledge",
1222
- "name": "Associate knowledge",
1223
- "description": "Classify extracted drafts against existing Content scope: known, novel, contradicts. Prefer existingKnowx from knowx-retrieval-index (/v1/candidates). When aiService is bound, Memorix invokes Catalox skill knowx.associate-knowledge and may also push explore/catalog. Worker fallback uses pushed existingKnowx or Explore list. Returns classification buckets + candidate knowledge relationship plans. Does not persist.",
1224
- "role": "agent",
1225
- "capabilities": [
1226
- "analyze"
1227
- ],
1228
- "memorixAccess": [
1229
- "explore"
1230
- ],
1231
- "inputs": [
1232
- {
1233
- "id": "knowxDrafts",
1234
- "abstractType": "Content",
1235
- "description": "Drafts from knowx-extract"
1236
- },
1237
- {
1238
- "id": "existingKnowx",
1239
- "abstractType": "Content",
1240
- "description": "Optional: pipeline output from knowx-retrieval-index, fixtures, or Explore push"
1241
- }
1242
- ],
1243
- "outputs": [
1244
- {
1245
- "id": "classification",
1246
- "abstractType": "Content",
1247
- "description": "known / novel / contradicts buckets"
1248
- },
1249
- {
1250
- "id": "relationshipPlans",
1251
- "abstractType": "Content",
1252
- "description": "Candidate knowledge relationship plans on Content"
1253
- }
1254
- ],
1255
- "aiService": {
1256
- "aiServiceType": "skill",
1257
- "itemId": "knowx.associate-knowledge",
1258
- "endpointEnv": "AI_SKILLS_URL"
1259
- },
1260
- "invocation": {
1261
- "kind": "worker",
1262
- "operation": "knowx-associate-knowledge",
1263
- "notes": "Worker fallback when AI_SKILLS_URL unset / compile cannot resolve skill origin."
1264
- }
1265
- },
1266
- {
1267
- "id": "knowx-associate-entities",
1268
- "name": "Associate entities",
1269
- "description": "Plan EDGE endpoint relationships for novel drafts against entity abstracts (People, WorkItems) and Content. Does not persist.",
1270
- "role": "agent",
1271
- "capabilities": [
1272
- "analyze"
1273
- ],
1274
- "memorixAccess": [
1275
- "explore"
1276
- ],
1277
- "inputs": [
1278
- {
1279
- "id": "novelDrafts",
1280
- "abstractType": "Content",
1281
- "description": "Novel drafts from associate-knowledge classification"
1282
- }
1283
- ],
1284
- "outputs": [
1285
- {
1286
- "id": "entityRelationshipPlans",
1287
- "abstractType": "People",
1288
- "description": "EDGE endpoint relationship plans toward People, WorkItems, and Content abstracts"
1289
- }
1290
- ],
1291
- "invocation": {
1292
- "kind": "worker",
1293
- "operation": "knowx-associate-entities"
1294
- }
1295
- }
1296
- ],
1297
- "pipelines": [
1298
- {
1299
- "id": "knowx-knowledge-pull",
1300
- "name": "Scheduled knowledge pull from knowx-source",
1301
- "trigger": "scheduled",
1302
- "mode": "knowledge",
1303
- "description": "Memory pull from knowx-source fixture (CF knowx-rest). Promote/extract are separate pipelines.",
1304
- "steps": [
1305
- {
1306
- "id": "pull",
1307
- "kind": "memory-pull",
1308
- "sourceId": "knowx-source"
1309
- }
1310
- ]
1311
- },
1312
- {
1313
- "id": "knowx-ingest-associate",
1314
- "name": "Ingest then associate knowledge and entities",
1315
- "trigger": "explicit",
1316
- "description": "extract → write knowx → retrieval-index (candidate-retrieval upsert + candidates) → nexum (proposedGraph) → write-graph (mode nexum persist) → associate-knowledge → relationship-write → associate-entities → relationship-write. Services do not persist; write-record and relationship-write do.",
1317
- "steps": [
1318
- {
1319
- "id": "extract",
1320
- "kind": "analyze",
1321
- "serviceId": "knowx-extract"
1322
- },
1323
- {
1324
- "id": "write-knowx",
1325
- "kind": "write-record",
1326
- "contentType": "knowx",
1327
- "dependsOn": [
1328
- "extract"
1329
- ],
1330
- "inputs": [
1331
- {
1332
- "fromStep": "extract",
1333
- "key": "extract"
1334
- }
1335
- ]
1336
- },
1337
- {
1338
- "id": "index-knowx",
1339
- "kind": "analyze",
1340
- "serviceId": "knowx-retrieval-index",
1341
- "dependsOn": [
1342
- "write-knowx"
1343
- ],
1344
- "inputs": [
1345
- {
1346
- "fromStep": "extract",
1347
- "key": "extract"
1348
- },
1349
- {
1350
- "fromStep": "write-knowx",
1351
- "key": "write-knowx"
1352
- }
1353
- ],
1354
- "notes": "POST /v1/candidates for associate + /v1/index/upsert (knowx.knowledge). Soft-skip only when MEMORIX_RETRIEVAL_URL unset; when set, remote failures hard-fail."
1355
- },
1356
- {
1357
- "id": "nexum",
1358
- "kind": "analyze",
1359
- "serviceId": "knowx-nexum",
1360
- "dependsOn": [
1361
- "index-knowx"
1362
- ],
1363
- "inputs": [
1364
- {
1365
- "fromStep": "extract",
1366
- "key": "extract"
1367
- },
1368
- {
1369
- "fromStep": "write-knowx",
1370
- "key": "write-knowx"
1371
- }
1372
- ],
1373
- "notes": "KnowX mapper POSTs Nexum analyze (proposedGraph). Soft-skip only when MEMORIX_NEXUM_URL unset; when set, remote failures hard-fail. Platform write-record mode nexum persists proposedGraph."
1374
- },
1375
- {
1376
- "id": "write-graph",
1377
- "kind": "write-record",
1378
- "contentType": "snapshots",
1379
- "portConfig": {
1380
- "mode": "nexum"
107
+ "profile": { "allowSnapshotBuckets": true }
108
+ },
109
+ {
110
+ "id": "discovery",
111
+ "discriminator": {
112
+ "path": "data.discoveryType",
113
+ "required": false
1381
114
  },
1382
- "dependsOn": [
1383
- "nexum"
1384
- ],
1385
- "inputs": [
1386
- {
1387
- "fromStep": "nexum",
1388
- "key": "nexum"
1389
- }
1390
- ],
1391
- "notes": "mode nexum — create-or-update proposedGraph as content/snapshots. Empty plan when companion soft-skips is a no-op success."
1392
- },
1393
- {
1394
- "id": "associate-knowledge",
1395
- "kind": "analyze",
1396
- "serviceId": "knowx-associate-knowledge",
1397
- "dependsOn": [
1398
- "index-knowx",
1399
- "write-graph"
1400
- ],
1401
- "inputs": [
1402
- {
1403
- "fromStep": "extract",
1404
- "key": "extract"
1405
- },
1406
- {
1407
- "fromStep": "index-knowx",
1408
- "key": "index-knowx"
1409
- }
1410
- ]
1411
- },
1412
- {
1413
- "id": "write-knowledge-links",
1414
- "kind": "relationship-write",
1415
- "dependsOn": [
1416
- "associate-knowledge"
1417
- ],
1418
- "inputs": [
1419
- {
1420
- "fromStep": "associate-knowledge",
1421
- "key": "associate-knowledge"
1422
- }
1423
- ],
1424
- "notes": "Consumes relationshipPlans → knowx-same-as / knowx-supports / knowx-contradicts / knowx-derived-from"
1425
- },
1426
- {
1427
- "id": "associate-entities",
1428
- "kind": "analyze",
1429
- "serviceId": "knowx-associate-entities",
1430
- "dependsOn": [
1431
- "write-knowledge-links"
1432
- ],
1433
- "inputs": [
1434
- {
1435
- "fromStep": "associate-knowledge",
1436
- "key": "associate-knowledge"
1437
- }
1438
- ]
1439
- },
1440
- {
1441
- "id": "write-entity-links",
1442
- "kind": "relationship-write",
1443
- "dependsOn": [
1444
- "associate-entities"
1445
- ],
1446
- "inputs": [
1447
- {
1448
- "fromStep": "associate-entities",
1449
- "key": "associate-entities"
1450
- }
1451
- ],
1452
- "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
1453
- }
1454
- ]
1455
- },
1456
- {
1457
- "id": "knowx-ingest-content-source",
1458
- "name": "Folder connector ingest then derive knowledge",
1459
- "trigger": "explicit",
1460
- "description": "knowx-folder-pull → promote-content → index-snapshots (CRS knowx.snapshot) → extract → write knowx → index-knowx (CRS candidates + knowx.knowledge) → nexum (proposedGraph) → write-graph (mode nexum) → associate-knowledge → relationship-write → associate-entities → relationship-write.",
1461
- "steps": [
1462
- {
1463
- "id": "folder-pull",
1464
- "kind": "analyze",
1465
- "serviceId": "knowx-folder-pull"
1466
- },
1467
- {
1468
- "id": "promote-content",
1469
- "kind": "analyze",
1470
- "serviceId": "knowx-promote-content",
1471
- "dependsOn": [
1472
- "folder-pull"
1473
- ],
1474
- "inputs": [
1475
- {
1476
- "fromStep": "folder-pull",
1477
- "key": "folder-pull"
1478
- }
1479
- ]
1480
- },
1481
- {
1482
- "id": "index-snapshots",
1483
- "kind": "analyze",
1484
- "serviceId": "knowx-retrieval-index",
1485
- "dependsOn": [
1486
- "promote-content"
1487
- ],
1488
- "inputs": [
1489
- {
1490
- "fromStep": "promote-content",
1491
- "key": "promote-content"
1492
- }
1493
- ],
1494
- "notes": "Index Content snapshots only (knowx.snapshot; no knowxDrafts → no candidates). Soft-skip when CRS unset/down."
1495
- },
1496
- {
1497
- "id": "extract",
1498
- "kind": "analyze",
1499
- "serviceId": "knowx-extract",
1500
- "dependsOn": [
1501
- "index-snapshots"
1502
- ],
1503
- "inputs": [
1504
- {
1505
- "fromStep": "promote-content",
1506
- "key": "promote-content"
1507
- }
1508
- ]
1509
- },
1510
- {
1511
- "id": "write-knowx",
1512
- "kind": "write-record",
1513
- "contentType": "knowx",
1514
- "dependsOn": [
1515
- "extract"
1516
- ],
1517
- "inputs": [
1518
- {
1519
- "fromStep": "extract",
1520
- "key": "extract"
1521
- }
1522
- ]
1523
- },
1524
- {
1525
- "id": "index-knowx",
1526
- "kind": "analyze",
1527
- "serviceId": "knowx-retrieval-index",
1528
- "dependsOn": [
1529
- "write-knowx"
1530
- ],
1531
- "inputs": [
1532
- {
1533
- "fromStep": "extract",
1534
- "key": "extract"
1535
- },
1536
- {
1537
- "fromStep": "write-knowx",
1538
- "key": "write-knowx"
1539
- },
1540
- {
1541
- "fromStep": "promote-content",
1542
- "key": "promote-content"
1543
- }
1544
- ],
1545
- "notes": "POST /v1/candidates for associate + upsert knowx + re-touch snapshots."
1546
- },
1547
- {
1548
- "id": "nexum",
1549
- "kind": "analyze",
1550
- "serviceId": "knowx-nexum",
1551
- "dependsOn": [
1552
- "index-knowx"
1553
- ],
1554
- "inputs": [
1555
- {
1556
- "fromStep": "extract",
1557
- "key": "extract"
1558
- },
1559
- {
1560
- "fromStep": "write-knowx",
1561
- "key": "write-knowx"
1562
- },
1563
- {
1564
- "fromStep": "promote-content",
1565
- "key": "promote-content"
1566
- }
1567
- ],
1568
- "notes": "KnowX mapper POSTs Nexum analyze from promote + extract bags. Soft-skip when MEMORIX_NEXUM_URL unset; when set, remote failures hard-fail. write-graph persists proposedGraph."
1569
- },
1570
- {
1571
- "id": "write-graph",
1572
- "kind": "write-record",
1573
- "contentType": "snapshots",
1574
- "portConfig": {
1575
- "mode": "nexum"
115
+ "profile": { "allowSnapshotBuckets": false }
116
+ },
117
+ {
118
+ "id": "analysis",
119
+ "discriminator": {
120
+ "path": "data.analysisType",
121
+ "required": false,
122
+ "defaultValue": "delivery-risk"
1576
123
  },
1577
- "dependsOn": [
1578
- "nexum"
1579
- ],
1580
- "inputs": [
1581
- {
1582
- "fromStep": "nexum",
1583
- "key": "nexum"
1584
- }
1585
- ],
1586
- "notes": "mode nexum — create-or-update proposedGraph as content/snapshots."
1587
- },
1588
- {
1589
- "id": "associate-knowledge",
1590
- "kind": "analyze",
1591
- "serviceId": "knowx-associate-knowledge",
1592
- "dependsOn": [
1593
- "index-knowx",
1594
- "write-graph"
1595
- ],
1596
- "inputs": [
1597
- {
1598
- "fromStep": "extract",
1599
- "key": "extract"
1600
- },
1601
- {
1602
- "fromStep": "write-knowx",
1603
- "key": "write-knowx"
1604
- },
1605
- {
1606
- "fromStep": "index-knowx",
1607
- "key": "index-knowx"
1608
- }
1609
- ]
1610
- },
1611
- {
1612
- "id": "write-knowledge-links",
1613
- "kind": "relationship-write",
1614
- "dependsOn": [
1615
- "associate-knowledge"
1616
- ],
1617
- "inputs": [
1618
- {
1619
- "fromStep": "associate-knowledge",
1620
- "key": "associate-knowledge"
1621
- }
1622
- ],
1623
- "notes": "Consumes relationshipPlans including knowx-derived-from-content"
1624
- },
1625
- {
1626
- "id": "associate-entities",
1627
- "kind": "analyze",
1628
- "serviceId": "knowx-associate-entities",
1629
- "dependsOn": [
1630
- "write-knowledge-links"
1631
- ],
1632
- "inputs": [
1633
- {
1634
- "fromStep": "associate-knowledge",
1635
- "key": "associate-knowledge"
1636
- },
1637
- {
1638
- "fromStep": "extract",
1639
- "key": "extract"
1640
- }
1641
- ]
1642
- },
1643
- {
1644
- "id": "write-entity-links",
1645
- "kind": "relationship-write",
1646
- "dependsOn": [
1647
- "associate-entities"
1648
- ],
1649
- "inputs": [
1650
- {
1651
- "fromStep": "associate-entities",
1652
- "key": "associate-entities"
1653
- }
1654
- ],
1655
- "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
1656
- }
1657
- ]
1658
- },
1659
- {
1660
- "id": "knowx-ingest-managed-item",
1661
- "name": "Managed Drive item ingest then derive knowledge",
1662
- "trigger": "explicit",
1663
- "description": "knowx-managed-pull → promote-content → index-snapshots (CRS) → extract → write knowx → index-knowx (CRS candidates + upsert) → nexum (proposedGraph) → write-graph (mode nexum) → associate-knowledge → relationship-write → associate-entities → relationship-write.",
1664
- "steps": [
1665
- {
1666
- "id": "managed-pull",
1667
- "kind": "analyze",
1668
- "serviceId": "knowx-managed-pull"
1669
- },
1670
- {
1671
- "id": "promote-content",
1672
- "kind": "analyze",
1673
- "serviceId": "knowx-promote-content",
1674
- "dependsOn": [
1675
- "managed-pull"
1676
- ],
1677
- "inputs": [
1678
- {
1679
- "fromStep": "managed-pull",
1680
- "key": "managed-pull"
1681
- }
1682
- ]
1683
- },
1684
- {
1685
- "id": "index-snapshots",
1686
- "kind": "analyze",
1687
- "serviceId": "knowx-retrieval-index",
1688
- "dependsOn": [
1689
- "promote-content"
1690
- ],
1691
- "inputs": [
1692
- {
1693
- "fromStep": "promote-content",
1694
- "key": "promote-content"
1695
- }
1696
- ],
1697
- "notes": "Index Content snapshots only (knowx.snapshot; no knowxDrafts → no candidates). Soft-skip when CRS unset/down."
1698
- },
1699
- {
1700
- "id": "extract",
1701
- "kind": "analyze",
1702
- "serviceId": "knowx-extract",
1703
- "dependsOn": [
1704
- "index-snapshots"
1705
- ],
1706
- "inputs": [
1707
- {
1708
- "fromStep": "promote-content",
1709
- "key": "promote-content"
1710
- }
1711
- ]
1712
- },
1713
- {
1714
- "id": "write-knowx",
1715
- "kind": "write-record",
1716
- "contentType": "knowx",
1717
- "dependsOn": [
1718
- "extract"
1719
- ],
1720
- "inputs": [
1721
- {
1722
- "fromStep": "extract",
1723
- "key": "extract"
1724
- }
1725
- ]
1726
- },
1727
- {
1728
- "id": "index-knowx",
1729
- "kind": "analyze",
1730
- "serviceId": "knowx-retrieval-index",
1731
- "dependsOn": [
1732
- "write-knowx"
1733
- ],
1734
- "inputs": [
1735
- {
1736
- "fromStep": "extract",
1737
- "key": "extract"
1738
- },
1739
- {
1740
- "fromStep": "write-knowx",
1741
- "key": "write-knowx"
1742
- },
1743
- {
1744
- "fromStep": "promote-content",
1745
- "key": "promote-content"
1746
- }
1747
- ],
1748
- "notes": "POST /v1/candidates for associate + upsert knowx + re-touch snapshots."
1749
- },
1750
- {
1751
- "id": "nexum",
1752
- "kind": "analyze",
1753
- "serviceId": "knowx-nexum",
1754
- "dependsOn": [
1755
- "index-knowx"
1756
- ],
1757
- "inputs": [
1758
- {
1759
- "fromStep": "extract",
1760
- "key": "extract"
1761
- },
1762
- {
1763
- "fromStep": "write-knowx",
1764
- "key": "write-knowx"
1765
- },
1766
- {
1767
- "fromStep": "promote-content",
1768
- "key": "promote-content"
1769
- }
1770
- ],
1771
- "notes": "KnowX mapper POSTs Nexum analyze from promote + extract bags. Soft-skip when MEMORIX_NEXUM_URL unset; when set, remote failures hard-fail. write-graph persists proposedGraph."
1772
- },
1773
- {
1774
- "id": "write-graph",
1775
- "kind": "write-record",
1776
- "contentType": "snapshots",
1777
- "portConfig": {
1778
- "mode": "nexum"
124
+ "profile": { "allowSnapshotBuckets": false }
125
+ },
126
+ {
127
+ "id": "decisions",
128
+ "discriminator": {
129
+ "path": "data.decisionType",
130
+ "required": false,
131
+ "defaultValue": "priority"
1779
132
  },
1780
- "dependsOn": [
1781
- "nexum"
1782
- ],
1783
- "inputs": [
1784
- {
1785
- "fromStep": "nexum",
1786
- "key": "nexum"
1787
- }
1788
- ],
1789
- "notes": "mode nexum — create-or-update proposedGraph as content/snapshots."
1790
- },
1791
- {
1792
- "id": "associate-knowledge",
1793
- "kind": "analyze",
1794
- "serviceId": "knowx-associate-knowledge",
1795
- "dependsOn": [
1796
- "index-knowx",
1797
- "write-graph"
1798
- ],
1799
- "inputs": [
1800
- {
1801
- "fromStep": "extract",
1802
- "key": "extract"
1803
- },
1804
- {
1805
- "fromStep": "write-knowx",
1806
- "key": "write-knowx"
1807
- },
1808
- {
1809
- "fromStep": "index-knowx",
1810
- "key": "index-knowx"
1811
- }
1812
- ]
1813
- },
1814
- {
1815
- "id": "write-knowledge-links",
1816
- "kind": "relationship-write",
1817
- "dependsOn": [
1818
- "associate-knowledge"
1819
- ],
1820
- "inputs": [
1821
- {
1822
- "fromStep": "associate-knowledge",
1823
- "key": "associate-knowledge"
1824
- }
1825
- ],
1826
- "notes": "Consumes relationshipPlans including knowx-derived-from-content"
1827
- },
1828
- {
1829
- "id": "associate-entities",
1830
- "kind": "analyze",
1831
- "serviceId": "knowx-associate-entities",
1832
- "dependsOn": [
1833
- "write-knowledge-links"
1834
- ],
1835
- "inputs": [
1836
- {
1837
- "fromStep": "associate-knowledge",
1838
- "key": "associate-knowledge"
1839
- },
1840
- {
1841
- "fromStep": "extract",
1842
- "key": "extract"
1843
- }
1844
- ]
1845
- },
1846
- {
1847
- "id": "write-entity-links",
1848
- "kind": "relationship-write",
1849
- "dependsOn": [
1850
- "associate-entities"
1851
- ],
1852
- "inputs": [
1853
- {
1854
- "fromStep": "associate-entities",
1855
- "key": "associate-entities"
1856
- }
1857
- ],
1858
- "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
1859
- }
1860
- ]
1861
- }
1862
- ],
1863
- "schedules": [],
1864
- "kindDeclarations": [],
1865
- "extensions": {}
1866
- }
133
+ "profile": { "allowSnapshotBuckets": false }
134
+ },
135
+ {
136
+ "id": "workflow",
137
+ "profile": { "allowSnapshotBuckets": false }
138
+ },
139
+ {
140
+ "id": "context",
141
+ "retention": "work-scoped-ttl",
142
+ "profile": { "allowSnapshotBuckets": false }
143
+ },
144
+ {
145
+ "id": "relationships",
146
+ "profile": { "allowSnapshotBuckets": false }
147
+ },
148
+ {
149
+ "id": "knowx",
150
+ "notes": "KnowX NODE facet — provenance required in .data",
151
+ "profile": { "allowSnapshotBuckets": false }
152
+ }
153
+ ],
154
+ "snapshotBuckets": {
155
+ "analytics": "optional",
156
+ "enrichment": "optional",
157
+ "insights": "optional"
158
+ },
159
+ "fields": [
160
+ {
161
+ "path": "data.title",
162
+ "valueType": "string",
163
+ "contentType": "snapshots"
164
+ },
165
+ {
166
+ "path": "data.status",
167
+ "valueType": "string",
168
+ "contentType": "snapshots"
169
+ },
170
+ {
171
+ "path": "data.priority",
172
+ "valueType": "string",
173
+ "contentType": "snapshots"
174
+ },
175
+ {
176
+ "path": "data.assigneeId",
177
+ "valueType": "recordId",
178
+ "contentType": "snapshots",
179
+ "refersTo": {
180
+ "objectType": "people"
181
+ }
182
+ }
183
+ ]
184
+ },
185
+ {
186
+ "id": "content",
187
+ "name": "Content",
188
+ "dataCategory": "knowledge",
189
+ "abstractTypes": [
190
+ "Content"
191
+ ],
192
+ "notes": "Ingested documents (raw/snapshots) plus free-floating KnowX knowledge items (knowx NODE/EDGE with own recordId). Nexum apply-plan records use nexum-* object types. Entity NODE facets stay on people/work-items.",
193
+ "contentTypes": [
194
+ {
195
+ "id": "raw",
196
+ "required": true,
197
+ "requiredReason": "Exact provider-native land from knowx-folder / knowx-rest connectors; ingest identity depends on it.",
198
+ "notes": "Exact provider-native land from knowx-folder / knowx-rest connectors",
199
+ "profile": { "allowSnapshotBuckets": false }
200
+ },
201
+ {
202
+ "id": "snapshots",
203
+ "required": false,
204
+ "notes": "Promoted Markdown ContentRecordData via knowx-promote-content (or knowledge-pull promote)",
205
+ "profile": { "allowSnapshotBuckets": true }
206
+ },
207
+ {
208
+ "id": "knowx",
209
+ "notes": "Knowledge item payloads — data.kind NODE|EDGE (topology); data.identity.category claim|fact|opinion|assumption (AI classifier, orthogonal to kind); data.epistemic.state is review standing (≠ identity.category); provenance mandatory. EDGE and content-derived items use their own recordId.",
210
+ "profile": { "allowSnapshotBuckets": false }
211
+ },
212
+ {
213
+ "id": "nexum",
214
+ "required": false,
215
+ "notes": "Optional Nexum snapshot facet; durable apply-plan kinds use nexum-* object types",
216
+ "profile": { "allowSnapshotBuckets": false }
217
+ },
218
+ {
219
+ "id": "workflow",
220
+ "notes": "Human review assignment sibling for knowledge items",
221
+ "profile": { "allowSnapshotBuckets": false }
222
+ },
223
+ {
224
+ "id": "confirmations",
225
+ "notes": "Accept/reject decision sibling for knowledge items",
226
+ "profile": { "allowSnapshotBuckets": false }
227
+ },
228
+ {
229
+ "id": "relationships",
230
+ "notes": "Content↔Knowledge lineage and knowledge links",
231
+ "profile": { "allowSnapshotBuckets": false }
232
+ }
233
+ ],
234
+ "fields": [
235
+ {
236
+ "path": "data.title",
237
+ "valueType": "string",
238
+ "contentType": "raw"
239
+ },
240
+ {
241
+ "path": "data.markdown",
242
+ "valueType": "string",
243
+ "contentType": "raw"
244
+ },
245
+ {
246
+ "path": "data.contentHash",
247
+ "valueType": "string",
248
+ "contentType": "raw"
249
+ },
250
+ {
251
+ "path": "data.sourceFormat",
252
+ "valueType": "string",
253
+ "contentType": "raw"
254
+ },
255
+ {
256
+ "path": "data.sourceMediaType",
257
+ "valueType": "string",
258
+ "contentType": "raw"
259
+ },
260
+ {
261
+ "path": "data.byteSize",
262
+ "valueType": "number",
263
+ "contentType": "raw"
264
+ },
265
+ {
266
+ "path": "data.language",
267
+ "valueType": "string",
268
+ "contentType": "raw"
269
+ },
270
+ {
271
+ "path": "data.state",
272
+ "valueType": "string",
273
+ "contentType": "raw"
274
+ },
275
+ {
276
+ "path": "data.revision",
277
+ "valueType": "number",
278
+ "contentType": "raw"
279
+ },
280
+ {
281
+ "path": "data.extraction.extractorId",
282
+ "valueType": "string",
283
+ "contentType": "raw"
284
+ },
285
+ {
286
+ "path": "data.extraction.extractorVersion",
287
+ "valueType": "string",
288
+ "contentType": "raw"
289
+ },
290
+ {
291
+ "path": "data.extraction.extractedAt",
292
+ "valueType": "datetime",
293
+ "contentType": "raw"
294
+ },
295
+ {
296
+ "path": "data.origins",
297
+ "valueType": "array",
298
+ "contentType": "raw"
299
+ },
300
+ {
301
+ "path": "data.nav.derivedKnowledge",
302
+ "valueType": "array",
303
+ "contentType": "relationships"
304
+ }
305
+ ]
306
+ }
307
+ ],
308
+ "abstractTypes": [
309
+ {
310
+ "id": "People",
311
+ "name": "People",
312
+ "meaning": "People who perform operational work — inside the org (employeeId) or outside (externalPersonId), distinguished by identity kind",
313
+ "category": "entity",
314
+ "properties": [
315
+ {
316
+ "id": "title",
317
+ "valueType": "string",
318
+ "required": true
319
+ },
320
+ {
321
+ "id": "role",
322
+ "valueType": "string",
323
+ "required": true
324
+ },
325
+ {
326
+ "id": "lens",
327
+ "valueType": "string",
328
+ "required": false
329
+ },
330
+ {
331
+ "id": "email",
332
+ "valueType": "string",
333
+ "required": false
334
+ },
335
+ {
336
+ "id": "organization",
337
+ "valueType": "string",
338
+ "required": false
339
+ },
340
+ {
341
+ "id": "contentEdgesFrom",
342
+ "valueType": "array",
343
+ "required": false
344
+ }
345
+ ],
346
+ "members": [
347
+ {
348
+ "objectType": "people",
349
+ "contentType": "snapshots",
350
+ "properties": [
351
+ {
352
+ "abstractProperty": "title",
353
+ "contentType": "snapshots",
354
+ "propertyPath": "data.title",
355
+ "concreteValueType": "string"
356
+ },
357
+ {
358
+ "abstractProperty": "role",
359
+ "contentType": "snapshots",
360
+ "propertyPath": "data.role",
361
+ "concreteValueType": "string"
362
+ },
363
+ {
364
+ "abstractProperty": "lens",
365
+ "contentType": "snapshots",
366
+ "propertyPath": "data.lens",
367
+ "concreteValueType": "string"
368
+ },
369
+ {
370
+ "abstractProperty": "email",
371
+ "contentType": "snapshots",
372
+ "propertyPath": "data.email",
373
+ "concreteValueType": "string"
374
+ },
375
+ {
376
+ "abstractProperty": "organization",
377
+ "contentType": "snapshots",
378
+ "propertyPath": "data.organization",
379
+ "concreteValueType": "string"
380
+ },
381
+ {
382
+ "abstractProperty": "contentEdgesFrom",
383
+ "contentType": "relationships",
384
+ "propertyPath": "data.nav.contentEdgesFrom"
385
+ }
386
+ ]
387
+ }
388
+ ],
389
+ "union": false,
390
+ "notes": "People abstract ↔ people OT 1:1. Identity kind employeeId | externalPersonId distinguishes inside/outside org."
391
+ },
392
+ {
393
+ "id": "WorkItems",
394
+ "name": "Work Items",
395
+ "meaning": "Units of operational work",
396
+ "category": "entity",
397
+ "properties": [
398
+ {
399
+ "id": "title",
400
+ "valueType": "string",
401
+ "required": true
402
+ },
403
+ {
404
+ "id": "status",
405
+ "valueType": "string",
406
+ "required": true
407
+ },
408
+ {
409
+ "id": "priority",
410
+ "valueType": "string",
411
+ "required": false
412
+ },
413
+ {
414
+ "id": "contentEdgesTo",
415
+ "valueType": "array",
416
+ "required": false
417
+ }
418
+ ],
419
+ "members": [
420
+ {
421
+ "objectType": "work-items",
422
+ "contentType": "snapshots",
423
+ "properties": [
424
+ {
425
+ "abstractProperty": "title",
426
+ "contentType": "snapshots",
427
+ "propertyPath": "data.title",
428
+ "concreteValueType": "string"
429
+ },
430
+ {
431
+ "abstractProperty": "status",
432
+ "contentType": "snapshots",
433
+ "propertyPath": "data.status",
434
+ "concreteValueType": "string"
435
+ },
436
+ {
437
+ "abstractProperty": "priority",
438
+ "contentType": "snapshots",
439
+ "propertyPath": "data.priority",
440
+ "concreteValueType": "string"
441
+ },
442
+ {
443
+ "abstractProperty": "contentEdgesTo",
444
+ "contentType": "relationships",
445
+ "propertyPath": "data.nav.contentEdgesTo"
446
+ }
447
+ ]
448
+ }
449
+ ],
450
+ "union": false
451
+ },
452
+ {
453
+ "id": "Content",
454
+ "name": "Content",
455
+ "meaning": "Canonical ingested documents and derived knowledge items (Markdown + provenance). Knowledge claims are derived from content; content is the source of claims, not the claims themselves.",
456
+ "category": "knowledge",
457
+ "properties": [
458
+ {
459
+ "id": "title",
460
+ "valueType": "string",
461
+ "required": false
462
+ },
463
+ {
464
+ "id": "markdown",
465
+ "valueType": "string",
466
+ "required": true
467
+ },
468
+ {
469
+ "id": "contentHash",
470
+ "valueType": "string",
471
+ "required": true
472
+ },
473
+ {
474
+ "id": "sourceFormat",
475
+ "valueType": "string",
476
+ "required": true
477
+ },
478
+ {
479
+ "id": "sourceMediaType",
480
+ "valueType": "string",
481
+ "required": true
482
+ },
483
+ {
484
+ "id": "byteSize",
485
+ "valueType": "number",
486
+ "required": true
487
+ },
488
+ {
489
+ "id": "language",
490
+ "valueType": "string",
491
+ "required": false
492
+ },
493
+ {
494
+ "id": "state",
495
+ "valueType": "string",
496
+ "required": true
497
+ },
498
+ {
499
+ "id": "revision",
500
+ "valueType": "number",
501
+ "required": true
502
+ },
503
+ {
504
+ "id": "extractorId",
505
+ "valueType": "string",
506
+ "required": false
507
+ },
508
+ {
509
+ "id": "extractorVersion",
510
+ "valueType": "string",
511
+ "required": false
512
+ },
513
+ {
514
+ "id": "extractedAt",
515
+ "valueType": "datetime",
516
+ "required": false
517
+ },
518
+ {
519
+ "id": "origins",
520
+ "valueType": "array",
521
+ "required": false
522
+ },
523
+ {
524
+ "id": "derivedKnowledge",
525
+ "valueType": "array",
526
+ "required": false
527
+ },
528
+ {
529
+ "id": "sameAs",
530
+ "valueType": "array",
531
+ "required": false
532
+ },
533
+ {
534
+ "id": "supports",
535
+ "valueType": "array",
536
+ "required": false
537
+ },
538
+ {
539
+ "id": "supportedBy",
540
+ "valueType": "array",
541
+ "required": false
542
+ },
543
+ {
544
+ "id": "contradicts",
545
+ "valueType": "array",
546
+ "required": false
547
+ },
548
+ {
549
+ "id": "contradictedBy",
550
+ "valueType": "array",
551
+ "required": false
552
+ },
553
+ {
554
+ "id": "derivedFrom",
555
+ "valueType": "array",
556
+ "required": false
557
+ },
558
+ {
559
+ "id": "derivedClaims",
560
+ "valueType": "array",
561
+ "required": false
562
+ },
563
+ {
564
+ "id": "derivedFromContent",
565
+ "valueType": "array",
566
+ "required": false
567
+ },
568
+ {
569
+ "id": "edgeFrom",
570
+ "valueType": "array",
571
+ "required": false
572
+ },
573
+ {
574
+ "id": "edgeTo",
575
+ "valueType": "array",
576
+ "required": false
577
+ }
578
+ ],
579
+ "members": [
580
+ {
581
+ "objectType": "content",
582
+ "contentType": "raw",
583
+ "properties": [
584
+ {
585
+ "abstractProperty": "title",
586
+ "contentType": "raw",
587
+ "propertyPath": "data.title"
588
+ },
589
+ {
590
+ "abstractProperty": "markdown",
591
+ "contentType": "raw",
592
+ "propertyPath": "data.markdown"
593
+ },
594
+ {
595
+ "abstractProperty": "contentHash",
596
+ "contentType": "raw",
597
+ "propertyPath": "data.contentHash"
598
+ },
599
+ {
600
+ "abstractProperty": "sourceFormat",
601
+ "contentType": "raw",
602
+ "propertyPath": "data.sourceFormat"
603
+ },
604
+ {
605
+ "abstractProperty": "sourceMediaType",
606
+ "contentType": "raw",
607
+ "propertyPath": "data.sourceMediaType"
608
+ },
609
+ {
610
+ "abstractProperty": "byteSize",
611
+ "contentType": "raw",
612
+ "propertyPath": "data.byteSize"
613
+ },
614
+ {
615
+ "abstractProperty": "language",
616
+ "contentType": "raw",
617
+ "propertyPath": "data.language"
618
+ },
619
+ {
620
+ "abstractProperty": "state",
621
+ "contentType": "raw",
622
+ "propertyPath": "data.state"
623
+ },
624
+ {
625
+ "abstractProperty": "revision",
626
+ "contentType": "raw",
627
+ "propertyPath": "data.revision"
628
+ },
629
+ {
630
+ "abstractProperty": "extractorId",
631
+ "contentType": "raw",
632
+ "propertyPath": "data.extraction.extractorId"
633
+ },
634
+ {
635
+ "abstractProperty": "extractorVersion",
636
+ "contentType": "raw",
637
+ "propertyPath": "data.extraction.extractorVersion"
638
+ },
639
+ {
640
+ "abstractProperty": "extractedAt",
641
+ "contentType": "raw",
642
+ "propertyPath": "data.extraction.extractedAt"
643
+ },
644
+ {
645
+ "abstractProperty": "origins",
646
+ "contentType": "raw",
647
+ "propertyPath": "data.origins"
648
+ },
649
+ {
650
+ "abstractProperty": "derivedKnowledge",
651
+ "contentType": "relationships",
652
+ "propertyPath": "data.nav.derivedKnowledge"
653
+ },
654
+ {
655
+ "abstractProperty": "sameAs",
656
+ "contentType": "relationships",
657
+ "propertyPath": "data.nav.sameAs"
658
+ },
659
+ {
660
+ "abstractProperty": "supports",
661
+ "contentType": "relationships",
662
+ "propertyPath": "data.nav.supports"
663
+ },
664
+ {
665
+ "abstractProperty": "supportedBy",
666
+ "contentType": "relationships",
667
+ "propertyPath": "data.nav.supportedBy"
668
+ },
669
+ {
670
+ "abstractProperty": "contradicts",
671
+ "contentType": "relationships",
672
+ "propertyPath": "data.nav.contradicts"
673
+ },
674
+ {
675
+ "abstractProperty": "contradictedBy",
676
+ "contentType": "relationships",
677
+ "propertyPath": "data.nav.contradictedBy"
678
+ },
679
+ {
680
+ "abstractProperty": "derivedFrom",
681
+ "contentType": "relationships",
682
+ "propertyPath": "data.nav.derivedFrom"
683
+ },
684
+ {
685
+ "abstractProperty": "derivedClaims",
686
+ "contentType": "relationships",
687
+ "propertyPath": "data.nav.derivedClaims"
688
+ },
689
+ {
690
+ "abstractProperty": "derivedFromContent",
691
+ "contentType": "relationships",
692
+ "propertyPath": "data.nav.derivedFromContent"
693
+ },
694
+ {
695
+ "abstractProperty": "edgeFrom",
696
+ "contentType": "relationships",
697
+ "propertyPath": "data.nav.edgeFrom"
698
+ },
699
+ {
700
+ "abstractProperty": "edgeTo",
701
+ "contentType": "relationships",
702
+ "propertyPath": "data.nav.edgeTo"
703
+ }
704
+ ]
705
+ }
706
+ ],
707
+ "union": false,
708
+ "notes": "Content abstract ↔ content OT. Domain noun — not product-branded. Documents (raw/snapshots) and derived knowledge items (knowx) share this abstract; writers always target concrete content types on the OT."
709
+ }
710
+ ],
711
+ "relationshipDefinitions": [
712
+ {
713
+ "id": "knowx-same-as",
714
+ "name": "Same as",
715
+ "meaning": "Two knowledge claims refer to the same underlying assertion",
716
+ "directionality": "undirected",
717
+ "from": {
718
+ "abstractType": "Content",
719
+ "path": "sameAs"
720
+ },
721
+ "to": {
722
+ "abstractType": "Content",
723
+ "path": "sameAs"
724
+ },
725
+ "discoveryRules": [
726
+ {
727
+ "id": "from-associate-plan",
728
+ "kind": "service-plan",
729
+ "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
730
+ }
731
+ ]
732
+ },
733
+ {
734
+ "id": "knowx-supports",
735
+ "name": "Supports",
736
+ "meaning": "One knowledge claim supports another",
737
+ "directionality": "directed",
738
+ "from": {
739
+ "abstractType": "Content",
740
+ "path": "supports"
741
+ },
742
+ "to": {
743
+ "abstractType": "Content",
744
+ "path": "supportedBy"
745
+ },
746
+ "discoveryRules": [
747
+ {
748
+ "id": "from-associate-plan",
749
+ "kind": "service-plan",
750
+ "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
751
+ }
752
+ ]
753
+ },
754
+ {
755
+ "id": "knowx-contradicts",
756
+ "name": "Contradicts",
757
+ "meaning": "Two knowledge claims contradict each other",
758
+ "directionality": "directed",
759
+ "from": {
760
+ "abstractType": "Content",
761
+ "path": "contradicts"
762
+ },
763
+ "to": {
764
+ "abstractType": "Content",
765
+ "path": "contradictedBy"
766
+ },
767
+ "discoveryRules": [
768
+ {
769
+ "id": "from-associate-plan",
770
+ "kind": "service-plan",
771
+ "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
772
+ }
773
+ ]
774
+ },
775
+ {
776
+ "id": "knowx-derived-from",
777
+ "name": "Derived from claim",
778
+ "meaning": "A knowledge claim is derived from another knowledge claim",
779
+ "directionality": "directed",
780
+ "from": {
781
+ "abstractType": "Content",
782
+ "path": "derivedFrom"
783
+ },
784
+ "to": {
785
+ "abstractType": "Content",
786
+ "path": "derivedClaims"
787
+ },
788
+ "discoveryRules": [
789
+ {
790
+ "id": "from-associate-plan",
791
+ "kind": "service-plan",
792
+ "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
793
+ }
794
+ ]
795
+ },
796
+ {
797
+ "id": "knowx-derived-from-content",
798
+ "name": "Derived from content",
799
+ "meaning": "A knowledge claim is derived from ingested content",
800
+ "directionality": "directed",
801
+ "from": {
802
+ "abstractType": "Content",
803
+ "path": "derivedFromContent"
804
+ },
805
+ "to": {
806
+ "abstractType": "Content",
807
+ "path": "derivedKnowledge"
808
+ },
809
+ "discoveryRules": [
810
+ {
811
+ "id": "from-associate-plan",
812
+ "kind": "service-plan",
813
+ "notes": "Materialized from knowx-associate-knowledge when provenance.lineage.sourceContentId is present"
814
+ }
815
+ ]
816
+ },
817
+ {
818
+ "id": "knowx-edge-from",
819
+ "name": "Edge from",
820
+ "meaning": "A knowledge EDGE claim starts at an entity",
821
+ "directionality": "directed",
822
+ "from": {
823
+ "abstractType": "Content",
824
+ "path": "edgeFrom"
825
+ },
826
+ "to": {
827
+ "abstractType": "People",
828
+ "path": "contentEdgesFrom"
829
+ },
830
+ "discoveryRules": [
831
+ {
832
+ "id": "from-associate-entities-plan",
833
+ "kind": "service-plan",
834
+ "notes": "Materialized from knowx-associate-entities entityRelationshipPlans"
835
+ }
836
+ ]
837
+ },
838
+ {
839
+ "id": "knowx-edge-to",
840
+ "name": "Edge to",
841
+ "meaning": "A knowledge EDGE claim ends at an entity",
842
+ "directionality": "directed",
843
+ "from": {
844
+ "abstractType": "Content",
845
+ "path": "edgeTo"
846
+ },
847
+ "to": {
848
+ "abstractType": "WorkItems",
849
+ "path": "contentEdgesTo"
850
+ },
851
+ "discoveryRules": [
852
+ {
853
+ "id": "from-associate-entities-plan",
854
+ "kind": "service-plan",
855
+ "notes": "Materialized from knowx-associate-entities entityRelationshipPlans"
856
+ }
857
+ ]
858
+ }
859
+ ],
860
+ "mappings": [],
861
+ "views": [],
862
+ "writes": [],
863
+ "sources": [
864
+ {
865
+ "id": "knowx-source",
866
+ "name": "Knowledge source",
867
+ "kind": "rest",
868
+ "baseUrlEnv": "KNOWX_SOURCE_URL",
869
+ "defaultBaseUrl": "http://127.0.0.1:5104",
870
+ "credentialRef": "knowx-source-local",
871
+ "connectorRef": "knowx-rest",
872
+ "endpoints": [
873
+ "/content"
874
+ ],
875
+ "pagination": {
876
+ "style": "cursor",
877
+ "defaultPageSize": 50
878
+ },
879
+ "streams": [
880
+ {
881
+ "streamId": "content",
882
+ "endpoint": "/content",
883
+ "objectType": "content",
884
+ "dataCategory": "knowledge",
885
+ "identityPath": "id",
886
+ "modes": [
887
+ "knowledge"
888
+ ],
889
+ "pageSize": 10,
890
+ "checkpoint": {
891
+ "method": "cursor"
892
+ }
893
+ }
894
+ ],
895
+ "routes": [
896
+ {
897
+ "endpoint": "/content",
898
+ "objectType": "content",
899
+ "dataCategory": "knowledge",
900
+ "identityPath": "id",
901
+ "primaryKind": "contentId",
902
+ "modes": [
903
+ "knowledge"
904
+ ],
905
+ "pageSize": 10,
906
+ "checkpoint": {
907
+ "method": "cursor"
908
+ }
909
+ }
910
+ ]
911
+ },
912
+ {
913
+ "id": "knowx-managed",
914
+ "name": "Knowledge Drive (managed)",
915
+ "kind": "knowx-managed",
916
+ "connectorRef": "knowx-managed",
917
+ "endpoints": [
918
+ "/items"
919
+ ],
920
+ "pagination": {
921
+ "style": "page",
922
+ "defaultPageSize": 25
923
+ },
924
+ "streams": [
925
+ {
926
+ "streamId": "items",
927
+ "endpoint": "/items",
928
+ "objectType": "content",
929
+ "dataCategory": "knowledge",
930
+ "identityPath": "id",
931
+ "modes": [
932
+ "knowledge"
933
+ ],
934
+ "pageSize": 25,
935
+ "checkpoint": {
936
+ "method": "cursor"
937
+ }
938
+ }
939
+ ],
940
+ "routes": [
941
+ {
942
+ "endpoint": "/items",
943
+ "objectType": "content",
944
+ "dataCategory": "knowledge",
945
+ "identityPath": "id",
946
+ "primaryKind": "contentId",
947
+ "modes": [
948
+ "knowledge"
949
+ ],
950
+ "pageSize": 25,
951
+ "checkpoint": {
952
+ "method": "cursor"
953
+ }
954
+ }
955
+ ]
956
+ }
957
+ ],
958
+ "services": [
959
+ {
960
+ "id": "knowx-folder-pull",
961
+ "name": "Folder connector pull",
962
+ "description": "Runs the remote-hosted knowx-folder defineConnector (collectStream + fullScanHash). Lands exact file raw only — does not extract Markdown or derive knowledge. Connector-adjacent worker — not agent vocabulary.",
963
+ "role": "connector",
964
+ "capabilities": [
965
+ "analyze"
966
+ ],
967
+ "memorixAccess": [
968
+ "raw",
969
+ "checkpoints"
970
+ ],
971
+ "inputs": [
972
+ {
973
+ "id": "sourceId",
974
+ "control": true,
975
+ "description": "Managed folder ContentSource id"
976
+ },
977
+ {
978
+ "id": "relativePath",
979
+ "control": true,
980
+ "description": "Optional single relative path for targeted ingest"
981
+ },
982
+ {
983
+ "id": "triggerReason",
984
+ "control": true,
985
+ "description": "manual | scheduled | watch | delete"
986
+ }
987
+ ],
988
+ "outputs": [
989
+ {
990
+ "id": "pullSummary",
991
+ "control": true,
992
+ "description": "Pull status, discovered counts, rawItemIds"
993
+ },
994
+ {
995
+ "id": "rawItemIds",
996
+ "control": true,
997
+ "description": "Relative-path identities landed as content/raw"
998
+ }
999
+ ],
1000
+ "invocation": {
1001
+ "kind": "worker",
1002
+ "operation": "knowx-folder-pull"
1003
+ }
1004
+ },
1005
+ {
1006
+ "id": "knowx-managed-pull",
1007
+ "name": "Managed drive pull",
1008
+ "description": "Runs the remote-hosted knowx-managed defineConnector over managed upload events / item versions. Lands exact bytes as content/raw via collectStream. Connector-adjacent worker — not agent vocabulary.",
1009
+ "role": "connector",
1010
+ "capabilities": [
1011
+ "analyze"
1012
+ ],
1013
+ "memorixAccess": [
1014
+ "raw",
1015
+ "checkpoints"
1016
+ ],
1017
+ "inputs": [
1018
+ {
1019
+ "id": "itemIds",
1020
+ "control": true,
1021
+ "description": "Managed Knowledge Drive item ids to pull"
1022
+ },
1023
+ {
1024
+ "id": "eventCursor",
1025
+ "control": true,
1026
+ "description": "Optional managed event cursor"
1027
+ }
1028
+ ],
1029
+ "outputs": [
1030
+ {
1031
+ "id": "pullSummary",
1032
+ "control": true,
1033
+ "description": "Pull status and counts"
1034
+ },
1035
+ {
1036
+ "id": "rawItemIds",
1037
+ "control": true,
1038
+ "description": "Managed item identities landed as content/raw"
1039
+ }
1040
+ ],
1041
+ "invocation": {
1042
+ "kind": "worker",
1043
+ "operation": "knowx-managed-pull"
1044
+ }
1045
+ },
1046
+ {
1047
+ "id": "knowx-promote-content",
1048
+ "name": "Promote content",
1049
+ "description": "Reads landed content/raw file envelopes, runs format→Markdown extractors, writes Content snapshots. Connector-pipeline step — promotes concrete raw onto the Content abstract member.",
1050
+ "role": "connector",
1051
+ "capabilities": [
1052
+ "analyze"
1053
+ ],
1054
+ "memorixAccess": [
1055
+ "raw",
1056
+ "explore"
1057
+ ],
1058
+ "inputs": [
1059
+ {
1060
+ "id": "sourceId",
1061
+ "control": true,
1062
+ "description": "Managed folder source id"
1063
+ },
1064
+ {
1065
+ "id": "rawItemIds",
1066
+ "control": true,
1067
+ "description": "Raw identities from knowx-folder-pull"
1068
+ },
1069
+ {
1070
+ "id": "pullSummary",
1071
+ "control": true,
1072
+ "description": "Optional pull summary carrying rawItemIds"
1073
+ }
1074
+ ],
1075
+ "outputs": [
1076
+ {
1077
+ "id": "contentDrafts",
1078
+ "abstractType": "Content",
1079
+ "description": "Canonical ContentRecordData drafts on Content"
1080
+ },
1081
+ {
1082
+ "id": "contentIds",
1083
+ "abstractType": "Content",
1084
+ "description": "Promoted Content record ids"
1085
+ }
1086
+ ],
1087
+ "invocation": {
1088
+ "kind": "worker",
1089
+ "operation": "knowx-promote-content"
1090
+ }
1091
+ },
1092
+ {
1093
+ "id": "knowx-extract",
1094
+ "name": "Extract knowledge",
1095
+ "description": "Extract NODE/EDGE knowledge-item drafts from Content (text + knowledge source, or promoted content). Each draft includes data.identity.category (claim|fact|opinion|assumption). Returns drafts only — does not persist. Pipeline write-record applies knowx content. When aiService is bound and AI_SKILLS_URL is set, Memorix invokes Catalox skill knowx.extract via ai-services/1. Fallback: pack worker; test-only KNOWX_AI_SIM=1 routes to APS AI sim (:5112).",
1096
+ "role": "agent",
1097
+ "capabilities": [
1098
+ "analyze"
1099
+ ],
1100
+ "memorixAccess": [
1101
+ "explore"
1102
+ ],
1103
+ "inputs": [
1104
+ {
1105
+ "id": "text",
1106
+ "control": true,
1107
+ "description": "Input text to analyze (inline string or resolved from Content)"
1108
+ },
1109
+ {
1110
+ "id": "knowledgeSource",
1111
+ "abstractType": "Content",
1112
+ "description": "Exact source bytes / provenance envelope for Content"
1113
+ },
1114
+ {
1115
+ "id": "contentId",
1116
+ "abstractType": "Content",
1117
+ "description": "Promoted Content record id — open via Explore"
1118
+ },
1119
+ {
1120
+ "id": "contentIds",
1121
+ "abstractType": "Content",
1122
+ "description": "Batch of promoted Content ids"
1123
+ },
1124
+ {
1125
+ "id": "contentDrafts",
1126
+ "abstractType": "Content",
1127
+ "description": "In-pipeline ContentRecordData from knowx-promote-content"
1128
+ }
1129
+ ],
1130
+ "outputs": [
1131
+ {
1132
+ "id": "knowxDrafts",
1133
+ "abstractType": "Content",
1134
+ "description": "Array of knowx knowledge-item drafts (NODE/EDGE + data.identity.category claim|fact|opinion|assumption) with mandatory provenance and content lineage"
1135
+ }
1136
+ ],
1137
+ "aiService": {
1138
+ "aiServiceType": "skill",
1139
+ "itemId": "knowx.extract",
1140
+ "endpointEnv": "AI_SKILLS_URL"
1141
+ },
1142
+ "invocation": {
1143
+ "kind": "worker",
1144
+ "operation": "knowx-extract",
1145
+ "endpointEnv": "KNOWX_EXTRACT_WORKER_URL",
1146
+ "notes": "Worker fallback when AI_SKILLS_URL unset / compile cannot resolve skill origin. KNOWX_EXTRACT_WORKER_URL honored only when KNOWX_AI_SIM=1 (test-only)."
1147
+ }
1148
+ },
1149
+ {
1150
+ "id": "knowx-retrieval-index",
1151
+ "name": "Index / candidates (candidate-retrieval)",
1152
+ "description": "Companion step for @x12i/candidate-retrival-service (MEMORIX_RETRIEVAL_URL, default local :6560). (1) POST /v1/candidates for open knowx drafts so associate sees corpus-scale priors, (2) POST /v1/index/upsert for knowx drafts (knowx.knowledge) and Content snapshots (knowx.snapshot). Soft-skips only when URL unset; when URL is set, remote failures hard-fail the step — associate then receives real CRS priors.",
1153
+ "role": "agent",
1154
+ "capabilities": [
1155
+ "analyze"
1156
+ ],
1157
+ "memorixAccess": [],
1158
+ "inputs": [
1159
+ {
1160
+ "id": "knowxDrafts",
1161
+ "abstractType": "Content",
1162
+ "description": "Drafts from knowx-extract / write path (candidates + upsert)"
1163
+ },
1164
+ {
1165
+ "id": "contentDrafts",
1166
+ "abstractType": "Content",
1167
+ "description": "Optional Content snapshot drafts from knowx-promote-content (knowx.snapshot upsert)"
1168
+ },
1169
+ {
1170
+ "id": "fetchCandidates",
1171
+ "control": true,
1172
+ "description": "When false, index only (no /v1/candidates). Default true when knowxDrafts present."
1173
+ }
1174
+ ],
1175
+ "outputs": [
1176
+ {
1177
+ "id": "existingKnowx",
1178
+ "abstractType": "Content",
1179
+ "description": "Ranked prior knowx from /v1/candidates for associate (self-ids excluded)"
1180
+ },
1181
+ {
1182
+ "id": "retrieval",
1183
+ "control": true,
1184
+ "description": "enabled / upserted / warnings for ops"
1185
+ },
1186
+ {
1187
+ "id": "indexedRecordIds",
1188
+ "control": true,
1189
+ "description": "recordId / contentId list submitted for upsert"
1190
+ }
1191
+ ],
1192
+ "invocation": {
1193
+ "kind": "worker",
1194
+ "operation": "knowx-retrieval-index",
1195
+ "notes": "Requires MEMORIX_RETRIEVAL_URL (or CANDIDATE_RETRIEVAL_URL) pointing at the candidate-retrieval companion."
1196
+ }
1197
+ },
1198
+ {
1199
+ "id": "knowx-nexum",
1200
+ "name": "Knowledge graph analyze (Nexum)",
1201
+ "description": "KnowX control-plane adapter for @x12i/nexum (MEMORIX_NEXUM_URL, default local :7500). Maps KnowX pipeline bags (extract/promote/write) to Nexum items[], POSTs memorix-capability/1 analyze (serviceId nexum), returns proposedGraph. Soft-skips only when URL unset; when URL is set (or MEMORIX_NEXUM_REQUIRED=1), companion failures hard-fail. Persistence is platform write-record mode nexum after this step. Explore view: createKnowxNexumExploreClient (NEXUM_API_URL · :8080).",
1202
+ "role": "agent",
1203
+ "capabilities": [
1204
+ "analyze"
1205
+ ],
1206
+ "memorixAccess": [],
1207
+ "inputs": [
1208
+ {
1209
+ "id": "knowxDrafts",
1210
+ "abstractType": "Content",
1211
+ "description": "Drafts from knowx-extract / write path (structured items for Nexum)"
1212
+ },
1213
+ {
1214
+ "id": "contentDrafts",
1215
+ "abstractType": "Content",
1216
+ "description": "Optional Content snapshot drafts from knowx-promote-content"
1217
+ }
1218
+ ],
1219
+ "outputs": [
1220
+ {
1221
+ "id": "apply-plan",
1222
+ "control": true,
1223
+ "description": "x12i-nexum/1 replace-contribution / remove-contribution apply plan (not applied by this step)"
1224
+ },
1225
+ {
1226
+ "id": "nexum",
1227
+ "control": true,
1228
+ "description": "enabled / itemCount / warnings for ops"
1229
+ },
1230
+ {
1231
+ "id": "diagnostics",
1232
+ "control": true,
1233
+ "description": "Remote worker diagnostics"
1234
+ }
1235
+ ],
1236
+ "invocation": {
1237
+ "kind": "worker",
1238
+ "operation": "analyze",
1239
+ "notes": "KnowX control-plane adapter (serviceId knowx-nexum — not nexum). Maps bags then POSTs to nexum-worker via MEMORIX_NEXUM_URL (alias NEXUM_URL). Compile must not treat this id as serviceId nexum. Explore REST uses MEMORIX_NEXUM_READ_URL + createKnowxNexumExploreClient."
1240
+ }
1241
+ },
1242
+ {
1243
+ "id": "knowx-associate-knowledge",
1244
+ "name": "Associate knowledge",
1245
+ "description": "Classify extracted drafts against existing Content scope: known, novel, contradicts. Prefer existingKnowx from knowx-retrieval-index (/v1/candidates). When aiService is bound, Memorix invokes Catalox skill knowx.associate-knowledge and may also push explore/catalog. Worker fallback uses pushed existingKnowx or Explore list. Returns classification buckets + candidate knowledge relationship plans. Does not persist.",
1246
+ "role": "agent",
1247
+ "capabilities": [
1248
+ "analyze"
1249
+ ],
1250
+ "memorixAccess": [
1251
+ "explore"
1252
+ ],
1253
+ "inputs": [
1254
+ {
1255
+ "id": "knowxDrafts",
1256
+ "abstractType": "Content",
1257
+ "description": "Drafts from knowx-extract"
1258
+ },
1259
+ {
1260
+ "id": "existingKnowx",
1261
+ "abstractType": "Content",
1262
+ "description": "Optional: pipeline output from knowx-retrieval-index, fixtures, or Explore push"
1263
+ }
1264
+ ],
1265
+ "outputs": [
1266
+ {
1267
+ "id": "classification",
1268
+ "abstractType": "Content",
1269
+ "description": "known / novel / contradicts buckets"
1270
+ },
1271
+ {
1272
+ "id": "relationshipPlans",
1273
+ "abstractType": "Content",
1274
+ "description": "Candidate knowledge relationship plans on Content"
1275
+ }
1276
+ ],
1277
+ "aiService": {
1278
+ "aiServiceType": "skill",
1279
+ "itemId": "knowx.associate-knowledge",
1280
+ "endpointEnv": "AI_SKILLS_URL"
1281
+ },
1282
+ "invocation": {
1283
+ "kind": "worker",
1284
+ "operation": "knowx-associate-knowledge",
1285
+ "notes": "Worker fallback when AI_SKILLS_URL unset / compile cannot resolve skill origin."
1286
+ }
1287
+ },
1288
+ {
1289
+ "id": "knowx-associate-entities",
1290
+ "name": "Associate entities",
1291
+ "description": "Plan EDGE endpoint relationships for novel drafts against entity abstracts (People, WorkItems) and Content. Does not persist.",
1292
+ "role": "agent",
1293
+ "capabilities": [
1294
+ "analyze"
1295
+ ],
1296
+ "memorixAccess": [
1297
+ "explore"
1298
+ ],
1299
+ "inputs": [
1300
+ {
1301
+ "id": "novelDrafts",
1302
+ "abstractType": "Content",
1303
+ "description": "Novel drafts from associate-knowledge classification"
1304
+ }
1305
+ ],
1306
+ "outputs": [
1307
+ {
1308
+ "id": "entityRelationshipPlans",
1309
+ "abstractType": "People",
1310
+ "description": "EDGE endpoint relationship plans toward People, WorkItems, and Content abstracts"
1311
+ }
1312
+ ],
1313
+ "invocation": {
1314
+ "kind": "worker",
1315
+ "operation": "knowx-associate-entities"
1316
+ }
1317
+ }
1318
+ ],
1319
+ "pipelines": [
1320
+ {
1321
+ "id": "knowx-knowledge-pull",
1322
+ "name": "Scheduled knowledge pull from knowx-source",
1323
+ "trigger": "scheduled",
1324
+ "mode": "knowledge",
1325
+ "description": "Memory pull from knowx-source fixture (CF knowx-rest). Promote/extract are separate pipelines.",
1326
+ "steps": [
1327
+ {
1328
+ "id": "pull",
1329
+ "kind": "memory-pull",
1330
+ "sourceId": "knowx-source"
1331
+ }
1332
+ ]
1333
+ },
1334
+ {
1335
+ "id": "knowx-ingest-associate",
1336
+ "name": "Ingest then associate knowledge and entities",
1337
+ "trigger": "explicit",
1338
+ "description": "extract → write knowx → retrieval-index (candidate-retrieval upsert + candidates) → nexum (proposedGraph) → write-graph (mode nexum persist) → associate-knowledge → relationship-write → associate-entities → relationship-write. Services do not persist; write-record and relationship-write do.",
1339
+ "steps": [
1340
+ {
1341
+ "id": "extract",
1342
+ "kind": "analyze",
1343
+ "serviceId": "knowx-extract"
1344
+ },
1345
+ {
1346
+ "id": "write-knowx",
1347
+ "kind": "write-record",
1348
+ "contentType": "knowx",
1349
+ "dependsOn": [
1350
+ "extract"
1351
+ ],
1352
+ "inputs": [
1353
+ {
1354
+ "fromStep": "extract",
1355
+ "key": "extract"
1356
+ }
1357
+ ]
1358
+ },
1359
+ {
1360
+ "id": "index-knowx",
1361
+ "kind": "analyze",
1362
+ "serviceId": "knowx-retrieval-index",
1363
+ "dependsOn": [
1364
+ "write-knowx"
1365
+ ],
1366
+ "inputs": [
1367
+ {
1368
+ "fromStep": "extract",
1369
+ "key": "extract"
1370
+ },
1371
+ {
1372
+ "fromStep": "write-knowx",
1373
+ "key": "write-knowx"
1374
+ }
1375
+ ],
1376
+ "notes": "POST /v1/candidates for associate + /v1/index/upsert (knowx.knowledge). Soft-skip only when MEMORIX_RETRIEVAL_URL unset; when set, remote failures hard-fail."
1377
+ },
1378
+ {
1379
+ "id": "nexum",
1380
+ "kind": "analyze",
1381
+ "serviceId": "knowx-nexum",
1382
+ "dependsOn": [
1383
+ "index-knowx"
1384
+ ],
1385
+ "inputs": [
1386
+ {
1387
+ "fromStep": "extract",
1388
+ "key": "extract"
1389
+ },
1390
+ {
1391
+ "fromStep": "write-knowx",
1392
+ "key": "write-knowx"
1393
+ }
1394
+ ],
1395
+ "notes": "KnowX mapper POSTs Nexum analyze (proposedGraph). Soft-skip only when MEMORIX_NEXUM_URL unset; when set, remote failures hard-fail. Platform write-record mode nexum persists proposedGraph."
1396
+ },
1397
+ {
1398
+ "id": "write-graph",
1399
+ "kind": "write-record",
1400
+ "contentType": "snapshots",
1401
+ "portConfig": {
1402
+ "mode": "nexum"
1403
+ },
1404
+ "dependsOn": [
1405
+ "nexum"
1406
+ ],
1407
+ "inputs": [
1408
+ {
1409
+ "fromStep": "nexum",
1410
+ "key": "nexum"
1411
+ }
1412
+ ],
1413
+ "notes": "mode nexum — create-or-update proposedGraph as content/snapshots. Empty plan when companion soft-skips is a no-op success."
1414
+ },
1415
+ {
1416
+ "id": "associate-knowledge",
1417
+ "kind": "analyze",
1418
+ "serviceId": "knowx-associate-knowledge",
1419
+ "dependsOn": [
1420
+ "index-knowx",
1421
+ "write-graph"
1422
+ ],
1423
+ "inputs": [
1424
+ {
1425
+ "fromStep": "extract",
1426
+ "key": "extract"
1427
+ },
1428
+ {
1429
+ "fromStep": "index-knowx",
1430
+ "key": "index-knowx"
1431
+ }
1432
+ ]
1433
+ },
1434
+ {
1435
+ "id": "write-knowledge-links",
1436
+ "kind": "relationship-write",
1437
+ "dependsOn": [
1438
+ "associate-knowledge"
1439
+ ],
1440
+ "inputs": [
1441
+ {
1442
+ "fromStep": "associate-knowledge",
1443
+ "key": "associate-knowledge"
1444
+ }
1445
+ ],
1446
+ "notes": "Consumes relationshipPlans → knowx-same-as / knowx-supports / knowx-contradicts / knowx-derived-from"
1447
+ },
1448
+ {
1449
+ "id": "associate-entities",
1450
+ "kind": "analyze",
1451
+ "serviceId": "knowx-associate-entities",
1452
+ "dependsOn": [
1453
+ "write-knowledge-links"
1454
+ ],
1455
+ "inputs": [
1456
+ {
1457
+ "fromStep": "associate-knowledge",
1458
+ "key": "associate-knowledge"
1459
+ }
1460
+ ]
1461
+ },
1462
+ {
1463
+ "id": "write-entity-links",
1464
+ "kind": "relationship-write",
1465
+ "dependsOn": [
1466
+ "associate-entities"
1467
+ ],
1468
+ "inputs": [
1469
+ {
1470
+ "fromStep": "associate-entities",
1471
+ "key": "associate-entities"
1472
+ }
1473
+ ],
1474
+ "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
1475
+ }
1476
+ ]
1477
+ },
1478
+ {
1479
+ "id": "knowx-ingest-content-source",
1480
+ "name": "Folder connector ingest then derive knowledge",
1481
+ "trigger": "explicit",
1482
+ "description": "knowx-folder-pull → promote-content → index-snapshots (CRS knowx.snapshot) → extract → write knowx → index-knowx (CRS candidates + knowx.knowledge) → nexum (proposedGraph) → write-graph (mode nexum) → associate-knowledge → relationship-write → associate-entities → relationship-write.",
1483
+ "steps": [
1484
+ {
1485
+ "id": "folder-pull",
1486
+ "kind": "analyze",
1487
+ "serviceId": "knowx-folder-pull"
1488
+ },
1489
+ {
1490
+ "id": "promote-content",
1491
+ "kind": "analyze",
1492
+ "serviceId": "knowx-promote-content",
1493
+ "dependsOn": [
1494
+ "folder-pull"
1495
+ ],
1496
+ "inputs": [
1497
+ {
1498
+ "fromStep": "folder-pull",
1499
+ "key": "folder-pull"
1500
+ }
1501
+ ]
1502
+ },
1503
+ {
1504
+ "id": "index-snapshots",
1505
+ "kind": "analyze",
1506
+ "serviceId": "knowx-retrieval-index",
1507
+ "dependsOn": [
1508
+ "promote-content"
1509
+ ],
1510
+ "inputs": [
1511
+ {
1512
+ "fromStep": "promote-content",
1513
+ "key": "promote-content"
1514
+ }
1515
+ ],
1516
+ "notes": "Index Content snapshots only (knowx.snapshot; no knowxDrafts → no candidates). Soft-skip when CRS unset/down."
1517
+ },
1518
+ {
1519
+ "id": "extract",
1520
+ "kind": "analyze",
1521
+ "serviceId": "knowx-extract",
1522
+ "dependsOn": [
1523
+ "index-snapshots"
1524
+ ],
1525
+ "inputs": [
1526
+ {
1527
+ "fromStep": "promote-content",
1528
+ "key": "promote-content"
1529
+ }
1530
+ ]
1531
+ },
1532
+ {
1533
+ "id": "write-knowx",
1534
+ "kind": "write-record",
1535
+ "contentType": "knowx",
1536
+ "dependsOn": [
1537
+ "extract"
1538
+ ],
1539
+ "inputs": [
1540
+ {
1541
+ "fromStep": "extract",
1542
+ "key": "extract"
1543
+ }
1544
+ ]
1545
+ },
1546
+ {
1547
+ "id": "index-knowx",
1548
+ "kind": "analyze",
1549
+ "serviceId": "knowx-retrieval-index",
1550
+ "dependsOn": [
1551
+ "write-knowx"
1552
+ ],
1553
+ "inputs": [
1554
+ {
1555
+ "fromStep": "extract",
1556
+ "key": "extract"
1557
+ },
1558
+ {
1559
+ "fromStep": "write-knowx",
1560
+ "key": "write-knowx"
1561
+ },
1562
+ {
1563
+ "fromStep": "promote-content",
1564
+ "key": "promote-content"
1565
+ }
1566
+ ],
1567
+ "notes": "POST /v1/candidates for associate + upsert knowx + re-touch snapshots."
1568
+ },
1569
+ {
1570
+ "id": "nexum",
1571
+ "kind": "analyze",
1572
+ "serviceId": "knowx-nexum",
1573
+ "dependsOn": [
1574
+ "index-knowx"
1575
+ ],
1576
+ "inputs": [
1577
+ {
1578
+ "fromStep": "extract",
1579
+ "key": "extract"
1580
+ },
1581
+ {
1582
+ "fromStep": "write-knowx",
1583
+ "key": "write-knowx"
1584
+ },
1585
+ {
1586
+ "fromStep": "promote-content",
1587
+ "key": "promote-content"
1588
+ }
1589
+ ],
1590
+ "notes": "KnowX mapper POSTs Nexum analyze from promote + extract bags. Soft-skip when MEMORIX_NEXUM_URL unset; when set, remote failures hard-fail. write-graph persists proposedGraph."
1591
+ },
1592
+ {
1593
+ "id": "write-graph",
1594
+ "kind": "write-record",
1595
+ "contentType": "snapshots",
1596
+ "portConfig": {
1597
+ "mode": "nexum"
1598
+ },
1599
+ "dependsOn": [
1600
+ "nexum"
1601
+ ],
1602
+ "inputs": [
1603
+ {
1604
+ "fromStep": "nexum",
1605
+ "key": "nexum"
1606
+ }
1607
+ ],
1608
+ "notes": "mode nexum — create-or-update proposedGraph as content/snapshots."
1609
+ },
1610
+ {
1611
+ "id": "associate-knowledge",
1612
+ "kind": "analyze",
1613
+ "serviceId": "knowx-associate-knowledge",
1614
+ "dependsOn": [
1615
+ "index-knowx",
1616
+ "write-graph"
1617
+ ],
1618
+ "inputs": [
1619
+ {
1620
+ "fromStep": "extract",
1621
+ "key": "extract"
1622
+ },
1623
+ {
1624
+ "fromStep": "write-knowx",
1625
+ "key": "write-knowx"
1626
+ },
1627
+ {
1628
+ "fromStep": "index-knowx",
1629
+ "key": "index-knowx"
1630
+ }
1631
+ ]
1632
+ },
1633
+ {
1634
+ "id": "write-knowledge-links",
1635
+ "kind": "relationship-write",
1636
+ "dependsOn": [
1637
+ "associate-knowledge"
1638
+ ],
1639
+ "inputs": [
1640
+ {
1641
+ "fromStep": "associate-knowledge",
1642
+ "key": "associate-knowledge"
1643
+ }
1644
+ ],
1645
+ "notes": "Consumes relationshipPlans including knowx-derived-from-content"
1646
+ },
1647
+ {
1648
+ "id": "associate-entities",
1649
+ "kind": "analyze",
1650
+ "serviceId": "knowx-associate-entities",
1651
+ "dependsOn": [
1652
+ "write-knowledge-links"
1653
+ ],
1654
+ "inputs": [
1655
+ {
1656
+ "fromStep": "associate-knowledge",
1657
+ "key": "associate-knowledge"
1658
+ },
1659
+ {
1660
+ "fromStep": "extract",
1661
+ "key": "extract"
1662
+ }
1663
+ ]
1664
+ },
1665
+ {
1666
+ "id": "write-entity-links",
1667
+ "kind": "relationship-write",
1668
+ "dependsOn": [
1669
+ "associate-entities"
1670
+ ],
1671
+ "inputs": [
1672
+ {
1673
+ "fromStep": "associate-entities",
1674
+ "key": "associate-entities"
1675
+ }
1676
+ ],
1677
+ "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
1678
+ }
1679
+ ]
1680
+ },
1681
+ {
1682
+ "id": "knowx-ingest-managed-item",
1683
+ "name": "Managed Drive item ingest then derive knowledge",
1684
+ "trigger": "explicit",
1685
+ "description": "knowx-managed-pull → promote-content → index-snapshots (CRS) → extract → write knowx → index-knowx (CRS candidates + upsert) → nexum (proposedGraph) → write-graph (mode nexum) → associate-knowledge → relationship-write → associate-entities → relationship-write.",
1686
+ "steps": [
1687
+ {
1688
+ "id": "managed-pull",
1689
+ "kind": "analyze",
1690
+ "serviceId": "knowx-managed-pull"
1691
+ },
1692
+ {
1693
+ "id": "promote-content",
1694
+ "kind": "analyze",
1695
+ "serviceId": "knowx-promote-content",
1696
+ "dependsOn": [
1697
+ "managed-pull"
1698
+ ],
1699
+ "inputs": [
1700
+ {
1701
+ "fromStep": "managed-pull",
1702
+ "key": "managed-pull"
1703
+ }
1704
+ ]
1705
+ },
1706
+ {
1707
+ "id": "index-snapshots",
1708
+ "kind": "analyze",
1709
+ "serviceId": "knowx-retrieval-index",
1710
+ "dependsOn": [
1711
+ "promote-content"
1712
+ ],
1713
+ "inputs": [
1714
+ {
1715
+ "fromStep": "promote-content",
1716
+ "key": "promote-content"
1717
+ }
1718
+ ],
1719
+ "notes": "Index Content snapshots only (knowx.snapshot; no knowxDrafts → no candidates). Soft-skip when CRS unset/down."
1720
+ },
1721
+ {
1722
+ "id": "extract",
1723
+ "kind": "analyze",
1724
+ "serviceId": "knowx-extract",
1725
+ "dependsOn": [
1726
+ "index-snapshots"
1727
+ ],
1728
+ "inputs": [
1729
+ {
1730
+ "fromStep": "promote-content",
1731
+ "key": "promote-content"
1732
+ }
1733
+ ]
1734
+ },
1735
+ {
1736
+ "id": "write-knowx",
1737
+ "kind": "write-record",
1738
+ "contentType": "knowx",
1739
+ "dependsOn": [
1740
+ "extract"
1741
+ ],
1742
+ "inputs": [
1743
+ {
1744
+ "fromStep": "extract",
1745
+ "key": "extract"
1746
+ }
1747
+ ]
1748
+ },
1749
+ {
1750
+ "id": "index-knowx",
1751
+ "kind": "analyze",
1752
+ "serviceId": "knowx-retrieval-index",
1753
+ "dependsOn": [
1754
+ "write-knowx"
1755
+ ],
1756
+ "inputs": [
1757
+ {
1758
+ "fromStep": "extract",
1759
+ "key": "extract"
1760
+ },
1761
+ {
1762
+ "fromStep": "write-knowx",
1763
+ "key": "write-knowx"
1764
+ },
1765
+ {
1766
+ "fromStep": "promote-content",
1767
+ "key": "promote-content"
1768
+ }
1769
+ ],
1770
+ "notes": "POST /v1/candidates for associate + upsert knowx + re-touch snapshots."
1771
+ },
1772
+ {
1773
+ "id": "nexum",
1774
+ "kind": "analyze",
1775
+ "serviceId": "knowx-nexum",
1776
+ "dependsOn": [
1777
+ "index-knowx"
1778
+ ],
1779
+ "inputs": [
1780
+ {
1781
+ "fromStep": "extract",
1782
+ "key": "extract"
1783
+ },
1784
+ {
1785
+ "fromStep": "write-knowx",
1786
+ "key": "write-knowx"
1787
+ },
1788
+ {
1789
+ "fromStep": "promote-content",
1790
+ "key": "promote-content"
1791
+ }
1792
+ ],
1793
+ "notes": "KnowX mapper POSTs Nexum analyze from promote + extract bags. Soft-skip when MEMORIX_NEXUM_URL unset; when set, remote failures hard-fail. write-graph persists proposedGraph."
1794
+ },
1795
+ {
1796
+ "id": "write-graph",
1797
+ "kind": "write-record",
1798
+ "contentType": "snapshots",
1799
+ "portConfig": {
1800
+ "mode": "nexum"
1801
+ },
1802
+ "dependsOn": [
1803
+ "nexum"
1804
+ ],
1805
+ "inputs": [
1806
+ {
1807
+ "fromStep": "nexum",
1808
+ "key": "nexum"
1809
+ }
1810
+ ],
1811
+ "notes": "mode nexum — create-or-update proposedGraph as content/snapshots."
1812
+ },
1813
+ {
1814
+ "id": "associate-knowledge",
1815
+ "kind": "analyze",
1816
+ "serviceId": "knowx-associate-knowledge",
1817
+ "dependsOn": [
1818
+ "index-knowx",
1819
+ "write-graph"
1820
+ ],
1821
+ "inputs": [
1822
+ {
1823
+ "fromStep": "extract",
1824
+ "key": "extract"
1825
+ },
1826
+ {
1827
+ "fromStep": "write-knowx",
1828
+ "key": "write-knowx"
1829
+ },
1830
+ {
1831
+ "fromStep": "index-knowx",
1832
+ "key": "index-knowx"
1833
+ }
1834
+ ]
1835
+ },
1836
+ {
1837
+ "id": "write-knowledge-links",
1838
+ "kind": "relationship-write",
1839
+ "dependsOn": [
1840
+ "associate-knowledge"
1841
+ ],
1842
+ "inputs": [
1843
+ {
1844
+ "fromStep": "associate-knowledge",
1845
+ "key": "associate-knowledge"
1846
+ }
1847
+ ],
1848
+ "notes": "Consumes relationshipPlans including knowx-derived-from-content"
1849
+ },
1850
+ {
1851
+ "id": "associate-entities",
1852
+ "kind": "analyze",
1853
+ "serviceId": "knowx-associate-entities",
1854
+ "dependsOn": [
1855
+ "write-knowledge-links"
1856
+ ],
1857
+ "inputs": [
1858
+ {
1859
+ "fromStep": "associate-knowledge",
1860
+ "key": "associate-knowledge"
1861
+ },
1862
+ {
1863
+ "fromStep": "extract",
1864
+ "key": "extract"
1865
+ }
1866
+ ]
1867
+ },
1868
+ {
1869
+ "id": "write-entity-links",
1870
+ "kind": "relationship-write",
1871
+ "dependsOn": [
1872
+ "associate-entities"
1873
+ ],
1874
+ "inputs": [
1875
+ {
1876
+ "fromStep": "associate-entities",
1877
+ "key": "associate-entities"
1878
+ }
1879
+ ],
1880
+ "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
1881
+ }
1882
+ ]
1883
+ }
1884
+ ],
1885
+ "schedules": [],
1886
+ "kindDeclarations": [],
1887
+ "extensions": {}
1888
+ }