@x12i/memorix-metadata 3.0.3 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +4 -0
  2. package/dist/abstracts.d.ts +9 -3
  3. package/dist/abstracts.d.ts.map +1 -1
  4. package/dist/abstracts.js +70 -66
  5. package/dist/abstracts.js.map +1 -1
  6. package/dist/fold-bindings.d.ts +19 -0
  7. package/dist/fold-bindings.d.ts.map +1 -0
  8. package/dist/fold-bindings.js +103 -0
  9. package/dist/fold-bindings.js.map +1 -0
  10. package/dist/index.d.ts +3 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +3 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/kind-fields.d.ts.map +1 -1
  15. package/dist/kind-fields.js +0 -1
  16. package/dist/kind-fields.js.map +1 -1
  17. package/dist/kinds.d.ts +2 -2
  18. package/dist/kinds.d.ts.map +1 -1
  19. package/dist/kinds.js +9 -11
  20. package/dist/kinds.js.map +1 -1
  21. package/dist/normalize.d.ts +1 -0
  22. package/dist/normalize.d.ts.map +1 -1
  23. package/dist/normalize.js +5 -1
  24. package/dist/normalize.js.map +1 -1
  25. package/dist/resolve.d.ts.map +1 -1
  26. package/dist/resolve.js +14 -3
  27. package/dist/resolve.js.map +1 -1
  28. package/dist/topology.d.ts +52 -0
  29. package/dist/topology.d.ts.map +1 -0
  30. package/dist/topology.js +376 -0
  31. package/dist/topology.js.map +1 -0
  32. package/dist/types.d.ts +146 -16
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/validate.d.ts.map +1 -1
  35. package/dist/validate.js +179 -64
  36. package/dist/validate.js.map +1 -1
  37. package/examples/invalid/agent-classification.json +31 -31
  38. package/examples/invalid/broken-binding.json +27 -27
  39. package/examples/invalid/completion-mapping-with-exec-policy.json +31 -31
  40. package/examples/invalid/missing-parent.json +31 -31
  41. package/examples/invalid/operational-kind-root.json +31 -31
  42. package/examples/invalid/pipeline-unknown-service.json +31 -31
  43. package/examples/invalid/relationship-missing-rules.json +24 -24
  44. package/examples/invalid/relationship-with-storage.json +24 -24
  45. package/examples/invalid/service-with-secrets.json +27 -27
  46. package/examples/knowx/normalized/pack.json +1133 -173
  47. package/examples/opx/normalized/pack.json +309 -291
  48. package/examples/opx/raw/abstract-types.json +223 -7
  49. package/examples/opx/raw/object-types.json +26 -95
  50. package/examples/opx/raw/pipelines-and-sources.json +66 -18
  51. package/examples/opx/raw/relationship-definitions.json +17 -47
  52. package/examples/opx/raw/view-definitions.json +6 -20
  53. package/examples/opx/raw/write-and-source-mappings.json +135 -20
  54. package/examples/project-opx/normalized/pack.json +355 -263
  55. package/package.json +1 -1
  56. package/examples/opx/raw/abstract-bindings.json +0 -38
@@ -3,36 +3,33 @@
3
3
  "agentId": "knowx",
4
4
  "version": "0.1.0",
5
5
  "agents": [
6
- {
7
- "id": "opx",
8
- "name": "Operations (generic parent)",
9
- "description": "Complete generic parent agent for ordinary operational work. Permanent Memorix acceptance pack.",
10
- "parentId": null
11
- },
12
6
  {
13
7
  "id": "knowx",
14
8
  "name": "KnowX (knowledge agent)",
15
- "description": "First-party KnowX agent: extract knowledge from text+source, associate to existing knowledge, associate novel knowledge to entities. Child of opx — inherits domain subjects.",
16
- "parentId": "opx"
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
17
12
  }
18
13
  ],
19
14
  "objectTypes": [
20
15
  {
21
- "id": "employees",
22
- "name": "Employees",
16
+ "id": "people",
17
+ "name": "People",
23
18
  "dataCategory": "entity",
24
19
  "abstractTypes": [
25
- "People",
26
- "KnowXEntity"
20
+ "People"
27
21
  ],
22
+ "notes": "Single people OT. Inside vs outside org is identity kind (concept.identifiers.primary.kind): employeeId | externalPersonId.",
28
23
  "contentTypes": [
29
24
  {
30
25
  "id": "raw",
31
- "required": true
26
+ "required": true,
27
+ "requiredReason": "Landed provider-native payload; identity and lineage depend on it."
32
28
  },
33
29
  {
34
30
  "id": "snapshots",
35
- "required": true
31
+ "required": true,
32
+ "requiredReason": "Canonical composed person view used by queries and abstracts."
36
33
  },
37
34
  {
38
35
  "id": "discovery",
@@ -58,43 +55,32 @@
58
55
  "id": "knowx",
59
56
  "notes": "KnowX NODE facet — provenance required in .data"
60
57
  }
61
- ]
62
- },
63
- {
64
- "id": "contractors",
65
- "name": "Contractors",
66
- "dataCategory": "entity",
67
- "abstractTypes": [
68
- "People",
69
- "KnowXEntity"
70
58
  ],
71
- "contentTypes": [
59
+ "fields": [
72
60
  {
73
- "id": "raw"
74
- },
75
- {
76
- "id": "snapshots"
61
+ "path": "data.title",
62
+ "valueType": "string",
63
+ "contentType": "snapshots"
77
64
  },
78
65
  {
79
- "id": "discovery",
80
- "discriminator": {
81
- "path": "data.discoveryType",
82
- "required": false
83
- }
66
+ "path": "data.role",
67
+ "valueType": "string",
68
+ "contentType": "snapshots"
84
69
  },
85
70
  {
86
- "id": "analysis",
87
- "discriminator": {
88
- "path": "data.analysisType",
89
- "required": false
90
- }
71
+ "path": "data.lens",
72
+ "valueType": "string",
73
+ "contentType": "snapshots"
91
74
  },
92
75
  {
93
- "id": "relationships"
76
+ "path": "data.email",
77
+ "valueType": "string",
78
+ "contentType": "snapshots"
94
79
  },
95
80
  {
96
- "id": "knowx",
97
- "notes": "KnowX NODE facet — provenance required in .data"
81
+ "path": "data.organization",
82
+ "valueType": "string",
83
+ "contentType": "snapshots"
98
84
  }
99
85
  ]
100
86
  },
@@ -103,8 +89,7 @@
103
89
  "name": "Work Items",
104
90
  "dataCategory": "entity",
105
91
  "abstractTypes": [
106
- "WorkItems",
107
- "KnowXEntity"
92
+ "WorkItems"
108
93
  ],
109
94
  "contentTypes": [
110
95
  {
@@ -155,28 +140,30 @@
155
140
  "analytics": "optional",
156
141
  "enrichment": "optional",
157
142
  "insights": "optional"
158
- }
159
- },
160
- {
161
- "id": "assertions",
162
- "name": "Assertions",
163
- "dataCategory": "knowledge",
164
- "abstractTypes": [
165
- "KnowXEntity"
166
- ],
167
- "contentTypes": [
143
+ },
144
+ "fields": [
168
145
  {
169
- "id": "knowx",
170
- "required": true,
171
- "notes": "EDGE claims — data.kind EDGE; provenance mandatory"
146
+ "path": "data.title",
147
+ "valueType": "string",
148
+ "contentType": "snapshots"
172
149
  },
173
150
  {
174
- "id": "workflow",
175
- "notes": "Human review assignment sibling"
151
+ "path": "data.status",
152
+ "valueType": "string",
153
+ "contentType": "snapshots"
176
154
  },
177
155
  {
178
- "id": "confirmations",
179
- "notes": "Accept/reject decision sibling"
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
+ }
180
167
  }
181
168
  ]
182
169
  },
@@ -184,17 +171,109 @@
184
171
  "id": "content",
185
172
  "name": "Content",
186
173
  "dataCategory": "knowledge",
187
- "abstractTypes": [],
174
+ "abstractTypes": [
175
+ "Content"
176
+ ],
177
+ "notes": "Ingested documents (raw/snapshots) plus free-floating KnowX knowledge items (knowx NODE/EDGE with own recordId). Entity NODE facets stay on people/work-items.",
188
178
  "contentTypes": [
189
179
  {
190
180
  "id": "raw",
191
181
  "required": true,
192
- "notes": "Landed from knowx-source Memory pull or folder ingestion"
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"
193
184
  },
194
185
  {
195
186
  "id": "snapshots",
196
187
  "required": false,
197
- "notes": "Post-processing promote after knowledge pull"
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": "workflow",
196
+ "notes": "Human review assignment sibling for knowledge items"
197
+ },
198
+ {
199
+ "id": "confirmations",
200
+ "notes": "Accept/reject decision sibling for knowledge items"
201
+ },
202
+ {
203
+ "id": "relationships",
204
+ "notes": "Content↔Knowledge lineage and knowledge links"
205
+ }
206
+ ],
207
+ "fields": [
208
+ {
209
+ "path": "data.title",
210
+ "valueType": "string",
211
+ "contentType": "raw"
212
+ },
213
+ {
214
+ "path": "data.markdown",
215
+ "valueType": "string",
216
+ "contentType": "raw"
217
+ },
218
+ {
219
+ "path": "data.contentHash",
220
+ "valueType": "string",
221
+ "contentType": "raw"
222
+ },
223
+ {
224
+ "path": "data.sourceFormat",
225
+ "valueType": "string",
226
+ "contentType": "raw"
227
+ },
228
+ {
229
+ "path": "data.sourceMediaType",
230
+ "valueType": "string",
231
+ "contentType": "raw"
232
+ },
233
+ {
234
+ "path": "data.byteSize",
235
+ "valueType": "number",
236
+ "contentType": "raw"
237
+ },
238
+ {
239
+ "path": "data.language",
240
+ "valueType": "string",
241
+ "contentType": "raw"
242
+ },
243
+ {
244
+ "path": "data.state",
245
+ "valueType": "string",
246
+ "contentType": "raw"
247
+ },
248
+ {
249
+ "path": "data.revision",
250
+ "valueType": "number",
251
+ "contentType": "raw"
252
+ },
253
+ {
254
+ "path": "data.extraction.extractorId",
255
+ "valueType": "string",
256
+ "contentType": "raw"
257
+ },
258
+ {
259
+ "path": "data.extraction.extractorVersion",
260
+ "valueType": "string",
261
+ "contentType": "raw"
262
+ },
263
+ {
264
+ "path": "data.extraction.extractedAt",
265
+ "valueType": "datetime",
266
+ "contentType": "raw"
267
+ },
268
+ {
269
+ "path": "data.origins",
270
+ "valueType": "array",
271
+ "contentType": "raw"
272
+ },
273
+ {
274
+ "path": "data.nav.derivedKnowledge",
275
+ "valueType": "array",
276
+ "contentType": "relationships"
198
277
  }
199
278
  ]
200
279
  }
@@ -203,7 +282,7 @@
203
282
  {
204
283
  "id": "People",
205
284
  "name": "People",
206
- "meaning": "Employees and contractors who perform operational work",
285
+ "meaning": "People who perform operational work — inside the org (employeeId) or outside (externalPersonId), distinguished by identity kind",
207
286
  "category": "entity",
208
287
  "properties": [
209
288
  {
@@ -220,166 +299,533 @@
220
299
  "id": "lens",
221
300
  "valueType": "string",
222
301
  "required": false
302
+ },
303
+ {
304
+ "id": "email",
305
+ "valueType": "string",
306
+ "required": false
307
+ },
308
+ {
309
+ "id": "organization",
310
+ "valueType": "string",
311
+ "required": false
312
+ },
313
+ {
314
+ "id": "contentEdgesFrom",
315
+ "valueType": "array",
316
+ "required": false
223
317
  }
224
- ]
318
+ ],
319
+ "members": [
320
+ {
321
+ "objectType": "people",
322
+ "contentType": "snapshots",
323
+ "properties": [
324
+ {
325
+ "abstractProperty": "title",
326
+ "contentType": "snapshots",
327
+ "propertyPath": "data.title",
328
+ "concreteValueType": "string"
329
+ },
330
+ {
331
+ "abstractProperty": "role",
332
+ "contentType": "snapshots",
333
+ "propertyPath": "data.role",
334
+ "concreteValueType": "string"
335
+ },
336
+ {
337
+ "abstractProperty": "lens",
338
+ "contentType": "snapshots",
339
+ "propertyPath": "data.lens",
340
+ "concreteValueType": "string"
341
+ },
342
+ {
343
+ "abstractProperty": "email",
344
+ "contentType": "snapshots",
345
+ "propertyPath": "data.email",
346
+ "concreteValueType": "string"
347
+ },
348
+ {
349
+ "abstractProperty": "organization",
350
+ "contentType": "snapshots",
351
+ "propertyPath": "data.organization",
352
+ "concreteValueType": "string"
353
+ },
354
+ {
355
+ "abstractProperty": "contentEdgesFrom",
356
+ "contentType": "relationships",
357
+ "propertyPath": "data.nav.contentEdgesFrom"
358
+ }
359
+ ]
360
+ }
361
+ ],
362
+ "union": false,
363
+ "notes": "People abstract ↔ people OT 1:1. Identity kind employeeId | externalPersonId distinguishes inside/outside org."
225
364
  },
226
365
  {
227
366
  "id": "WorkItems",
228
367
  "name": "Work Items",
229
368
  "meaning": "Units of operational work",
230
- "category": "entity"
369
+ "category": "entity",
370
+ "properties": [
371
+ {
372
+ "id": "title",
373
+ "valueType": "string",
374
+ "required": true
375
+ },
376
+ {
377
+ "id": "status",
378
+ "valueType": "string",
379
+ "required": true
380
+ },
381
+ {
382
+ "id": "priority",
383
+ "valueType": "string",
384
+ "required": false
385
+ },
386
+ {
387
+ "id": "contentEdgesTo",
388
+ "valueType": "array",
389
+ "required": false
390
+ }
391
+ ],
392
+ "members": [
393
+ {
394
+ "objectType": "work-items",
395
+ "contentType": "snapshots",
396
+ "properties": [
397
+ {
398
+ "abstractProperty": "title",
399
+ "contentType": "snapshots",
400
+ "propertyPath": "data.title",
401
+ "concreteValueType": "string"
402
+ },
403
+ {
404
+ "abstractProperty": "status",
405
+ "contentType": "snapshots",
406
+ "propertyPath": "data.status",
407
+ "concreteValueType": "string"
408
+ },
409
+ {
410
+ "abstractProperty": "priority",
411
+ "contentType": "snapshots",
412
+ "propertyPath": "data.priority",
413
+ "concreteValueType": "string"
414
+ },
415
+ {
416
+ "abstractProperty": "contentEdgesTo",
417
+ "contentType": "relationships",
418
+ "propertyPath": "data.nav.contentEdgesTo"
419
+ }
420
+ ]
421
+ }
422
+ ],
423
+ "union": false
231
424
  },
232
425
  {
233
- "id": "KnowXEntity",
234
- "name": "KnowX Entity",
235
- "meaning": "Virtual union of subjects that carry knowx content (NODE facets and EDGE assertions). Not a collection.",
236
- "category": "knowledge"
237
- }
238
- ],
239
- "abstractBindings": [
240
- {
241
- "id": "knowx-entity-union",
242
- "abstractType": "KnowXEntity",
243
- "concreteObjectTypes": [
244
- "employees",
245
- "contractors",
246
- "work-items",
247
- "assertions"
248
- ],
249
- "union": true,
250
- "notes": "KnowXEntity = concrete types that may wear contentType knowx. No abstract records. Writers always target concrete object types."
426
+ "id": "Content",
427
+ "name": "Content",
428
+ "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.",
429
+ "category": "knowledge",
430
+ "properties": [
431
+ {
432
+ "id": "title",
433
+ "valueType": "string",
434
+ "required": false
435
+ },
436
+ {
437
+ "id": "markdown",
438
+ "valueType": "string",
439
+ "required": true
440
+ },
441
+ {
442
+ "id": "contentHash",
443
+ "valueType": "string",
444
+ "required": true
445
+ },
446
+ {
447
+ "id": "sourceFormat",
448
+ "valueType": "string",
449
+ "required": true
450
+ },
451
+ {
452
+ "id": "sourceMediaType",
453
+ "valueType": "string",
454
+ "required": true
455
+ },
456
+ {
457
+ "id": "byteSize",
458
+ "valueType": "number",
459
+ "required": true
460
+ },
461
+ {
462
+ "id": "language",
463
+ "valueType": "string",
464
+ "required": false
465
+ },
466
+ {
467
+ "id": "state",
468
+ "valueType": "string",
469
+ "required": true
470
+ },
471
+ {
472
+ "id": "revision",
473
+ "valueType": "number",
474
+ "required": true
475
+ },
476
+ {
477
+ "id": "extractorId",
478
+ "valueType": "string",
479
+ "required": false
480
+ },
481
+ {
482
+ "id": "extractorVersion",
483
+ "valueType": "string",
484
+ "required": false
485
+ },
486
+ {
487
+ "id": "extractedAt",
488
+ "valueType": "datetime",
489
+ "required": false
490
+ },
491
+ {
492
+ "id": "origins",
493
+ "valueType": "array",
494
+ "required": false
495
+ },
496
+ {
497
+ "id": "derivedKnowledge",
498
+ "valueType": "array",
499
+ "required": false
500
+ },
501
+ {
502
+ "id": "sameAs",
503
+ "valueType": "array",
504
+ "required": false
505
+ },
506
+ {
507
+ "id": "supports",
508
+ "valueType": "array",
509
+ "required": false
510
+ },
511
+ {
512
+ "id": "supportedBy",
513
+ "valueType": "array",
514
+ "required": false
515
+ },
516
+ {
517
+ "id": "contradicts",
518
+ "valueType": "array",
519
+ "required": false
520
+ },
521
+ {
522
+ "id": "contradictedBy",
523
+ "valueType": "array",
524
+ "required": false
525
+ },
526
+ {
527
+ "id": "derivedFrom",
528
+ "valueType": "array",
529
+ "required": false
530
+ },
531
+ {
532
+ "id": "derivedClaims",
533
+ "valueType": "array",
534
+ "required": false
535
+ },
536
+ {
537
+ "id": "derivedFromContent",
538
+ "valueType": "array",
539
+ "required": false
540
+ },
541
+ {
542
+ "id": "edgeFrom",
543
+ "valueType": "array",
544
+ "required": false
545
+ },
546
+ {
547
+ "id": "edgeTo",
548
+ "valueType": "array",
549
+ "required": false
550
+ }
551
+ ],
552
+ "members": [
553
+ {
554
+ "objectType": "content",
555
+ "contentType": "raw",
556
+ "properties": [
557
+ {
558
+ "abstractProperty": "title",
559
+ "contentType": "raw",
560
+ "propertyPath": "data.title"
561
+ },
562
+ {
563
+ "abstractProperty": "markdown",
564
+ "contentType": "raw",
565
+ "propertyPath": "data.markdown"
566
+ },
567
+ {
568
+ "abstractProperty": "contentHash",
569
+ "contentType": "raw",
570
+ "propertyPath": "data.contentHash"
571
+ },
572
+ {
573
+ "abstractProperty": "sourceFormat",
574
+ "contentType": "raw",
575
+ "propertyPath": "data.sourceFormat"
576
+ },
577
+ {
578
+ "abstractProperty": "sourceMediaType",
579
+ "contentType": "raw",
580
+ "propertyPath": "data.sourceMediaType"
581
+ },
582
+ {
583
+ "abstractProperty": "byteSize",
584
+ "contentType": "raw",
585
+ "propertyPath": "data.byteSize"
586
+ },
587
+ {
588
+ "abstractProperty": "language",
589
+ "contentType": "raw",
590
+ "propertyPath": "data.language"
591
+ },
592
+ {
593
+ "abstractProperty": "state",
594
+ "contentType": "raw",
595
+ "propertyPath": "data.state"
596
+ },
597
+ {
598
+ "abstractProperty": "revision",
599
+ "contentType": "raw",
600
+ "propertyPath": "data.revision"
601
+ },
602
+ {
603
+ "abstractProperty": "extractorId",
604
+ "contentType": "raw",
605
+ "propertyPath": "data.extraction.extractorId"
606
+ },
607
+ {
608
+ "abstractProperty": "extractorVersion",
609
+ "contentType": "raw",
610
+ "propertyPath": "data.extraction.extractorVersion"
611
+ },
612
+ {
613
+ "abstractProperty": "extractedAt",
614
+ "contentType": "raw",
615
+ "propertyPath": "data.extraction.extractedAt"
616
+ },
617
+ {
618
+ "abstractProperty": "origins",
619
+ "contentType": "raw",
620
+ "propertyPath": "data.origins"
621
+ },
622
+ {
623
+ "abstractProperty": "derivedKnowledge",
624
+ "contentType": "relationships",
625
+ "propertyPath": "data.nav.derivedKnowledge"
626
+ },
627
+ {
628
+ "abstractProperty": "sameAs",
629
+ "contentType": "relationships",
630
+ "propertyPath": "data.nav.sameAs"
631
+ },
632
+ {
633
+ "abstractProperty": "supports",
634
+ "contentType": "relationships",
635
+ "propertyPath": "data.nav.supports"
636
+ },
637
+ {
638
+ "abstractProperty": "supportedBy",
639
+ "contentType": "relationships",
640
+ "propertyPath": "data.nav.supportedBy"
641
+ },
642
+ {
643
+ "abstractProperty": "contradicts",
644
+ "contentType": "relationships",
645
+ "propertyPath": "data.nav.contradicts"
646
+ },
647
+ {
648
+ "abstractProperty": "contradictedBy",
649
+ "contentType": "relationships",
650
+ "propertyPath": "data.nav.contradictedBy"
651
+ },
652
+ {
653
+ "abstractProperty": "derivedFrom",
654
+ "contentType": "relationships",
655
+ "propertyPath": "data.nav.derivedFrom"
656
+ },
657
+ {
658
+ "abstractProperty": "derivedClaims",
659
+ "contentType": "relationships",
660
+ "propertyPath": "data.nav.derivedClaims"
661
+ },
662
+ {
663
+ "abstractProperty": "derivedFromContent",
664
+ "contentType": "relationships",
665
+ "propertyPath": "data.nav.derivedFromContent"
666
+ },
667
+ {
668
+ "abstractProperty": "edgeFrom",
669
+ "contentType": "relationships",
670
+ "propertyPath": "data.nav.edgeFrom"
671
+ },
672
+ {
673
+ "abstractProperty": "edgeTo",
674
+ "contentType": "relationships",
675
+ "propertyPath": "data.nav.edgeTo"
676
+ }
677
+ ]
678
+ }
679
+ ],
680
+ "union": false,
681
+ "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."
251
682
  }
252
683
  ],
253
684
  "relationshipDefinitions": [
254
685
  {
255
686
  "id": "knowx-same-as",
256
- "name": "KnowX same as",
257
- "meaning": "Extracted claim matches an existing KnowX claim (classification: known)",
258
- "directionality": "directed",
687
+ "name": "Same as",
688
+ "meaning": "Two knowledge claims refer to the same underlying assertion",
689
+ "directionality": "undirected",
259
690
  "from": {
260
- "abstractType": "KnowXEntity",
691
+ "abstractType": "Content",
261
692
  "path": "sameAs"
262
693
  },
263
694
  "to": {
264
- "abstractType": "KnowXEntity",
265
- "path": "sameAsFrom"
695
+ "abstractType": "Content",
696
+ "path": "sameAs"
266
697
  },
267
698
  "discoveryRules": [
268
699
  {
269
- "id": "from-associate-knowledge-known",
700
+ "id": "from-associate-plan",
270
701
  "kind": "service-plan",
271
- "sourcePath": "known",
272
- "notes": "Emitted by knowx-associate-knowledge relationship plans"
702
+ "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
273
703
  }
274
704
  ]
275
705
  },
276
706
  {
277
707
  "id": "knowx-supports",
278
- "name": "KnowX supports",
279
- "meaning": "A KnowX claim reinforces or supports another KnowX claim",
708
+ "name": "Supports",
709
+ "meaning": "One knowledge claim supports another",
280
710
  "directionality": "directed",
281
711
  "from": {
282
- "abstractType": "KnowXEntity",
712
+ "abstractType": "Content",
283
713
  "path": "supports"
284
714
  },
285
715
  "to": {
286
- "abstractType": "KnowXEntity",
716
+ "abstractType": "Content",
287
717
  "path": "supportedBy"
288
718
  },
289
719
  "discoveryRules": [
290
720
  {
291
- "id": "from-associate-knowledge-supports",
721
+ "id": "from-associate-plan",
292
722
  "kind": "service-plan",
293
- "sourcePath": "supports",
294
- "notes": "Optional support links from associate-knowledge plans"
723
+ "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
295
724
  }
296
725
  ]
297
726
  },
298
727
  {
299
728
  "id": "knowx-contradicts",
300
- "name": "KnowX contradicts",
301
- "meaning": "A KnowX claim conflicts with an existing KnowX claim (classification: contradicts)",
729
+ "name": "Contradicts",
730
+ "meaning": "Two knowledge claims contradict each other",
302
731
  "directionality": "directed",
303
732
  "from": {
304
- "abstractType": "KnowXEntity",
733
+ "abstractType": "Content",
305
734
  "path": "contradicts"
306
735
  },
307
736
  "to": {
308
- "abstractType": "KnowXEntity",
737
+ "abstractType": "Content",
309
738
  "path": "contradictedBy"
310
739
  },
311
740
  "discoveryRules": [
312
741
  {
313
- "id": "from-associate-knowledge-contradicts",
742
+ "id": "from-associate-plan",
314
743
  "kind": "service-plan",
315
- "sourcePath": "contradicts",
316
- "notes": "Emitted by knowx-associate-knowledge relationship plans"
744
+ "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
317
745
  }
318
746
  ]
319
747
  },
320
748
  {
321
749
  "id": "knowx-derived-from",
322
- "name": "KnowX derived from",
323
- "meaning": "A KnowX claim is sourced or derived from another KnowX claim",
750
+ "name": "Derived from claim",
751
+ "meaning": "A knowledge claim is derived from another knowledge claim",
324
752
  "directionality": "directed",
325
753
  "from": {
326
- "abstractType": "KnowXEntity",
754
+ "abstractType": "Content",
327
755
  "path": "derivedFrom"
328
756
  },
329
757
  "to": {
330
- "abstractType": "KnowXEntity",
331
- "path": "derivations"
758
+ "abstractType": "Content",
759
+ "path": "derivedClaims"
760
+ },
761
+ "discoveryRules": [
762
+ {
763
+ "id": "from-associate-plan",
764
+ "kind": "service-plan",
765
+ "notes": "Materialized from knowx-associate-knowledge relationshipPlans"
766
+ }
767
+ ]
768
+ },
769
+ {
770
+ "id": "knowx-derived-from-content",
771
+ "name": "Derived from content",
772
+ "meaning": "A knowledge claim is derived from ingested content",
773
+ "directionality": "directed",
774
+ "from": {
775
+ "abstractType": "Content",
776
+ "path": "derivedFromContent"
777
+ },
778
+ "to": {
779
+ "abstractType": "Content",
780
+ "path": "derivedKnowledge"
332
781
  },
333
782
  "discoveryRules": [
334
783
  {
335
- "id": "from-associate-knowledge-derived",
784
+ "id": "from-associate-plan",
336
785
  "kind": "service-plan",
337
- "sourcePath": "derivedFrom",
338
- "notes": "Optional derivation links from associate-knowledge plans"
786
+ "notes": "Materialized from knowx-associate-knowledge when provenance.lineage.sourceContentId is present"
339
787
  }
340
788
  ]
341
789
  },
342
790
  {
343
791
  "id": "knowx-edge-from",
344
- "name": "KnowX edge from",
345
- "meaning": "Structural link from an EDGE assertion to its domain from-endpoint subject",
792
+ "name": "Edge from",
793
+ "meaning": "A knowledge EDGE claim starts at an entity",
346
794
  "directionality": "directed",
347
795
  "from": {
348
- "abstractType": "KnowXEntity",
796
+ "abstractType": "Content",
349
797
  "path": "edgeFrom"
350
798
  },
351
799
  "to": {
352
- "abstractType": "KnowXEntity",
353
- "path": "incomingKnowxEdges"
800
+ "abstractType": "People",
801
+ "path": "contentEdgesFrom"
354
802
  },
355
803
  "discoveryRules": [
356
804
  {
357
- "id": "from-edge-refs-from",
358
- "kind": "knowx-refs",
359
- "sourcePath": "data.refs.from",
360
- "notes": "Emitted by knowx-associate-entities from EDGE refs.from"
805
+ "id": "from-associate-entities-plan",
806
+ "kind": "service-plan",
807
+ "notes": "Materialized from knowx-associate-entities entityRelationshipPlans"
361
808
  }
362
809
  ]
363
810
  },
364
811
  {
365
812
  "id": "knowx-edge-to",
366
- "name": "KnowX edge to",
367
- "meaning": "Structural link from an EDGE assertion to its domain to-endpoint subject",
813
+ "name": "Edge to",
814
+ "meaning": "A knowledge EDGE claim ends at an entity",
368
815
  "directionality": "directed",
369
816
  "from": {
370
- "abstractType": "KnowXEntity",
817
+ "abstractType": "Content",
371
818
  "path": "edgeTo"
372
819
  },
373
820
  "to": {
374
- "abstractType": "KnowXEntity",
375
- "path": "incomingKnowxEdgesTo"
821
+ "abstractType": "WorkItems",
822
+ "path": "contentEdgesTo"
376
823
  },
377
824
  "discoveryRules": [
378
825
  {
379
- "id": "from-edge-refs-to",
380
- "kind": "knowx-refs",
381
- "sourcePath": "data.refs.to",
382
- "notes": "Emitted by knowx-associate-entities from EDGE refs.to"
826
+ "id": "from-associate-entities-plan",
827
+ "kind": "service-plan",
828
+ "notes": "Materialized from knowx-associate-entities entityRelationshipPlans"
383
829
  }
384
830
  ]
385
831
  }
@@ -390,12 +836,12 @@
390
836
  "sources": [
391
837
  {
392
838
  "id": "knowx-source",
393
- "name": "KnowX knowledge fixture source",
394
- "kind": "rest-fixture",
839
+ "name": "Knowledge source",
840
+ "kind": "rest",
395
841
  "baseUrlEnv": "KNOWX_SOURCE_URL",
396
842
  "defaultBaseUrl": "http://127.0.0.1:5104",
397
843
  "credentialRef": "knowx-source-local",
398
- "connectorRef": "knowx-fixture",
844
+ "connectorRef": "knowx-rest",
399
845
  "endpoints": [
400
846
  "/content"
401
847
  ],
@@ -403,6 +849,22 @@
403
849
  "style": "cursor",
404
850
  "defaultPageSize": 50
405
851
  },
852
+ "streams": [
853
+ {
854
+ "streamId": "content",
855
+ "endpoint": "/content",
856
+ "objectType": "content",
857
+ "dataCategory": "knowledge",
858
+ "identityPath": "id",
859
+ "modes": [
860
+ "knowledge"
861
+ ],
862
+ "pageSize": 10,
863
+ "checkpoint": {
864
+ "method": "cursor"
865
+ }
866
+ }
867
+ ],
406
868
  "routes": [
407
869
  {
408
870
  "endpoint": "/content",
@@ -413,93 +875,319 @@
413
875
  "modes": [
414
876
  "knowledge"
415
877
  ],
416
- "pageSize": 10
878
+ "pageSize": 10,
879
+ "checkpoint": {
880
+ "method": "cursor"
881
+ }
882
+ }
883
+ ]
884
+ },
885
+ {
886
+ "id": "knowx-managed",
887
+ "name": "Knowledge Drive (managed)",
888
+ "kind": "knowx-managed",
889
+ "connectorRef": "knowx-managed",
890
+ "endpoints": [
891
+ "/items"
892
+ ],
893
+ "pagination": {
894
+ "style": "page",
895
+ "defaultPageSize": 25
896
+ },
897
+ "streams": [
898
+ {
899
+ "streamId": "items",
900
+ "endpoint": "/items",
901
+ "objectType": "content",
902
+ "dataCategory": "knowledge",
903
+ "identityPath": "id",
904
+ "modes": [
905
+ "knowledge"
906
+ ],
907
+ "pageSize": 25,
908
+ "checkpoint": {
909
+ "method": "cursor"
910
+ }
911
+ }
912
+ ],
913
+ "routes": [
914
+ {
915
+ "endpoint": "/items",
916
+ "objectType": "content",
917
+ "dataCategory": "knowledge",
918
+ "identityPath": "id",
919
+ "primaryKind": "contentId",
920
+ "modes": [
921
+ "knowledge"
922
+ ],
923
+ "pageSize": 25,
924
+ "checkpoint": {
925
+ "method": "cursor"
926
+ }
417
927
  }
418
928
  ]
419
929
  }
420
930
  ],
421
931
  "services": [
932
+ {
933
+ "id": "knowx-folder-pull",
934
+ "name": "Folder connector pull",
935
+ "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.",
936
+ "role": "connector",
937
+ "capabilities": [
938
+ "analyze"
939
+ ],
940
+ "memorixAccess": [
941
+ "raw",
942
+ "checkpoints"
943
+ ],
944
+ "inputs": [
945
+ {
946
+ "id": "sourceId",
947
+ "control": true,
948
+ "description": "Managed folder ContentSource id"
949
+ },
950
+ {
951
+ "id": "relativePath",
952
+ "control": true,
953
+ "description": "Optional single relative path for targeted ingest"
954
+ },
955
+ {
956
+ "id": "triggerReason",
957
+ "control": true,
958
+ "description": "manual | scheduled | watch | delete"
959
+ }
960
+ ],
961
+ "outputs": [
962
+ {
963
+ "id": "pullSummary",
964
+ "control": true,
965
+ "description": "Pull status, discovered counts, rawItemIds"
966
+ },
967
+ {
968
+ "id": "rawItemIds",
969
+ "control": true,
970
+ "description": "Relative-path identities landed as content/raw"
971
+ }
972
+ ],
973
+ "invocation": {
974
+ "kind": "worker",
975
+ "operation": "knowx-folder-pull"
976
+ }
977
+ },
978
+ {
979
+ "id": "knowx-managed-pull",
980
+ "name": "Managed drive pull",
981
+ "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.",
982
+ "role": "connector",
983
+ "capabilities": [
984
+ "analyze"
985
+ ],
986
+ "memorixAccess": [
987
+ "raw",
988
+ "checkpoints"
989
+ ],
990
+ "inputs": [
991
+ {
992
+ "id": "itemIds",
993
+ "control": true,
994
+ "description": "Managed Knowledge Drive item ids to pull"
995
+ },
996
+ {
997
+ "id": "eventCursor",
998
+ "control": true,
999
+ "description": "Optional managed event cursor"
1000
+ }
1001
+ ],
1002
+ "outputs": [
1003
+ {
1004
+ "id": "pullSummary",
1005
+ "control": true,
1006
+ "description": "Pull status and counts"
1007
+ },
1008
+ {
1009
+ "id": "rawItemIds",
1010
+ "control": true,
1011
+ "description": "Managed item identities landed as content/raw"
1012
+ }
1013
+ ],
1014
+ "invocation": {
1015
+ "kind": "worker",
1016
+ "operation": "knowx-managed-pull"
1017
+ }
1018
+ },
1019
+ {
1020
+ "id": "knowx-promote-content",
1021
+ "name": "Promote content",
1022
+ "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.",
1023
+ "role": "connector",
1024
+ "capabilities": [
1025
+ "analyze"
1026
+ ],
1027
+ "memorixAccess": [
1028
+ "raw",
1029
+ "explore"
1030
+ ],
1031
+ "inputs": [
1032
+ {
1033
+ "id": "sourceId",
1034
+ "control": true,
1035
+ "description": "Managed folder source id"
1036
+ },
1037
+ {
1038
+ "id": "rawItemIds",
1039
+ "control": true,
1040
+ "description": "Raw identities from knowx-folder-pull"
1041
+ },
1042
+ {
1043
+ "id": "pullSummary",
1044
+ "control": true,
1045
+ "description": "Optional pull summary carrying rawItemIds"
1046
+ }
1047
+ ],
1048
+ "outputs": [
1049
+ {
1050
+ "id": "contentDrafts",
1051
+ "abstractType": "Content",
1052
+ "description": "Canonical ContentRecordData drafts on Content"
1053
+ },
1054
+ {
1055
+ "id": "contentIds",
1056
+ "abstractType": "Content",
1057
+ "description": "Promoted Content record ids"
1058
+ }
1059
+ ],
1060
+ "invocation": {
1061
+ "kind": "worker",
1062
+ "operation": "knowx-promote-content"
1063
+ }
1064
+ },
422
1065
  {
423
1066
  "id": "knowx-extract",
424
- "name": "KnowX extract",
425
- "description": "Extract KnowX NODE/EDGE drafts from text + knowledge source. Returns drafts only — does not persist. Pipeline write-record applies knowx content.",
1067
+ "name": "Extract knowledge",
1068
+ "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).",
1069
+ "role": "agent",
426
1070
  "capabilities": [
427
1071
  "analyze"
428
1072
  ],
1073
+ "memorixAccess": [
1074
+ "explore"
1075
+ ],
429
1076
  "inputs": [
430
1077
  {
431
1078
  "id": "text",
432
- "description": "Input text to analyze (inline string or resolved from source)"
1079
+ "control": true,
1080
+ "description": "Input text to analyze (inline string or resolved from Content)"
433
1081
  },
434
1082
  {
435
1083
  "id": "knowledgeSource",
436
- "description": "Exact source bytes / Memory DataRef + provenance envelope (docId, docType, retrievedAt)"
1084
+ "abstractType": "Content",
1085
+ "description": "Exact source bytes / provenance envelope for Content"
1086
+ },
1087
+ {
1088
+ "id": "contentId",
1089
+ "abstractType": "Content",
1090
+ "description": "Promoted Content record id — open via Explore"
1091
+ },
1092
+ {
1093
+ "id": "contentIds",
1094
+ "abstractType": "Content",
1095
+ "description": "Batch of promoted Content ids"
1096
+ },
1097
+ {
1098
+ "id": "contentDrafts",
1099
+ "abstractType": "Content",
1100
+ "description": "In-pipeline ContentRecordData from knowx-promote-content"
437
1101
  }
438
1102
  ],
439
1103
  "outputs": [
440
1104
  {
441
1105
  "id": "knowxDrafts",
442
- "description": "Array of knowx content drafts (NODE facets + EDGE assertions) with mandatory provenance"
1106
+ "abstractType": "Content",
1107
+ "description": "Array of knowx knowledge-item drafts (NODE/EDGE + data.identity.category claim|fact|opinion|assumption) with mandatory provenance and content lineage"
443
1108
  }
444
1109
  ],
1110
+ "aiService": {
1111
+ "aiServiceType": "skill",
1112
+ "itemId": "knowx.extract",
1113
+ "endpointEnv": "AI_SKILLS_URL"
1114
+ },
445
1115
  "invocation": {
446
1116
  "kind": "worker",
447
- "operation": "knowx-extract"
1117
+ "operation": "knowx-extract",
1118
+ "endpointEnv": "KNOWX_EXTRACT_WORKER_URL",
1119
+ "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)."
448
1120
  }
449
1121
  },
450
1122
  {
451
1123
  "id": "knowx-associate-knowledge",
452
- "name": "KnowX associate knowledge",
453
- "description": "Classify extracted drafts against existing KnowX scope: known, novel, contradicts. Returns classification buckets + candidate knowledge relationship plans. Does not persist.",
1124
+ "name": "Associate knowledge",
1125
+ "description": "Classify extracted drafts against existing Content scope: known, novel, contradicts. When aiService is bound, Memorix invokes Catalox skill knowx.associate-knowledge and pushes existingKnowx from Explore. Worker fallback fetches via memorix callback or accepts pushed existingKnowx. Returns classification buckets + candidate knowledge relationship plans. Does not persist.",
1126
+ "role": "agent",
454
1127
  "capabilities": [
455
1128
  "analyze"
456
1129
  ],
1130
+ "memorixAccess": [
1131
+ "explore"
1132
+ ],
457
1133
  "inputs": [
458
1134
  {
459
- "id": "drafts",
460
- "description": "KnowX drafts from knowx-extract (or already written knowx content)"
1135
+ "id": "knowxDrafts",
1136
+ "abstractType": "Content",
1137
+ "description": "Drafts from knowx-extract"
461
1138
  },
462
1139
  {
463
1140
  "id": "existingKnowx",
464
- "description": "Existing KnowXEntity scope (contentType=knowx records in org)"
1141
+ "abstractType": "Content",
1142
+ "description": "Optional pushed existing Content for offline/fixture runs"
465
1143
  }
466
1144
  ],
467
1145
  "outputs": [
468
1146
  {
469
1147
  "id": "classification",
470
- "description": "{ known[], novel[], contradicts[] } draft/claim references"
1148
+ "abstractType": "Content",
1149
+ "description": "known / novel / contradicts buckets"
471
1150
  },
472
1151
  {
473
1152
  "id": "relationshipPlans",
474
- "description": "Candidate four-field plans for knowx-same-as / knowx-supports / knowx-contradicts / knowx-derived-from"
1153
+ "abstractType": "Content",
1154
+ "description": "Candidate knowledge relationship plans on Content"
475
1155
  }
476
1156
  ],
1157
+ "aiService": {
1158
+ "aiServiceType": "skill",
1159
+ "itemId": "knowx.associate-knowledge",
1160
+ "endpointEnv": "AI_SKILLS_URL"
1161
+ },
477
1162
  "invocation": {
478
1163
  "kind": "worker",
479
- "operation": "knowx-associate-knowledge"
1164
+ "operation": "knowx-associate-knowledge",
1165
+ "notes": "Worker fallback when AI_SKILLS_URL unset / compile cannot resolve skill origin."
480
1166
  }
481
1167
  },
482
1168
  {
483
1169
  "id": "knowx-associate-entities",
484
- "name": "KnowX associate entities",
485
- "description": "Associate novel KnowX drafts to existing domain entities. Returns entity link candidate plans (knowx-edge-from/to and/or domain defs). Does not persist.",
1170
+ "name": "Associate entities",
1171
+ "description": "Plan EDGE endpoint relationships for novel drafts against entity abstracts (People, WorkItems) and Content. Does not persist.",
1172
+ "role": "agent",
486
1173
  "capabilities": [
487
1174
  "analyze"
488
1175
  ],
1176
+ "memorixAccess": [
1177
+ "explore"
1178
+ ],
489
1179
  "inputs": [
490
1180
  {
491
1181
  "id": "novelDrafts",
492
- "description": "Novel KnowX drafts from knowx-associate-knowledge classification"
493
- },
494
- {
495
- "id": "entityCatalog",
496
- "description": "Entity subjects / abstract projections available in scope (People, WorkItems, …)"
1182
+ "abstractType": "Content",
1183
+ "description": "Novel drafts from associate-knowledge classification"
497
1184
  }
498
1185
  ],
499
1186
  "outputs": [
500
1187
  {
501
1188
  "id": "entityRelationshipPlans",
502
- "description": "Candidate four-field plans for knowx-edge-from / knowx-edge-to (and optional domain relationship defs)"
1189
+ "abstractType": "People",
1190
+ "description": "EDGE endpoint relationship plans toward People, WorkItems, and Content abstracts"
503
1191
  }
504
1192
  ],
505
1193
  "invocation": {
@@ -514,60 +1202,332 @@
514
1202
  "name": "Scheduled knowledge pull from knowx-source",
515
1203
  "trigger": "scheduled",
516
1204
  "mode": "knowledge",
1205
+ "description": "Memory pull from knowx-source fixture (CF knowx-rest). Promote/extract are separate pipelines.",
517
1206
  "steps": [
518
1207
  {
519
1208
  "id": "pull",
520
1209
  "kind": "memory-pull",
521
1210
  "sourceId": "knowx-source"
1211
+ }
1212
+ ]
1213
+ },
1214
+ {
1215
+ "id": "knowx-ingest-associate",
1216
+ "name": "Ingest then associate knowledge and entities",
1217
+ "trigger": "explicit",
1218
+ "description": "extract → write knowx → associate-knowledge → relationship-write → associate-entities → relationship-write. Services do not persist; write-record and relationship-write do.",
1219
+ "steps": [
1220
+ {
1221
+ "id": "extract",
1222
+ "kind": "analyze",
1223
+ "serviceId": "knowx-extract"
522
1224
  },
523
1225
  {
524
- "id": "land-raw",
525
- "kind": "write-raw"
1226
+ "id": "write-knowx",
1227
+ "kind": "write-record",
1228
+ "contentType": "knowx",
1229
+ "dependsOn": [
1230
+ "extract"
1231
+ ],
1232
+ "inputs": [
1233
+ {
1234
+ "fromStep": "extract",
1235
+ "key": "extract"
1236
+ }
1237
+ ]
526
1238
  },
527
1239
  {
528
- "id": "normalize",
529
- "kind": "normalize"
1240
+ "id": "associate-knowledge",
1241
+ "kind": "analyze",
1242
+ "serviceId": "knowx-associate-knowledge",
1243
+ "dependsOn": [
1244
+ "write-knowx"
1245
+ ],
1246
+ "inputs": [
1247
+ {
1248
+ "fromStep": "extract",
1249
+ "key": "extract"
1250
+ }
1251
+ ]
530
1252
  },
531
1253
  {
532
- "id": "promote",
533
- "kind": "promote-snapshots"
1254
+ "id": "write-knowledge-links",
1255
+ "kind": "relationship-write",
1256
+ "dependsOn": [
1257
+ "associate-knowledge"
1258
+ ],
1259
+ "inputs": [
1260
+ {
1261
+ "fromStep": "associate-knowledge",
1262
+ "key": "associate-knowledge"
1263
+ }
1264
+ ],
1265
+ "notes": "Consumes relationshipPlans → knowx-same-as / knowx-supports / knowx-contradicts / knowx-derived-from"
1266
+ },
1267
+ {
1268
+ "id": "associate-entities",
1269
+ "kind": "analyze",
1270
+ "serviceId": "knowx-associate-entities",
1271
+ "dependsOn": [
1272
+ "write-knowledge-links"
1273
+ ],
1274
+ "inputs": [
1275
+ {
1276
+ "fromStep": "associate-knowledge",
1277
+ "key": "associate-knowledge"
1278
+ }
1279
+ ]
1280
+ },
1281
+ {
1282
+ "id": "write-entity-links",
1283
+ "kind": "relationship-write",
1284
+ "dependsOn": [
1285
+ "associate-entities"
1286
+ ],
1287
+ "inputs": [
1288
+ {
1289
+ "fromStep": "associate-entities",
1290
+ "key": "associate-entities"
1291
+ }
1292
+ ],
1293
+ "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
534
1294
  }
535
1295
  ]
536
1296
  },
537
1297
  {
538
- "id": "knowx-ingest-associate",
539
- "name": "KnowX ingest then associate knowledge and entities",
1298
+ "id": "knowx-ingest-content-source",
1299
+ "name": "Folder connector ingest then derive knowledge",
540
1300
  "trigger": "explicit",
541
- "description": "extract → write knowx → associate-knowledge → relationship-write → associate-entities → relationship-write. Services do not persist; write-record and relationship-write do. Deterministic fixtures; no live AI required.",
1301
+ "description": "knowx-folder-pull (exact raw via CF collectStream) → knowx-promote-content (format→Markdown snapshots) → knowx-extract → write knowx → associate-knowledge → relationship-write → associate-entities → relationship-write.",
542
1302
  "steps": [
1303
+ {
1304
+ "id": "folder-pull",
1305
+ "kind": "analyze",
1306
+ "serviceId": "knowx-folder-pull"
1307
+ },
1308
+ {
1309
+ "id": "promote-content",
1310
+ "kind": "analyze",
1311
+ "serviceId": "knowx-promote-content",
1312
+ "dependsOn": [
1313
+ "folder-pull"
1314
+ ],
1315
+ "inputs": [
1316
+ {
1317
+ "fromStep": "folder-pull",
1318
+ "key": "folder-pull"
1319
+ }
1320
+ ]
1321
+ },
543
1322
  {
544
1323
  "id": "extract",
545
1324
  "kind": "analyze",
546
- "serviceId": "knowx-extract"
1325
+ "serviceId": "knowx-extract",
1326
+ "dependsOn": [
1327
+ "promote-content"
1328
+ ],
1329
+ "inputs": [
1330
+ {
1331
+ "fromStep": "promote-content",
1332
+ "key": "promote-content"
1333
+ }
1334
+ ]
547
1335
  },
548
1336
  {
549
1337
  "id": "write-knowx",
550
1338
  "kind": "write-record",
551
- "contentType": "knowx"
1339
+ "contentType": "knowx",
1340
+ "dependsOn": [
1341
+ "extract"
1342
+ ],
1343
+ "inputs": [
1344
+ {
1345
+ "fromStep": "extract",
1346
+ "key": "extract"
1347
+ }
1348
+ ]
552
1349
  },
553
1350
  {
554
1351
  "id": "associate-knowledge",
555
1352
  "kind": "analyze",
556
- "serviceId": "knowx-associate-knowledge"
1353
+ "serviceId": "knowx-associate-knowledge",
1354
+ "dependsOn": [
1355
+ "write-knowx"
1356
+ ],
1357
+ "inputs": [
1358
+ {
1359
+ "fromStep": "extract",
1360
+ "key": "extract"
1361
+ },
1362
+ {
1363
+ "fromStep": "write-knowx",
1364
+ "key": "write-knowx"
1365
+ }
1366
+ ]
557
1367
  },
558
1368
  {
559
1369
  "id": "write-knowledge-links",
560
1370
  "kind": "relationship-write",
561
- "notes": "Consumes relationshipPlans → knowx-same-as / knowx-supports / knowx-contradicts / knowx-derived-from"
1371
+ "dependsOn": [
1372
+ "associate-knowledge"
1373
+ ],
1374
+ "inputs": [
1375
+ {
1376
+ "fromStep": "associate-knowledge",
1377
+ "key": "associate-knowledge"
1378
+ }
1379
+ ],
1380
+ "notes": "Consumes relationshipPlans including knowx-derived-from-content"
1381
+ },
1382
+ {
1383
+ "id": "associate-entities",
1384
+ "kind": "analyze",
1385
+ "serviceId": "knowx-associate-entities",
1386
+ "dependsOn": [
1387
+ "write-knowledge-links"
1388
+ ],
1389
+ "inputs": [
1390
+ {
1391
+ "fromStep": "associate-knowledge",
1392
+ "key": "associate-knowledge"
1393
+ },
1394
+ {
1395
+ "fromStep": "extract",
1396
+ "key": "extract"
1397
+ }
1398
+ ]
1399
+ },
1400
+ {
1401
+ "id": "write-entity-links",
1402
+ "kind": "relationship-write",
1403
+ "dependsOn": [
1404
+ "associate-entities"
1405
+ ],
1406
+ "inputs": [
1407
+ {
1408
+ "fromStep": "associate-entities",
1409
+ "key": "associate-entities"
1410
+ }
1411
+ ],
1412
+ "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
1413
+ }
1414
+ ]
1415
+ },
1416
+ {
1417
+ "id": "knowx-ingest-managed-item",
1418
+ "name": "Managed Drive item ingest then derive knowledge",
1419
+ "trigger": "explicit",
1420
+ "description": "knowx-managed-pull (exact raw via CF collectStream) → knowx-promote-content → knowx-extract → write knowx → associate-knowledge → relationship-write → associate-entities → relationship-write.",
1421
+ "steps": [
1422
+ {
1423
+ "id": "managed-pull",
1424
+ "kind": "analyze",
1425
+ "serviceId": "knowx-managed-pull"
1426
+ },
1427
+ {
1428
+ "id": "promote-content",
1429
+ "kind": "analyze",
1430
+ "serviceId": "knowx-promote-content",
1431
+ "dependsOn": [
1432
+ "managed-pull"
1433
+ ],
1434
+ "inputs": [
1435
+ {
1436
+ "fromStep": "managed-pull",
1437
+ "key": "managed-pull"
1438
+ }
1439
+ ]
1440
+ },
1441
+ {
1442
+ "id": "extract",
1443
+ "kind": "analyze",
1444
+ "serviceId": "knowx-extract",
1445
+ "dependsOn": [
1446
+ "promote-content"
1447
+ ],
1448
+ "inputs": [
1449
+ {
1450
+ "fromStep": "promote-content",
1451
+ "key": "promote-content"
1452
+ }
1453
+ ]
1454
+ },
1455
+ {
1456
+ "id": "write-knowx",
1457
+ "kind": "write-record",
1458
+ "contentType": "knowx",
1459
+ "dependsOn": [
1460
+ "extract"
1461
+ ],
1462
+ "inputs": [
1463
+ {
1464
+ "fromStep": "extract",
1465
+ "key": "extract"
1466
+ }
1467
+ ]
1468
+ },
1469
+ {
1470
+ "id": "associate-knowledge",
1471
+ "kind": "analyze",
1472
+ "serviceId": "knowx-associate-knowledge",
1473
+ "dependsOn": [
1474
+ "write-knowx"
1475
+ ],
1476
+ "inputs": [
1477
+ {
1478
+ "fromStep": "extract",
1479
+ "key": "extract"
1480
+ },
1481
+ {
1482
+ "fromStep": "write-knowx",
1483
+ "key": "write-knowx"
1484
+ }
1485
+ ]
1486
+ },
1487
+ {
1488
+ "id": "write-knowledge-links",
1489
+ "kind": "relationship-write",
1490
+ "dependsOn": [
1491
+ "associate-knowledge"
1492
+ ],
1493
+ "inputs": [
1494
+ {
1495
+ "fromStep": "associate-knowledge",
1496
+ "key": "associate-knowledge"
1497
+ }
1498
+ ],
1499
+ "notes": "Consumes relationshipPlans including knowx-derived-from-content"
562
1500
  },
563
1501
  {
564
1502
  "id": "associate-entities",
565
1503
  "kind": "analyze",
566
- "serviceId": "knowx-associate-entities"
1504
+ "serviceId": "knowx-associate-entities",
1505
+ "dependsOn": [
1506
+ "write-knowledge-links"
1507
+ ],
1508
+ "inputs": [
1509
+ {
1510
+ "fromStep": "associate-knowledge",
1511
+ "key": "associate-knowledge"
1512
+ },
1513
+ {
1514
+ "fromStep": "extract",
1515
+ "key": "extract"
1516
+ }
1517
+ ]
567
1518
  },
568
1519
  {
569
1520
  "id": "write-entity-links",
570
1521
  "kind": "relationship-write",
1522
+ "dependsOn": [
1523
+ "associate-entities"
1524
+ ],
1525
+ "inputs": [
1526
+ {
1527
+ "fromStep": "associate-entities",
1528
+ "key": "associate-entities"
1529
+ }
1530
+ ],
571
1531
  "notes": "Consumes entityRelationshipPlans → knowx-edge-from / knowx-edge-to"
572
1532
  }
573
1533
  ]