automated-qa 0.11.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 (187) hide show
  1. package/LICENSE +22 -0
  2. package/NOTICE +9 -0
  3. package/README.md +100 -0
  4. package/SKILL.md +65 -0
  5. package/agent/prebuilt/darwin-universal/qa-agent +0 -0
  6. package/agent/prebuilt/linux-arm64/qa-agent +0 -0
  7. package/agent/prebuilt/linux-x64/qa-agent +0 -0
  8. package/agent/release-manifest.json +31 -0
  9. package/bin/autonomous-cache.mjs +2 -0
  10. package/bin/bench-generate.mjs +232 -0
  11. package/bin/bench-graph-query.mjs +2 -0
  12. package/bin/bench-score.mjs +10 -0
  13. package/bin/classify.mjs +15 -0
  14. package/bin/coherence-playwright.mjs +1 -0
  15. package/bin/coherence-runner.mjs +6 -0
  16. package/bin/crud-runner.mjs +12 -0
  17. package/bin/experiment-executor.mjs +10 -0
  18. package/bin/experiment-runner.mjs +3 -0
  19. package/bin/inventory.mjs +17 -0
  20. package/bin/probe.js +879 -0
  21. package/bin/qa.mjs +16 -0
  22. package/bin/rules.mjs +5 -0
  23. package/bin/run-benchmarks.mjs +2 -0
  24. package/bin/runtime-packs.mjs +3 -0
  25. package/bin/semantic-explorer.mjs +3 -0
  26. package/bin/shadow-collector.mjs +3 -0
  27. package/bin/shadow-replay.mjs +6 -0
  28. package/bin/soak-marathon.mjs +15 -0
  29. package/bin/sweep.mjs +43 -0
  30. package/bin/validate-priors.mjs +3 -0
  31. package/bin/verify-artifacts.mjs +3 -0
  32. package/bin/verify-manifest.mjs +2 -0
  33. package/install-skill.sh +45 -0
  34. package/lib/qa/agent-availability.mjs +1 -0
  35. package/lib/qa/agent-result.mjs +1 -0
  36. package/lib/qa/analysis.mjs +5 -0
  37. package/lib/qa/atlas-coverage.mjs +11 -0
  38. package/lib/qa/atlas-v1.mjs +1 -0
  39. package/lib/qa/atlas.mjs +2 -0
  40. package/lib/qa/auth/coordinator.mjs +1 -0
  41. package/lib/qa/auth/launcher.mjs +3 -0
  42. package/lib/qa/auth/lease.mjs +1 -0
  43. package/lib/qa/auth/oracle.mjs +1 -0
  44. package/lib/qa/auth/personas.mjs +3 -0
  45. package/lib/qa/autonomous-cache.mjs +3 -0
  46. package/lib/qa/block-ledger.mjs +1 -0
  47. package/lib/qa/capture-report.mjs +63 -0
  48. package/lib/qa/ci.mjs +11 -0
  49. package/lib/qa/cli.mjs +538 -0
  50. package/lib/qa/coherence/analyze.mjs +1 -0
  51. package/lib/qa/coherence/cache-key.mjs +6 -0
  52. package/lib/qa/coherence/causes.mjs +1 -0
  53. package/lib/qa/coherence/concurrency.mjs +1 -0
  54. package/lib/qa/coherence/contracts.mjs +1 -0
  55. package/lib/qa/coherence/entity-aliases.mjs +1 -0
  56. package/lib/qa/coherence/enums.mjs +1 -0
  57. package/lib/qa/coherence/family-report.mjs +1 -0
  58. package/lib/qa/coherence/flow-pool.mjs +1 -0
  59. package/lib/qa/coherence/graph.mjs +1 -0
  60. package/lib/qa/coherence/identity.mjs +1 -0
  61. package/lib/qa/coherence/ir.mjs +4 -0
  62. package/lib/qa/coherence/navigation.mjs +1 -0
  63. package/lib/qa/coherence/observe.mjs +2 -0
  64. package/lib/qa/coherence/offline.mjs +1 -0
  65. package/lib/qa/coherence/plan-join.mjs +1 -0
  66. package/lib/qa/coherence/provenance.mjs +2 -0
  67. package/lib/qa/coherence/report.mjs +1 -0
  68. package/lib/qa/coherence/representations.mjs +1 -0
  69. package/lib/qa/coherence/risk.mjs +2 -0
  70. package/lib/qa/coherence/structural-js.mjs +11 -0
  71. package/lib/qa/coherence/symbols.mjs +6 -0
  72. package/lib/qa/coherence/tanstack.mjs +4 -0
  73. package/lib/qa/coherence/views.mjs +1 -0
  74. package/lib/qa/coherence-planner.mjs +1 -0
  75. package/lib/qa/command-catalog.mjs +2 -0
  76. package/lib/qa/commands/dev.mjs +1 -0
  77. package/lib/qa/commands/fix.mjs +1 -0
  78. package/lib/qa/commands/impl/analysis.mjs +1 -0
  79. package/lib/qa/commands/impl/atlas.mjs +1 -0
  80. package/lib/qa/commands/impl/coherence.mjs +1 -0
  81. package/lib/qa/commands/impl/crud.mjs +2 -0
  82. package/lib/qa/commands/impl/doctor.mjs +1 -0
  83. package/lib/qa/commands/impl/experiments.mjs +1 -0
  84. package/lib/qa/commands/impl/fp.mjs +1 -0
  85. package/lib/qa/commands/impl/graph.mjs +1 -0
  86. package/lib/qa/commands/impl/invariants.mjs +1 -0
  87. package/lib/qa/commands/impl/lanes.mjs +7 -0
  88. package/lib/qa/commands/impl/ledger.mjs +11 -0
  89. package/lib/qa/commands/impl/loop.mjs +1 -0
  90. package/lib/qa/commands/impl/marathon.mjs +1 -0
  91. package/lib/qa/commands/impl/next.mjs +38 -0
  92. package/lib/qa/commands/impl/report.mjs +4 -0
  93. package/lib/qa/commands/impl/research.mjs +4 -0
  94. package/lib/qa/commands/impl/selftest.mjs +1 -0
  95. package/lib/qa/commands/impl/serve.mjs +1 -0
  96. package/lib/qa/commands/impl/shadow.mjs +1 -0
  97. package/lib/qa/commands/impl/stability.mjs +1 -0
  98. package/lib/qa/commands/impl/triage.mjs +1 -0
  99. package/lib/qa/commands/impl/validate.mjs +4 -0
  100. package/lib/qa/commands/impl/version.mjs +1 -0
  101. package/lib/qa/commands/impl/watch.mjs +1 -0
  102. package/lib/qa/commands/init.mjs +6 -0
  103. package/lib/qa/commands/measure.mjs +1 -0
  104. package/lib/qa/commands/run.mjs +1 -0
  105. package/lib/qa/commands/show.mjs +1 -0
  106. package/lib/qa/commands/verify.mjs +6 -0
  107. package/lib/qa/deepening.mjs +1 -0
  108. package/lib/qa/denominators.mjs +1 -0
  109. package/lib/qa/depth.mjs +4 -0
  110. package/lib/qa/doctor.mjs +2 -0
  111. package/lib/qa/experiments-default.mjs +1 -0
  112. package/lib/qa/fix-lanes.mjs +3 -0
  113. package/lib/qa/forced-states.mjs +1 -0
  114. package/lib/qa/fp.mjs +2 -0
  115. package/lib/qa/fs.mjs +6 -0
  116. package/lib/qa/graph-schema.mjs +2 -0
  117. package/lib/qa/graph.mjs +3 -0
  118. package/lib/qa/harness-plan.mjs +3 -0
  119. package/lib/qa/init.mjs +5 -0
  120. package/lib/qa/integrity.mjs +1 -0
  121. package/lib/qa/invariants.mjs +84 -0
  122. package/lib/qa/jcs.mjs +1 -0
  123. package/lib/qa/lanes.mjs +1 -0
  124. package/lib/qa/loop.mjs +7 -0
  125. package/lib/qa/marathon-coherence.mjs +1 -0
  126. package/lib/qa/marathon-phases.mjs +1 -0
  127. package/lib/qa/marathon-wait.mjs +3 -0
  128. package/lib/qa/marathon.mjs +5 -0
  129. package/lib/qa/mode-coverage.mjs +1 -0
  130. package/lib/qa/mutation-policy.mjs +1 -0
  131. package/lib/qa/pattern-ledger.mjs +3 -0
  132. package/lib/qa/pending.mjs +1 -0
  133. package/lib/qa/proc.mjs +4 -0
  134. package/lib/qa/recommend.mjs +1 -0
  135. package/lib/qa/release-manifest.mjs +1 -0
  136. package/lib/qa/report-html.mjs +178 -0
  137. package/lib/qa/reports.mjs +2 -0
  138. package/lib/qa/request-evidence.mjs +1 -0
  139. package/lib/qa/research.mjs +20 -0
  140. package/lib/qa/routing.mjs +1 -0
  141. package/lib/qa/runs.mjs +1 -0
  142. package/lib/qa/schema.mjs +1 -0
  143. package/lib/qa/serve.mjs +4 -0
  144. package/lib/qa/server.mjs +1 -0
  145. package/lib/qa/source-snapshot.mjs +3 -0
  146. package/lib/qa/stability.mjs +3 -0
  147. package/lib/qa/state-evidence.mjs +1 -0
  148. package/lib/qa/sweep-incremental.mjs +1 -0
  149. package/lib/qa/triage.mjs +2 -0
  150. package/lib/qa/verdict.mjs +1 -0
  151. package/lib/qa/watch.mjs +2 -0
  152. package/package.json +62 -0
  153. package/references/ATLAS-COVERAGE.md +231 -0
  154. package/references/atlas-v1.md +318 -0
  155. package/references/atlas.md +338 -0
  156. package/references/verify.crud.example.json +1 -0
  157. package/references/verify.impact.example.json +1 -0
  158. package/references/verify.shadow.example.json +1 -0
  159. package/schemas/agent-result.schema.json +135 -0
  160. package/schemas/analysis.schema.json +15 -0
  161. package/schemas/classify.schema.json +61 -0
  162. package/schemas/coherence-ir.schema.json +1585 -0
  163. package/schemas/coherence-observed.schema.json +1171 -0
  164. package/schemas/coherence-plan.schema.json +77 -0
  165. package/schemas/coherence-risk.schema.json +46 -0
  166. package/schemas/crud-observed.schema.json +118 -0
  167. package/schemas/experiment-execution.schema.json +82 -0
  168. package/schemas/graph-edge.schema.json +22 -0
  169. package/schemas/graph-node.schema.json +81 -0
  170. package/schemas/graph.schema.json +2493 -0
  171. package/schemas/identity-oracle.schema.json +19 -0
  172. package/schemas/inventory.schema.json +2167 -0
  173. package/schemas/lanes-plan.schema.json +52 -0
  174. package/schemas/next.schema.json +54 -0
  175. package/schemas/personas.schema.json +52 -0
  176. package/schemas/research.schema.json +192 -0
  177. package/schemas/run.schema.json +160 -0
  178. package/schemas/shadow-replay.schema.json +68 -0
  179. package/schemas/stability.schema.json +92 -0
  180. package/schemas/sweep.schema.json +239 -0
  181. package/schemas/v1/agent-result.schema.json +106 -0
  182. package/schemas/v1/run.schema.json +96 -0
  183. package/schemas/verify-crud.schema.json +37 -0
  184. package/schemas/verify-read-only.schema.json +37 -0
  185. package/templates/github-workflow.yml +80 -0
  186. package/templates/pre-commit.sample +22 -0
  187. package/verify.sh +385 -0
@@ -0,0 +1,2493 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://frontend-verify.dev/schemas/graph.schema.json",
4
+ "title": "semantic graph v2",
5
+ "description": "The one current semantic-graph root. Transcribed from lib/qa/coherence/graph.mjs, which remains the authority: schema validity is necessary and NOT sufficient. Storage-ID recomputation, the endpoint matrix, duplicate/conflict detection, unresolved attestation, coverage arithmetic and the unresolved ledger are semantic checks that only validateSemanticGraph can make.",
6
+ "type": "object",
7
+ "required": [
8
+ "artifact",
9
+ "schemaVersion",
10
+ "coverage",
11
+ "nodes",
12
+ "edges"
13
+ ],
14
+ "additionalProperties": false,
15
+ "properties": {
16
+ "artifact": {
17
+ "const": "frontend-verify.semantic-graph"
18
+ },
19
+ "schemaVersion": {
20
+ "const": 2
21
+ },
22
+ "coverage": {
23
+ "$ref": "#/$defs/coverage"
24
+ },
25
+ "nodes": {
26
+ "type": "array",
27
+ "items": {
28
+ "$ref": "#/$defs/node"
29
+ }
30
+ },
31
+ "edges": {
32
+ "type": "array",
33
+ "items": {
34
+ "$ref": "#/$defs/edge"
35
+ }
36
+ }
37
+ },
38
+ "$defs": {
39
+ "nodeId": {
40
+ "type": "string",
41
+ "pattern": "^graph:v2:node:[a-f0-9]{64}$"
42
+ },
43
+ "edgeId": {
44
+ "type": "string",
45
+ "pattern": "^graph:v2:edge:[a-f0-9]{64}$"
46
+ },
47
+ "recordRef": {
48
+ "type": "string",
49
+ "pattern": "^graph:v2:(node|edge):[a-f0-9]{64}$"
50
+ },
51
+ "domainId": {
52
+ "type": "string",
53
+ "pattern": "^[a-f0-9]{64}$"
54
+ },
55
+ "readId": {
56
+ "type": "string",
57
+ "pattern": "^sha256:[a-f0-9]{64}$"
58
+ },
59
+ "certainty": {
60
+ "enum": [
61
+ "exact",
62
+ "resolved",
63
+ "coarse",
64
+ "unresolved",
65
+ "uncertain"
66
+ ]
67
+ },
68
+ "repoPath": {
69
+ "type": [
70
+ "string",
71
+ "null"
72
+ ],
73
+ "pattern": "^(?![/\\\\])(?![A-Za-z]:)(?!.*(?:^|[/\\\\])\\.\\.(?:[/\\\\]|$)).{1,512}$"
74
+ },
75
+ "span": {
76
+ "anyOf": [
77
+ {
78
+ "type": "null"
79
+ },
80
+ {
81
+ "type": "object",
82
+ "required": [
83
+ "file",
84
+ "start",
85
+ "end",
86
+ "line",
87
+ "column"
88
+ ],
89
+ "additionalProperties": false,
90
+ "properties": {
91
+ "file": {
92
+ "type": "string",
93
+ "minLength": 1,
94
+ "pattern": "^(?![/\\\\])(?![A-Za-z]:)(?!.*(?:^|[/\\\\])\\.\\.(?:[/\\\\]|$)).{1,512}$",
95
+ "description": "Repository-relative, same rule as provenance.path (the module routes both through safePath). Inlined rather than $ref-composed because the local validator has no allOf."
96
+ },
97
+ "start": {
98
+ "type": "integer",
99
+ "minimum": 0
100
+ },
101
+ "end": {
102
+ "type": "integer",
103
+ "minimum": 1
104
+ },
105
+ "line": {
106
+ "type": "integer",
107
+ "minimum": 1
108
+ },
109
+ "column": {
110
+ "type": "integer",
111
+ "minimum": 1
112
+ }
113
+ }
114
+ }
115
+ ]
116
+ },
117
+ "provenance": {
118
+ "type": "object",
119
+ "required": [
120
+ "source",
121
+ "path",
122
+ "span",
123
+ "method",
124
+ "reason"
125
+ ],
126
+ "additionalProperties": false,
127
+ "properties": {
128
+ "source": {
129
+ "enum": [
130
+ "classify",
131
+ "declaration",
132
+ "inventory",
133
+ "rust",
134
+ "sweep"
135
+ ]
136
+ },
137
+ "path": {
138
+ "$ref": "#/$defs/repoPath"
139
+ },
140
+ "span": {
141
+ "$ref": "#/$defs/span"
142
+ },
143
+ "method": {
144
+ "enum": [
145
+ "cache-key",
146
+ "cache-operation",
147
+ "mutation",
148
+ "provenance-cap",
149
+ "query",
150
+ "route",
151
+ "surface",
152
+ "symbol",
153
+ "symbol-traversal",
154
+ "symbol-use"
155
+ ]
156
+ },
157
+ "reason": {
158
+ "enum": [
159
+ null,
160
+ "dynamic-import",
161
+ "namespace-spread",
162
+ "export-star",
163
+ "computed-member",
164
+ "ambiguous-alias",
165
+ "unresolved-module",
166
+ "unsupported-syntax",
167
+ "absent-producer",
168
+ "ambiguous-mutation-occurrence",
169
+ "contract-conflict",
170
+ "dynamic-key",
171
+ "no-resolvable-endpoint",
172
+ "non-json-value",
173
+ "unattributed-mutation-owner",
174
+ "unknown-helper",
175
+ "unsafe-number",
176
+ "unsupported-client",
177
+ "unsupported-expression"
178
+ ]
179
+ }
180
+ }
181
+ },
182
+ "provenanceList": {
183
+ "type": "array",
184
+ "maxItems": 64,
185
+ "items": {
186
+ "$ref": "#/$defs/provenance"
187
+ }
188
+ },
189
+ "coverage": {
190
+ "type": "object",
191
+ "required": [
192
+ "status",
193
+ "factsDiscovered",
194
+ "factsResolved",
195
+ "factsUnresolved",
196
+ "unresolvedIds"
197
+ ],
198
+ "additionalProperties": false,
199
+ "description": "Counts and status are recomputed by validateSemanticGraph; a schema can only check their shape. An absent producer is unmeasured, never a measured empty set.",
200
+ "properties": {
201
+ "status": {
202
+ "enum": [
203
+ "measured",
204
+ "partial",
205
+ "unmeasured"
206
+ ]
207
+ },
208
+ "factsDiscovered": {
209
+ "type": "integer",
210
+ "minimum": 0
211
+ },
212
+ "factsResolved": {
213
+ "type": "integer",
214
+ "minimum": 0
215
+ },
216
+ "factsUnresolved": {
217
+ "type": "integer",
218
+ "minimum": 0
219
+ },
220
+ "unresolvedIds": {
221
+ "type": "array",
222
+ "items": {
223
+ "$ref": "#/$defs/recordRef"
224
+ }
225
+ }
226
+ }
227
+ },
228
+ "node": {
229
+ "oneOf": [
230
+ {
231
+ "type": "object",
232
+ "required": [
233
+ "artifactVersion",
234
+ "recordId",
235
+ "kind",
236
+ "identity",
237
+ "certainty",
238
+ "provenance",
239
+ "attrs"
240
+ ],
241
+ "additionalProperties": false,
242
+ "properties": {
243
+ "artifactVersion": {
244
+ "const": 2
245
+ },
246
+ "recordId": {
247
+ "$ref": "#/$defs/nodeId"
248
+ },
249
+ "kind": {
250
+ "const": "finding"
251
+ },
252
+ "identity": {
253
+ "type": "object",
254
+ "required": [
255
+ "findingId"
256
+ ],
257
+ "additionalProperties": false,
258
+ "properties": {
259
+ "findingId": {
260
+ "type": "string",
261
+ "minLength": 1
262
+ }
263
+ }
264
+ },
265
+ "certainty": {
266
+ "$ref": "#/$defs/certainty"
267
+ },
268
+ "provenance": {
269
+ "$ref": "#/$defs/provenanceList"
270
+ },
271
+ "attrs": {
272
+ "type": "object",
273
+ "required": [
274
+ "severity",
275
+ "findingKind",
276
+ "status"
277
+ ],
278
+ "additionalProperties": false,
279
+ "properties": {
280
+ "severity": {},
281
+ "findingKind": {},
282
+ "status": {}
283
+ }
284
+ }
285
+ }
286
+ },
287
+ {
288
+ "type": "object",
289
+ "required": [
290
+ "artifactVersion",
291
+ "recordId",
292
+ "kind",
293
+ "identity",
294
+ "certainty",
295
+ "provenance",
296
+ "attrs"
297
+ ],
298
+ "additionalProperties": false,
299
+ "properties": {
300
+ "artifactVersion": {
301
+ "const": 2
302
+ },
303
+ "recordId": {
304
+ "$ref": "#/$defs/nodeId"
305
+ },
306
+ "kind": {
307
+ "const": "feature"
308
+ },
309
+ "identity": {
310
+ "type": "object",
311
+ "required": [
312
+ "name"
313
+ ],
314
+ "additionalProperties": false,
315
+ "properties": {
316
+ "name": {
317
+ "type": "string",
318
+ "minLength": 1
319
+ }
320
+ }
321
+ },
322
+ "certainty": {
323
+ "$ref": "#/$defs/certainty"
324
+ },
325
+ "provenance": {
326
+ "$ref": "#/$defs/provenanceList"
327
+ },
328
+ "attrs": {
329
+ "type": "object",
330
+ "required": [],
331
+ "additionalProperties": false,
332
+ "properties": {}
333
+ }
334
+ }
335
+ },
336
+ {
337
+ "type": "object",
338
+ "required": [
339
+ "artifactVersion",
340
+ "recordId",
341
+ "kind",
342
+ "identity",
343
+ "certainty",
344
+ "provenance",
345
+ "attrs"
346
+ ],
347
+ "additionalProperties": false,
348
+ "properties": {
349
+ "artifactVersion": {
350
+ "const": 2
351
+ },
352
+ "recordId": {
353
+ "$ref": "#/$defs/nodeId"
354
+ },
355
+ "kind": {
356
+ "const": "route"
357
+ },
358
+ "identity": {
359
+ "type": "object",
360
+ "required": [
361
+ "path"
362
+ ],
363
+ "additionalProperties": false,
364
+ "properties": {
365
+ "path": {
366
+ "type": "string",
367
+ "minLength": 1
368
+ }
369
+ }
370
+ },
371
+ "certainty": {
372
+ "$ref": "#/$defs/certainty"
373
+ },
374
+ "provenance": {
375
+ "$ref": "#/$defs/provenanceList"
376
+ },
377
+ "attrs": {
378
+ "type": "object",
379
+ "required": [
380
+ "file"
381
+ ],
382
+ "additionalProperties": false,
383
+ "properties": {
384
+ "file": {
385
+ "$ref": "#/$defs/repoPath"
386
+ }
387
+ }
388
+ }
389
+ }
390
+ },
391
+ {
392
+ "type": "object",
393
+ "required": [
394
+ "artifactVersion",
395
+ "recordId",
396
+ "kind",
397
+ "identity",
398
+ "certainty",
399
+ "provenance",
400
+ "attrs"
401
+ ],
402
+ "additionalProperties": false,
403
+ "properties": {
404
+ "artifactVersion": {
405
+ "const": 2
406
+ },
407
+ "recordId": {
408
+ "$ref": "#/$defs/nodeId"
409
+ },
410
+ "kind": {
411
+ "const": "surface"
412
+ },
413
+ "identity": {
414
+ "type": "object",
415
+ "required": [
416
+ "surfaceId"
417
+ ],
418
+ "additionalProperties": false,
419
+ "properties": {
420
+ "surfaceId": {
421
+ "$ref": "#/$defs/domainId"
422
+ }
423
+ }
424
+ },
425
+ "certainty": {
426
+ "$ref": "#/$defs/certainty"
427
+ },
428
+ "provenance": {
429
+ "$ref": "#/$defs/provenanceList"
430
+ },
431
+ "attrs": {
432
+ "type": "object",
433
+ "required": [
434
+ "material",
435
+ "route",
436
+ "file",
437
+ "component",
438
+ "confidence",
439
+ "surfaceKind"
440
+ ],
441
+ "additionalProperties": false,
442
+ "properties": {
443
+ "material": {},
444
+ "route": {},
445
+ "file": {
446
+ "$ref": "#/$defs/repoPath"
447
+ },
448
+ "component": {},
449
+ "confidence": {},
450
+ "surfaceKind": {}
451
+ }
452
+ }
453
+ }
454
+ },
455
+ {
456
+ "type": "object",
457
+ "required": [
458
+ "artifactVersion",
459
+ "recordId",
460
+ "kind",
461
+ "identity",
462
+ "certainty",
463
+ "provenance",
464
+ "attrs"
465
+ ],
466
+ "additionalProperties": false,
467
+ "properties": {
468
+ "artifactVersion": {
469
+ "const": 2
470
+ },
471
+ "recordId": {
472
+ "$ref": "#/$defs/nodeId"
473
+ },
474
+ "kind": {
475
+ "const": "component"
476
+ },
477
+ "identity": {
478
+ "type": "object",
479
+ "required": [
480
+ "symbolKey",
481
+ "route"
482
+ ],
483
+ "additionalProperties": false,
484
+ "properties": {
485
+ "symbolKey": {
486
+ "type": "string",
487
+ "minLength": 1
488
+ },
489
+ "route": {
490
+ "type": "string",
491
+ "minLength": 1
492
+ }
493
+ }
494
+ },
495
+ "certainty": {
496
+ "$ref": "#/$defs/certainty"
497
+ },
498
+ "provenance": {
499
+ "$ref": "#/$defs/provenanceList"
500
+ },
501
+ "attrs": {
502
+ "type": "object",
503
+ "required": [
504
+ "name",
505
+ "file"
506
+ ],
507
+ "additionalProperties": false,
508
+ "properties": {
509
+ "name": {},
510
+ "file": {
511
+ "$ref": "#/$defs/repoPath"
512
+ }
513
+ }
514
+ }
515
+ }
516
+ },
517
+ {
518
+ "type": "object",
519
+ "required": [
520
+ "artifactVersion",
521
+ "recordId",
522
+ "kind",
523
+ "identity",
524
+ "certainty",
525
+ "provenance",
526
+ "attrs"
527
+ ],
528
+ "additionalProperties": false,
529
+ "properties": {
530
+ "artifactVersion": {
531
+ "const": 2
532
+ },
533
+ "recordId": {
534
+ "$ref": "#/$defs/nodeId"
535
+ },
536
+ "kind": {
537
+ "const": "symbol"
538
+ },
539
+ "identity": {
540
+ "type": "object",
541
+ "required": [
542
+ "symbolKey"
543
+ ],
544
+ "additionalProperties": false,
545
+ "properties": {
546
+ "symbolKey": {
547
+ "type": "string",
548
+ "minLength": 1
549
+ }
550
+ }
551
+ },
552
+ "certainty": {
553
+ "$ref": "#/$defs/certainty"
554
+ },
555
+ "provenance": {
556
+ "$ref": "#/$defs/provenanceList"
557
+ },
558
+ "attrs": {
559
+ "type": "object",
560
+ "required": [
561
+ "name",
562
+ "file",
563
+ "exported",
564
+ "presentation"
565
+ ],
566
+ "additionalProperties": false,
567
+ "properties": {
568
+ "name": {},
569
+ "file": {
570
+ "$ref": "#/$defs/repoPath"
571
+ },
572
+ "exported": {},
573
+ "presentation": {}
574
+ }
575
+ }
576
+ }
577
+ },
578
+ {
579
+ "type": "object",
580
+ "required": [
581
+ "artifactVersion",
582
+ "recordId",
583
+ "kind",
584
+ "identity",
585
+ "certainty",
586
+ "provenance",
587
+ "attrs"
588
+ ],
589
+ "additionalProperties": false,
590
+ "properties": {
591
+ "artifactVersion": {
592
+ "const": 2
593
+ },
594
+ "recordId": {
595
+ "$ref": "#/$defs/nodeId"
596
+ },
597
+ "kind": {
598
+ "const": "query"
599
+ },
600
+ "identity": {
601
+ "type": "object",
602
+ "required": [
603
+ "readId"
604
+ ],
605
+ "additionalProperties": false,
606
+ "properties": {
607
+ "readId": {
608
+ "$ref": "#/$defs/readId"
609
+ }
610
+ }
611
+ },
612
+ "certainty": {
613
+ "$ref": "#/$defs/certainty"
614
+ },
615
+ "provenance": {
616
+ "$ref": "#/$defs/provenanceList"
617
+ },
618
+ "attrs": {
619
+ "type": "object",
620
+ "required": [
621
+ "keyId",
622
+ "file",
623
+ "line",
624
+ "span",
625
+ "pattern",
626
+ "endpoint",
627
+ "family",
628
+ "familySource",
629
+ "confidence"
630
+ ],
631
+ "additionalProperties": false,
632
+ "properties": {
633
+ "keyId": {},
634
+ "file": {
635
+ "$ref": "#/$defs/repoPath"
636
+ },
637
+ "line": {},
638
+ "span": {},
639
+ "pattern": {},
640
+ "endpoint": {},
641
+ "family": {},
642
+ "familySource": {},
643
+ "confidence": {}
644
+ }
645
+ }
646
+ }
647
+ },
648
+ {
649
+ "type": "object",
650
+ "required": [
651
+ "artifactVersion",
652
+ "recordId",
653
+ "kind",
654
+ "identity",
655
+ "certainty",
656
+ "provenance",
657
+ "attrs"
658
+ ],
659
+ "additionalProperties": false,
660
+ "properties": {
661
+ "artifactVersion": {
662
+ "const": 2
663
+ },
664
+ "recordId": {
665
+ "$ref": "#/$defs/nodeId"
666
+ },
667
+ "kind": {
668
+ "const": "api-resource"
669
+ },
670
+ "identity": {
671
+ "type": "object",
672
+ "required": [
673
+ "endpoint"
674
+ ],
675
+ "additionalProperties": false,
676
+ "properties": {
677
+ "endpoint": {
678
+ "type": "string",
679
+ "minLength": 1
680
+ }
681
+ }
682
+ },
683
+ "certainty": {
684
+ "$ref": "#/$defs/certainty"
685
+ },
686
+ "provenance": {
687
+ "$ref": "#/$defs/provenanceList"
688
+ },
689
+ "attrs": {
690
+ "type": "object",
691
+ "required": [],
692
+ "additionalProperties": false,
693
+ "properties": {}
694
+ }
695
+ }
696
+ },
697
+ {
698
+ "type": "object",
699
+ "required": [
700
+ "artifactVersion",
701
+ "recordId",
702
+ "kind",
703
+ "identity",
704
+ "certainty",
705
+ "provenance",
706
+ "attrs"
707
+ ],
708
+ "additionalProperties": false,
709
+ "properties": {
710
+ "artifactVersion": {
711
+ "const": 2
712
+ },
713
+ "recordId": {
714
+ "$ref": "#/$defs/nodeId"
715
+ },
716
+ "kind": {
717
+ "const": "mutation"
718
+ },
719
+ "identity": {
720
+ "type": "object",
721
+ "required": [
722
+ "mutationId"
723
+ ],
724
+ "additionalProperties": false,
725
+ "properties": {
726
+ "mutationId": {
727
+ "$ref": "#/$defs/domainId"
728
+ }
729
+ }
730
+ },
731
+ "certainty": {
732
+ "$ref": "#/$defs/certainty"
733
+ },
734
+ "provenance": {
735
+ "$ref": "#/$defs/provenanceList"
736
+ },
737
+ "attrs": {
738
+ "type": "object",
739
+ "required": [
740
+ "material",
741
+ "file",
742
+ "line",
743
+ "hook",
744
+ "endpoint",
745
+ "family",
746
+ "familySource",
747
+ "confidence"
748
+ ],
749
+ "additionalProperties": false,
750
+ "properties": {
751
+ "material": {},
752
+ "file": {
753
+ "$ref": "#/$defs/repoPath"
754
+ },
755
+ "line": {},
756
+ "hook": {},
757
+ "endpoint": {},
758
+ "family": {},
759
+ "familySource": {},
760
+ "confidence": {}
761
+ }
762
+ }
763
+ }
764
+ },
765
+ {
766
+ "type": "object",
767
+ "required": [
768
+ "artifactVersion",
769
+ "recordId",
770
+ "kind",
771
+ "identity",
772
+ "certainty",
773
+ "provenance",
774
+ "attrs"
775
+ ],
776
+ "additionalProperties": false,
777
+ "properties": {
778
+ "artifactVersion": {
779
+ "const": 2
780
+ },
781
+ "recordId": {
782
+ "$ref": "#/$defs/nodeId"
783
+ },
784
+ "kind": {
785
+ "const": "cache-key"
786
+ },
787
+ "identity": {
788
+ "type": "object",
789
+ "required": [
790
+ "cacheKeyId"
791
+ ],
792
+ "additionalProperties": false,
793
+ "properties": {
794
+ "cacheKeyId": {
795
+ "$ref": "#/$defs/domainId"
796
+ }
797
+ }
798
+ },
799
+ "certainty": {
800
+ "$ref": "#/$defs/certainty"
801
+ },
802
+ "provenance": {
803
+ "$ref": "#/$defs/provenanceList"
804
+ },
805
+ "attrs": {
806
+ "type": "object",
807
+ "required": [
808
+ "material",
809
+ "sourceProvenance"
810
+ ],
811
+ "additionalProperties": false,
812
+ "properties": {
813
+ "material": {},
814
+ "sourceProvenance": {}
815
+ }
816
+ }
817
+ }
818
+ },
819
+ {
820
+ "type": "object",
821
+ "required": [
822
+ "artifactVersion",
823
+ "recordId",
824
+ "kind",
825
+ "identity",
826
+ "certainty",
827
+ "provenance",
828
+ "attrs"
829
+ ],
830
+ "additionalProperties": false,
831
+ "properties": {
832
+ "artifactVersion": {
833
+ "const": 2
834
+ },
835
+ "recordId": {
836
+ "$ref": "#/$defs/nodeId"
837
+ },
838
+ "kind": {
839
+ "const": "family"
840
+ },
841
+ "identity": {
842
+ "type": "object",
843
+ "required": [
844
+ "familyId"
845
+ ],
846
+ "additionalProperties": false,
847
+ "properties": {
848
+ "familyId": {
849
+ "$ref": "#/$defs/domainId"
850
+ }
851
+ }
852
+ },
853
+ "certainty": {
854
+ "$ref": "#/$defs/certainty"
855
+ },
856
+ "provenance": {
857
+ "$ref": "#/$defs/provenanceList"
858
+ },
859
+ "attrs": {
860
+ "type": "object",
861
+ "required": [
862
+ "material",
863
+ "family"
864
+ ],
865
+ "additionalProperties": false,
866
+ "properties": {
867
+ "material": {},
868
+ "family": {}
869
+ }
870
+ }
871
+ }
872
+ },
873
+ {
874
+ "type": "object",
875
+ "required": [
876
+ "artifactVersion",
877
+ "recordId",
878
+ "kind",
879
+ "identity",
880
+ "certainty",
881
+ "provenance",
882
+ "attrs"
883
+ ],
884
+ "additionalProperties": false,
885
+ "properties": {
886
+ "artifactVersion": {
887
+ "const": 2
888
+ },
889
+ "recordId": {
890
+ "$ref": "#/$defs/nodeId"
891
+ },
892
+ "kind": {
893
+ "const": "truth-subject"
894
+ },
895
+ "identity": {
896
+ "type": "object",
897
+ "required": [
898
+ "truthSubjectId"
899
+ ],
900
+ "additionalProperties": false,
901
+ "properties": {
902
+ "truthSubjectId": {
903
+ "$ref": "#/$defs/domainId"
904
+ }
905
+ }
906
+ },
907
+ "certainty": {
908
+ "$ref": "#/$defs/certainty"
909
+ },
910
+ "provenance": {
911
+ "$ref": "#/$defs/provenanceList"
912
+ },
913
+ "attrs": {
914
+ "type": "object",
915
+ "required": [
916
+ "material",
917
+ "name"
918
+ ],
919
+ "additionalProperties": false,
920
+ "properties": {
921
+ "material": {},
922
+ "name": {}
923
+ }
924
+ }
925
+ }
926
+ },
927
+ {
928
+ "type": "object",
929
+ "required": [
930
+ "artifactVersion",
931
+ "recordId",
932
+ "kind",
933
+ "identity",
934
+ "certainty",
935
+ "provenance",
936
+ "attrs"
937
+ ],
938
+ "additionalProperties": false,
939
+ "properties": {
940
+ "artifactVersion": {
941
+ "const": 2
942
+ },
943
+ "recordId": {
944
+ "$ref": "#/$defs/nodeId"
945
+ },
946
+ "kind": {
947
+ "const": "principal"
948
+ },
949
+ "identity": {
950
+ "type": "object",
951
+ "required": [
952
+ "principalId"
953
+ ],
954
+ "additionalProperties": false,
955
+ "properties": {
956
+ "principalId": {
957
+ "$ref": "#/$defs/domainId"
958
+ }
959
+ }
960
+ },
961
+ "certainty": {
962
+ "$ref": "#/$defs/certainty"
963
+ },
964
+ "provenance": {
965
+ "$ref": "#/$defs/provenanceList"
966
+ },
967
+ "attrs": {
968
+ "type": "object",
969
+ "required": [
970
+ "material",
971
+ "name"
972
+ ],
973
+ "additionalProperties": false,
974
+ "properties": {
975
+ "material": {},
976
+ "name": {}
977
+ }
978
+ }
979
+ }
980
+ },
981
+ {
982
+ "type": "object",
983
+ "required": [
984
+ "artifactVersion",
985
+ "recordId",
986
+ "kind",
987
+ "identity",
988
+ "certainty",
989
+ "provenance",
990
+ "attrs"
991
+ ],
992
+ "additionalProperties": false,
993
+ "properties": {
994
+ "artifactVersion": {
995
+ "const": 2
996
+ },
997
+ "recordId": {
998
+ "$ref": "#/$defs/nodeId"
999
+ },
1000
+ "kind": {
1001
+ "const": "context"
1002
+ },
1003
+ "identity": {
1004
+ "type": "object",
1005
+ "required": [
1006
+ "contextId"
1007
+ ],
1008
+ "additionalProperties": false,
1009
+ "properties": {
1010
+ "contextId": {
1011
+ "$ref": "#/$defs/domainId"
1012
+ }
1013
+ }
1014
+ },
1015
+ "certainty": {
1016
+ "$ref": "#/$defs/certainty"
1017
+ },
1018
+ "provenance": {
1019
+ "$ref": "#/$defs/provenanceList"
1020
+ },
1021
+ "attrs": {
1022
+ "type": "object",
1023
+ "required": [
1024
+ "material",
1025
+ "kind",
1026
+ "transition"
1027
+ ],
1028
+ "additionalProperties": false,
1029
+ "properties": {
1030
+ "material": {},
1031
+ "kind": {},
1032
+ "transition": {}
1033
+ }
1034
+ }
1035
+ }
1036
+ },
1037
+ {
1038
+ "type": "object",
1039
+ "required": [
1040
+ "artifactVersion",
1041
+ "recordId",
1042
+ "kind",
1043
+ "identity",
1044
+ "certainty",
1045
+ "provenance",
1046
+ "attrs"
1047
+ ],
1048
+ "additionalProperties": false,
1049
+ "properties": {
1050
+ "artifactVersion": {
1051
+ "const": 2
1052
+ },
1053
+ "recordId": {
1054
+ "$ref": "#/$defs/nodeId"
1055
+ },
1056
+ "kind": {
1057
+ "const": "invariant"
1058
+ },
1059
+ "identity": {
1060
+ "type": "object",
1061
+ "required": [
1062
+ "invariantId"
1063
+ ],
1064
+ "additionalProperties": false,
1065
+ "properties": {
1066
+ "invariantId": {
1067
+ "$ref": "#/$defs/domainId"
1068
+ }
1069
+ }
1070
+ },
1071
+ "certainty": {
1072
+ "$ref": "#/$defs/certainty"
1073
+ },
1074
+ "provenance": {
1075
+ "$ref": "#/$defs/provenanceList"
1076
+ },
1077
+ "attrs": {
1078
+ "type": "object",
1079
+ "required": [
1080
+ "material",
1081
+ "name"
1082
+ ],
1083
+ "additionalProperties": false,
1084
+ "properties": {
1085
+ "material": {},
1086
+ "name": {}
1087
+ }
1088
+ }
1089
+ }
1090
+ },
1091
+ {
1092
+ "type": "object",
1093
+ "required": [
1094
+ "artifactVersion",
1095
+ "recordId",
1096
+ "kind",
1097
+ "identity",
1098
+ "certainty",
1099
+ "provenance",
1100
+ "attrs"
1101
+ ],
1102
+ "additionalProperties": false,
1103
+ "properties": {
1104
+ "artifactVersion": {
1105
+ "const": 2
1106
+ },
1107
+ "recordId": {
1108
+ "$ref": "#/$defs/nodeId"
1109
+ },
1110
+ "kind": {
1111
+ "const": "flow"
1112
+ },
1113
+ "identity": {
1114
+ "type": "object",
1115
+ "required": [
1116
+ "flowId"
1117
+ ],
1118
+ "additionalProperties": false,
1119
+ "properties": {
1120
+ "flowId": {
1121
+ "$ref": "#/$defs/domainId"
1122
+ }
1123
+ }
1124
+ },
1125
+ "certainty": {
1126
+ "$ref": "#/$defs/certainty"
1127
+ },
1128
+ "provenance": {
1129
+ "$ref": "#/$defs/provenanceList"
1130
+ },
1131
+ "attrs": {
1132
+ "type": "object",
1133
+ "required": [
1134
+ "material",
1135
+ "route"
1136
+ ],
1137
+ "additionalProperties": false,
1138
+ "properties": {
1139
+ "material": {},
1140
+ "route": {}
1141
+ }
1142
+ }
1143
+ }
1144
+ },
1145
+ {
1146
+ "type": "object",
1147
+ "required": [
1148
+ "artifactVersion",
1149
+ "recordId",
1150
+ "kind",
1151
+ "identity",
1152
+ "certainty",
1153
+ "provenance",
1154
+ "attrs"
1155
+ ],
1156
+ "additionalProperties": false,
1157
+ "properties": {
1158
+ "artifactVersion": {
1159
+ "const": 2
1160
+ },
1161
+ "recordId": {
1162
+ "$ref": "#/$defs/nodeId"
1163
+ },
1164
+ "kind": {
1165
+ "const": "observation"
1166
+ },
1167
+ "identity": {
1168
+ "type": "object",
1169
+ "required": [
1170
+ "observationId"
1171
+ ],
1172
+ "additionalProperties": false,
1173
+ "properties": {
1174
+ "observationId": {
1175
+ "$ref": "#/$defs/domainId"
1176
+ }
1177
+ }
1178
+ },
1179
+ "certainty": {
1180
+ "$ref": "#/$defs/certainty"
1181
+ },
1182
+ "provenance": {
1183
+ "$ref": "#/$defs/provenanceList"
1184
+ },
1185
+ "attrs": {
1186
+ "type": "object",
1187
+ "required": [
1188
+ "material",
1189
+ "status"
1190
+ ],
1191
+ "additionalProperties": false,
1192
+ "properties": {
1193
+ "material": {},
1194
+ "status": {}
1195
+ }
1196
+ }
1197
+ }
1198
+ },
1199
+ {
1200
+ "type": "object",
1201
+ "required": [
1202
+ "artifactVersion",
1203
+ "recordId",
1204
+ "kind",
1205
+ "identity",
1206
+ "certainty",
1207
+ "provenance",
1208
+ "attrs"
1209
+ ],
1210
+ "additionalProperties": false,
1211
+ "properties": {
1212
+ "artifactVersion": {
1213
+ "const": 2
1214
+ },
1215
+ "recordId": {
1216
+ "$ref": "#/$defs/nodeId"
1217
+ },
1218
+ "kind": {
1219
+ "const": "workflow-transition"
1220
+ },
1221
+ "identity": {
1222
+ "type": "object",
1223
+ "required": [
1224
+ "transitionId"
1225
+ ],
1226
+ "additionalProperties": false,
1227
+ "properties": {
1228
+ "transitionId": {
1229
+ "$ref": "#/$defs/domainId"
1230
+ }
1231
+ }
1232
+ },
1233
+ "certainty": {
1234
+ "$ref": "#/$defs/certainty"
1235
+ },
1236
+ "provenance": {
1237
+ "$ref": "#/$defs/provenanceList"
1238
+ },
1239
+ "attrs": {
1240
+ "type": "object",
1241
+ "required": [
1242
+ "fromRoute",
1243
+ "toRoute"
1244
+ ],
1245
+ "additionalProperties": false,
1246
+ "properties": {
1247
+ "fromRoute": {},
1248
+ "toRoute": {}
1249
+ }
1250
+ }
1251
+ }
1252
+ },
1253
+ {
1254
+ "type": "object",
1255
+ "required": [
1256
+ "artifactVersion",
1257
+ "recordId",
1258
+ "kind",
1259
+ "identity",
1260
+ "certainty",
1261
+ "provenance",
1262
+ "attrs"
1263
+ ],
1264
+ "additionalProperties": false,
1265
+ "properties": {
1266
+ "artifactVersion": {
1267
+ "const": 2
1268
+ },
1269
+ "recordId": {
1270
+ "$ref": "#/$defs/nodeId"
1271
+ },
1272
+ "kind": {
1273
+ "const": "provenance"
1274
+ },
1275
+ "identity": {
1276
+ "type": "object",
1277
+ "required": [
1278
+ "provenanceId"
1279
+ ],
1280
+ "additionalProperties": false,
1281
+ "properties": {
1282
+ "provenanceId": {
1283
+ "$ref": "#/$defs/domainId"
1284
+ }
1285
+ }
1286
+ },
1287
+ "certainty": {
1288
+ "$ref": "#/$defs/certainty"
1289
+ },
1290
+ "provenance": {
1291
+ "$ref": "#/$defs/provenanceList"
1292
+ },
1293
+ "attrs": {
1294
+ "type": "object",
1295
+ "required": [
1296
+ "source",
1297
+ "path",
1298
+ "span",
1299
+ "method",
1300
+ "reason"
1301
+ ],
1302
+ "additionalProperties": false,
1303
+ "properties": {
1304
+ "source": {},
1305
+ "path": {},
1306
+ "span": {},
1307
+ "method": {},
1308
+ "reason": {}
1309
+ }
1310
+ }
1311
+ }
1312
+ }
1313
+ ]
1314
+ },
1315
+ "edge": {
1316
+ "oneOf": [
1317
+ {
1318
+ "type": "object",
1319
+ "required": [
1320
+ "artifactVersion",
1321
+ "edgeId",
1322
+ "from",
1323
+ "to",
1324
+ "relation",
1325
+ "semanticKey",
1326
+ "certainty",
1327
+ "provenance",
1328
+ "attrs"
1329
+ ],
1330
+ "additionalProperties": false,
1331
+ "description": "Endpoint kinds for renders-through are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1332
+ "properties": {
1333
+ "artifactVersion": {
1334
+ "const": 2
1335
+ },
1336
+ "edgeId": {
1337
+ "$ref": "#/$defs/edgeId"
1338
+ },
1339
+ "from": {
1340
+ "$ref": "#/$defs/nodeId"
1341
+ },
1342
+ "to": {
1343
+ "$ref": "#/$defs/nodeId"
1344
+ },
1345
+ "relation": {
1346
+ "const": "renders-through"
1347
+ },
1348
+ "semanticKey": {
1349
+ "type": "object",
1350
+ "required": [],
1351
+ "additionalProperties": false,
1352
+ "properties": {}
1353
+ },
1354
+ "certainty": {
1355
+ "$ref": "#/$defs/certainty"
1356
+ },
1357
+ "provenance": {
1358
+ "$ref": "#/$defs/provenanceList"
1359
+ },
1360
+ "attrs": {
1361
+ "type": "object",
1362
+ "required": [],
1363
+ "additionalProperties": false,
1364
+ "properties": {}
1365
+ }
1366
+ }
1367
+ },
1368
+ {
1369
+ "type": "object",
1370
+ "required": [
1371
+ "artifactVersion",
1372
+ "edgeId",
1373
+ "from",
1374
+ "to",
1375
+ "relation",
1376
+ "semanticKey",
1377
+ "certainty",
1378
+ "provenance",
1379
+ "attrs"
1380
+ ],
1381
+ "additionalProperties": false,
1382
+ "description": "Endpoint kinds for contains-surface are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1383
+ "properties": {
1384
+ "artifactVersion": {
1385
+ "const": 2
1386
+ },
1387
+ "edgeId": {
1388
+ "$ref": "#/$defs/edgeId"
1389
+ },
1390
+ "from": {
1391
+ "$ref": "#/$defs/nodeId"
1392
+ },
1393
+ "to": {
1394
+ "$ref": "#/$defs/nodeId"
1395
+ },
1396
+ "relation": {
1397
+ "const": "contains-surface"
1398
+ },
1399
+ "semanticKey": {
1400
+ "type": "object",
1401
+ "required": [],
1402
+ "additionalProperties": false,
1403
+ "properties": {}
1404
+ },
1405
+ "certainty": {
1406
+ "$ref": "#/$defs/certainty"
1407
+ },
1408
+ "provenance": {
1409
+ "$ref": "#/$defs/provenanceList"
1410
+ },
1411
+ "attrs": {
1412
+ "type": "object",
1413
+ "required": [],
1414
+ "additionalProperties": false,
1415
+ "properties": {}
1416
+ }
1417
+ }
1418
+ },
1419
+ {
1420
+ "type": "object",
1421
+ "required": [
1422
+ "artifactVersion",
1423
+ "edgeId",
1424
+ "from",
1425
+ "to",
1426
+ "relation",
1427
+ "semanticKey",
1428
+ "certainty",
1429
+ "provenance",
1430
+ "attrs"
1431
+ ],
1432
+ "additionalProperties": false,
1433
+ "description": "Endpoint kinds for realizes are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1434
+ "properties": {
1435
+ "artifactVersion": {
1436
+ "const": 2
1437
+ },
1438
+ "edgeId": {
1439
+ "$ref": "#/$defs/edgeId"
1440
+ },
1441
+ "from": {
1442
+ "$ref": "#/$defs/nodeId"
1443
+ },
1444
+ "to": {
1445
+ "$ref": "#/$defs/nodeId"
1446
+ },
1447
+ "relation": {
1448
+ "const": "realizes"
1449
+ },
1450
+ "semanticKey": {
1451
+ "type": "object",
1452
+ "required": [],
1453
+ "additionalProperties": false,
1454
+ "properties": {}
1455
+ },
1456
+ "certainty": {
1457
+ "$ref": "#/$defs/certainty"
1458
+ },
1459
+ "provenance": {
1460
+ "$ref": "#/$defs/provenanceList"
1461
+ },
1462
+ "attrs": {
1463
+ "type": "object",
1464
+ "required": [],
1465
+ "additionalProperties": false,
1466
+ "properties": {}
1467
+ }
1468
+ }
1469
+ },
1470
+ {
1471
+ "type": "object",
1472
+ "required": [
1473
+ "artifactVersion",
1474
+ "edgeId",
1475
+ "from",
1476
+ "to",
1477
+ "relation",
1478
+ "semanticKey",
1479
+ "certainty",
1480
+ "provenance",
1481
+ "attrs"
1482
+ ],
1483
+ "additionalProperties": false,
1484
+ "description": "Endpoint kinds for uses are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1485
+ "properties": {
1486
+ "artifactVersion": {
1487
+ "const": 2
1488
+ },
1489
+ "edgeId": {
1490
+ "$ref": "#/$defs/edgeId"
1491
+ },
1492
+ "from": {
1493
+ "$ref": "#/$defs/nodeId"
1494
+ },
1495
+ "to": {
1496
+ "$ref": "#/$defs/nodeId"
1497
+ },
1498
+ "relation": {
1499
+ "const": "uses"
1500
+ },
1501
+ "semanticKey": {
1502
+ "type": "object",
1503
+ "required": [
1504
+ "source"
1505
+ ],
1506
+ "additionalProperties": false,
1507
+ "properties": {
1508
+ "source": {}
1509
+ }
1510
+ },
1511
+ "certainty": {
1512
+ "$ref": "#/$defs/certainty"
1513
+ },
1514
+ "provenance": {
1515
+ "$ref": "#/$defs/provenanceList"
1516
+ },
1517
+ "attrs": {
1518
+ "type": "object",
1519
+ "required": [
1520
+ "reason"
1521
+ ],
1522
+ "additionalProperties": false,
1523
+ "properties": {
1524
+ "reason": {}
1525
+ }
1526
+ }
1527
+ }
1528
+ },
1529
+ {
1530
+ "type": "object",
1531
+ "required": [
1532
+ "artifactVersion",
1533
+ "edgeId",
1534
+ "from",
1535
+ "to",
1536
+ "relation",
1537
+ "semanticKey",
1538
+ "certainty",
1539
+ "provenance",
1540
+ "attrs"
1541
+ ],
1542
+ "additionalProperties": false,
1543
+ "description": "Endpoint kinds for declares are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1544
+ "properties": {
1545
+ "artifactVersion": {
1546
+ "const": 2
1547
+ },
1548
+ "edgeId": {
1549
+ "$ref": "#/$defs/edgeId"
1550
+ },
1551
+ "from": {
1552
+ "$ref": "#/$defs/nodeId"
1553
+ },
1554
+ "to": {
1555
+ "$ref": "#/$defs/nodeId"
1556
+ },
1557
+ "relation": {
1558
+ "const": "declares"
1559
+ },
1560
+ "semanticKey": {
1561
+ "type": "object",
1562
+ "required": [],
1563
+ "additionalProperties": false,
1564
+ "properties": {}
1565
+ },
1566
+ "certainty": {
1567
+ "$ref": "#/$defs/certainty"
1568
+ },
1569
+ "provenance": {
1570
+ "$ref": "#/$defs/provenanceList"
1571
+ },
1572
+ "attrs": {
1573
+ "type": "object",
1574
+ "required": [],
1575
+ "additionalProperties": false,
1576
+ "properties": {}
1577
+ }
1578
+ }
1579
+ },
1580
+ {
1581
+ "type": "object",
1582
+ "required": [
1583
+ "artifactVersion",
1584
+ "edgeId",
1585
+ "from",
1586
+ "to",
1587
+ "relation",
1588
+ "semanticKey",
1589
+ "certainty",
1590
+ "provenance",
1591
+ "attrs"
1592
+ ],
1593
+ "additionalProperties": false,
1594
+ "description": "Endpoint kinds for requests are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1595
+ "properties": {
1596
+ "artifactVersion": {
1597
+ "const": 2
1598
+ },
1599
+ "edgeId": {
1600
+ "$ref": "#/$defs/edgeId"
1601
+ },
1602
+ "from": {
1603
+ "$ref": "#/$defs/nodeId"
1604
+ },
1605
+ "to": {
1606
+ "$ref": "#/$defs/nodeId"
1607
+ },
1608
+ "relation": {
1609
+ "const": "requests"
1610
+ },
1611
+ "semanticKey": {
1612
+ "type": "object",
1613
+ "required": [],
1614
+ "additionalProperties": false,
1615
+ "properties": {}
1616
+ },
1617
+ "certainty": {
1618
+ "$ref": "#/$defs/certainty"
1619
+ },
1620
+ "provenance": {
1621
+ "$ref": "#/$defs/provenanceList"
1622
+ },
1623
+ "attrs": {
1624
+ "type": "object",
1625
+ "required": [],
1626
+ "additionalProperties": false,
1627
+ "properties": {}
1628
+ }
1629
+ }
1630
+ },
1631
+ {
1632
+ "type": "object",
1633
+ "required": [
1634
+ "artifactVersion",
1635
+ "edgeId",
1636
+ "from",
1637
+ "to",
1638
+ "relation",
1639
+ "semanticKey",
1640
+ "certainty",
1641
+ "provenance",
1642
+ "attrs"
1643
+ ],
1644
+ "additionalProperties": false,
1645
+ "description": "Endpoint kinds for uses-key are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1646
+ "properties": {
1647
+ "artifactVersion": {
1648
+ "const": 2
1649
+ },
1650
+ "edgeId": {
1651
+ "$ref": "#/$defs/edgeId"
1652
+ },
1653
+ "from": {
1654
+ "$ref": "#/$defs/nodeId"
1655
+ },
1656
+ "to": {
1657
+ "$ref": "#/$defs/nodeId"
1658
+ },
1659
+ "relation": {
1660
+ "const": "uses-key"
1661
+ },
1662
+ "semanticKey": {
1663
+ "type": "object",
1664
+ "required": [],
1665
+ "additionalProperties": false,
1666
+ "properties": {}
1667
+ },
1668
+ "certainty": {
1669
+ "$ref": "#/$defs/certainty"
1670
+ },
1671
+ "provenance": {
1672
+ "$ref": "#/$defs/provenanceList"
1673
+ },
1674
+ "attrs": {
1675
+ "type": "object",
1676
+ "required": [],
1677
+ "additionalProperties": false,
1678
+ "properties": {}
1679
+ }
1680
+ }
1681
+ },
1682
+ {
1683
+ "type": "object",
1684
+ "required": [
1685
+ "artifactVersion",
1686
+ "edgeId",
1687
+ "from",
1688
+ "to",
1689
+ "relation",
1690
+ "semanticKey",
1691
+ "certainty",
1692
+ "provenance",
1693
+ "attrs"
1694
+ ],
1695
+ "additionalProperties": false,
1696
+ "description": "Endpoint kinds for reads are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1697
+ "properties": {
1698
+ "artifactVersion": {
1699
+ "const": 2
1700
+ },
1701
+ "edgeId": {
1702
+ "$ref": "#/$defs/edgeId"
1703
+ },
1704
+ "from": {
1705
+ "$ref": "#/$defs/nodeId"
1706
+ },
1707
+ "to": {
1708
+ "$ref": "#/$defs/nodeId"
1709
+ },
1710
+ "relation": {
1711
+ "const": "reads"
1712
+ },
1713
+ "semanticKey": {
1714
+ "type": "object",
1715
+ "required": [],
1716
+ "additionalProperties": false,
1717
+ "properties": {}
1718
+ },
1719
+ "certainty": {
1720
+ "$ref": "#/$defs/certainty"
1721
+ },
1722
+ "provenance": {
1723
+ "$ref": "#/$defs/provenanceList"
1724
+ },
1725
+ "attrs": {
1726
+ "type": "object",
1727
+ "required": [],
1728
+ "additionalProperties": false,
1729
+ "properties": {}
1730
+ }
1731
+ }
1732
+ },
1733
+ {
1734
+ "type": "object",
1735
+ "required": [
1736
+ "artifactVersion",
1737
+ "edgeId",
1738
+ "from",
1739
+ "to",
1740
+ "relation",
1741
+ "semanticKey",
1742
+ "certainty",
1743
+ "provenance",
1744
+ "attrs"
1745
+ ],
1746
+ "additionalProperties": false,
1747
+ "description": "Endpoint kinds for writes are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1748
+ "properties": {
1749
+ "artifactVersion": {
1750
+ "const": 2
1751
+ },
1752
+ "edgeId": {
1753
+ "$ref": "#/$defs/edgeId"
1754
+ },
1755
+ "from": {
1756
+ "$ref": "#/$defs/nodeId"
1757
+ },
1758
+ "to": {
1759
+ "$ref": "#/$defs/nodeId"
1760
+ },
1761
+ "relation": {
1762
+ "const": "writes"
1763
+ },
1764
+ "semanticKey": {
1765
+ "type": "object",
1766
+ "required": [],
1767
+ "additionalProperties": false,
1768
+ "properties": {}
1769
+ },
1770
+ "certainty": {
1771
+ "$ref": "#/$defs/certainty"
1772
+ },
1773
+ "provenance": {
1774
+ "$ref": "#/$defs/provenanceList"
1775
+ },
1776
+ "attrs": {
1777
+ "type": "object",
1778
+ "required": [],
1779
+ "additionalProperties": false,
1780
+ "properties": {}
1781
+ }
1782
+ }
1783
+ },
1784
+ {
1785
+ "type": "object",
1786
+ "required": [
1787
+ "artifactVersion",
1788
+ "edgeId",
1789
+ "from",
1790
+ "to",
1791
+ "relation",
1792
+ "semanticKey",
1793
+ "certainty",
1794
+ "provenance",
1795
+ "attrs"
1796
+ ],
1797
+ "additionalProperties": false,
1798
+ "description": "Endpoint kinds for calls are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1799
+ "properties": {
1800
+ "artifactVersion": {
1801
+ "const": 2
1802
+ },
1803
+ "edgeId": {
1804
+ "$ref": "#/$defs/edgeId"
1805
+ },
1806
+ "from": {
1807
+ "$ref": "#/$defs/nodeId"
1808
+ },
1809
+ "to": {
1810
+ "$ref": "#/$defs/nodeId"
1811
+ },
1812
+ "relation": {
1813
+ "const": "calls"
1814
+ },
1815
+ "semanticKey": {
1816
+ "type": "object",
1817
+ "required": [],
1818
+ "additionalProperties": false,
1819
+ "properties": {}
1820
+ },
1821
+ "certainty": {
1822
+ "$ref": "#/$defs/certainty"
1823
+ },
1824
+ "provenance": {
1825
+ "$ref": "#/$defs/provenanceList"
1826
+ },
1827
+ "attrs": {
1828
+ "type": "object",
1829
+ "required": [],
1830
+ "additionalProperties": false,
1831
+ "properties": {}
1832
+ }
1833
+ }
1834
+ },
1835
+ {
1836
+ "type": "object",
1837
+ "required": [
1838
+ "artifactVersion",
1839
+ "edgeId",
1840
+ "from",
1841
+ "to",
1842
+ "relation",
1843
+ "semanticKey",
1844
+ "certainty",
1845
+ "provenance",
1846
+ "attrs"
1847
+ ],
1848
+ "additionalProperties": false,
1849
+ "description": "Endpoint kinds for invalidates are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1850
+ "properties": {
1851
+ "artifactVersion": {
1852
+ "const": 2
1853
+ },
1854
+ "edgeId": {
1855
+ "$ref": "#/$defs/edgeId"
1856
+ },
1857
+ "from": {
1858
+ "$ref": "#/$defs/nodeId"
1859
+ },
1860
+ "to": {
1861
+ "$ref": "#/$defs/nodeId"
1862
+ },
1863
+ "relation": {
1864
+ "const": "invalidates"
1865
+ },
1866
+ "semanticKey": {
1867
+ "type": "object",
1868
+ "required": [
1869
+ "operationId"
1870
+ ],
1871
+ "additionalProperties": false,
1872
+ "properties": {
1873
+ "operationId": {}
1874
+ }
1875
+ },
1876
+ "certainty": {
1877
+ "$ref": "#/$defs/certainty"
1878
+ },
1879
+ "provenance": {
1880
+ "$ref": "#/$defs/provenanceList"
1881
+ },
1882
+ "attrs": {
1883
+ "type": "object",
1884
+ "required": [
1885
+ "operation"
1886
+ ],
1887
+ "additionalProperties": false,
1888
+ "properties": {
1889
+ "operation": {}
1890
+ }
1891
+ }
1892
+ }
1893
+ },
1894
+ {
1895
+ "type": "object",
1896
+ "required": [
1897
+ "artifactVersion",
1898
+ "edgeId",
1899
+ "from",
1900
+ "to",
1901
+ "relation",
1902
+ "semanticKey",
1903
+ "certainty",
1904
+ "provenance",
1905
+ "attrs"
1906
+ ],
1907
+ "additionalProperties": false,
1908
+ "description": "Endpoint kinds for direct-updates are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1909
+ "properties": {
1910
+ "artifactVersion": {
1911
+ "const": 2
1912
+ },
1913
+ "edgeId": {
1914
+ "$ref": "#/$defs/edgeId"
1915
+ },
1916
+ "from": {
1917
+ "$ref": "#/$defs/nodeId"
1918
+ },
1919
+ "to": {
1920
+ "$ref": "#/$defs/nodeId"
1921
+ },
1922
+ "relation": {
1923
+ "const": "direct-updates"
1924
+ },
1925
+ "semanticKey": {
1926
+ "type": "object",
1927
+ "required": [
1928
+ "operationId"
1929
+ ],
1930
+ "additionalProperties": false,
1931
+ "properties": {
1932
+ "operationId": {}
1933
+ }
1934
+ },
1935
+ "certainty": {
1936
+ "$ref": "#/$defs/certainty"
1937
+ },
1938
+ "provenance": {
1939
+ "$ref": "#/$defs/provenanceList"
1940
+ },
1941
+ "attrs": {
1942
+ "type": "object",
1943
+ "required": [
1944
+ "operation"
1945
+ ],
1946
+ "additionalProperties": false,
1947
+ "properties": {
1948
+ "operation": {}
1949
+ }
1950
+ }
1951
+ }
1952
+ },
1953
+ {
1954
+ "type": "object",
1955
+ "required": [
1956
+ "artifactVersion",
1957
+ "edgeId",
1958
+ "from",
1959
+ "to",
1960
+ "relation",
1961
+ "semanticKey",
1962
+ "certainty",
1963
+ "provenance",
1964
+ "attrs"
1965
+ ],
1966
+ "additionalProperties": false,
1967
+ "description": "Endpoint kinds for reads-via are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
1968
+ "properties": {
1969
+ "artifactVersion": {
1970
+ "const": 2
1971
+ },
1972
+ "edgeId": {
1973
+ "$ref": "#/$defs/edgeId"
1974
+ },
1975
+ "from": {
1976
+ "$ref": "#/$defs/nodeId"
1977
+ },
1978
+ "to": {
1979
+ "$ref": "#/$defs/nodeId"
1980
+ },
1981
+ "relation": {
1982
+ "const": "reads-via"
1983
+ },
1984
+ "semanticKey": {
1985
+ "type": "object",
1986
+ "required": [
1987
+ "path"
1988
+ ],
1989
+ "additionalProperties": false,
1990
+ "properties": {
1991
+ "path": {}
1992
+ }
1993
+ },
1994
+ "certainty": {
1995
+ "$ref": "#/$defs/certainty"
1996
+ },
1997
+ "provenance": {
1998
+ "$ref": "#/$defs/provenanceList"
1999
+ },
2000
+ "attrs": {
2001
+ "type": "object",
2002
+ "required": [
2003
+ "ownership"
2004
+ ],
2005
+ "additionalProperties": false,
2006
+ "properties": {
2007
+ "ownership": {}
2008
+ }
2009
+ }
2010
+ }
2011
+ },
2012
+ {
2013
+ "type": "object",
2014
+ "required": [
2015
+ "artifactVersion",
2016
+ "edgeId",
2017
+ "from",
2018
+ "to",
2019
+ "relation",
2020
+ "semanticKey",
2021
+ "certainty",
2022
+ "provenance",
2023
+ "attrs"
2024
+ ],
2025
+ "additionalProperties": false,
2026
+ "description": "Endpoint kinds for renders are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2027
+ "properties": {
2028
+ "artifactVersion": {
2029
+ "const": 2
2030
+ },
2031
+ "edgeId": {
2032
+ "$ref": "#/$defs/edgeId"
2033
+ },
2034
+ "from": {
2035
+ "$ref": "#/$defs/nodeId"
2036
+ },
2037
+ "to": {
2038
+ "$ref": "#/$defs/nodeId"
2039
+ },
2040
+ "relation": {
2041
+ "const": "renders"
2042
+ },
2043
+ "semanticKey": {
2044
+ "type": "object",
2045
+ "required": [],
2046
+ "additionalProperties": false,
2047
+ "properties": {}
2048
+ },
2049
+ "certainty": {
2050
+ "$ref": "#/$defs/certainty"
2051
+ },
2052
+ "provenance": {
2053
+ "$ref": "#/$defs/provenanceList"
2054
+ },
2055
+ "attrs": {
2056
+ "type": "object",
2057
+ "required": [],
2058
+ "additionalProperties": false,
2059
+ "properties": {}
2060
+ }
2061
+ }
2062
+ },
2063
+ {
2064
+ "type": "object",
2065
+ "required": [
2066
+ "artifactVersion",
2067
+ "edgeId",
2068
+ "from",
2069
+ "to",
2070
+ "relation",
2071
+ "semanticKey",
2072
+ "certainty",
2073
+ "provenance",
2074
+ "attrs"
2075
+ ],
2076
+ "additionalProperties": false,
2077
+ "description": "Endpoint kinds for may-observe are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2078
+ "properties": {
2079
+ "artifactVersion": {
2080
+ "const": 2
2081
+ },
2082
+ "edgeId": {
2083
+ "$ref": "#/$defs/edgeId"
2084
+ },
2085
+ "from": {
2086
+ "$ref": "#/$defs/nodeId"
2087
+ },
2088
+ "to": {
2089
+ "$ref": "#/$defs/nodeId"
2090
+ },
2091
+ "relation": {
2092
+ "const": "may-observe"
2093
+ },
2094
+ "semanticKey": {
2095
+ "type": "object",
2096
+ "required": [],
2097
+ "additionalProperties": false,
2098
+ "properties": {}
2099
+ },
2100
+ "certainty": {
2101
+ "$ref": "#/$defs/certainty"
2102
+ },
2103
+ "provenance": {
2104
+ "$ref": "#/$defs/provenanceList"
2105
+ },
2106
+ "attrs": {
2107
+ "type": "object",
2108
+ "required": [],
2109
+ "additionalProperties": false,
2110
+ "properties": {}
2111
+ }
2112
+ }
2113
+ },
2114
+ {
2115
+ "type": "object",
2116
+ "required": [
2117
+ "artifactVersion",
2118
+ "edgeId",
2119
+ "from",
2120
+ "to",
2121
+ "relation",
2122
+ "semanticKey",
2123
+ "certainty",
2124
+ "provenance",
2125
+ "attrs"
2126
+ ],
2127
+ "additionalProperties": false,
2128
+ "description": "Endpoint kinds for implements are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2129
+ "properties": {
2130
+ "artifactVersion": {
2131
+ "const": 2
2132
+ },
2133
+ "edgeId": {
2134
+ "$ref": "#/$defs/edgeId"
2135
+ },
2136
+ "from": {
2137
+ "$ref": "#/$defs/nodeId"
2138
+ },
2139
+ "to": {
2140
+ "$ref": "#/$defs/nodeId"
2141
+ },
2142
+ "relation": {
2143
+ "const": "implements"
2144
+ },
2145
+ "semanticKey": {
2146
+ "type": "object",
2147
+ "required": [],
2148
+ "additionalProperties": false,
2149
+ "properties": {}
2150
+ },
2151
+ "certainty": {
2152
+ "$ref": "#/$defs/certainty"
2153
+ },
2154
+ "provenance": {
2155
+ "$ref": "#/$defs/provenanceList"
2156
+ },
2157
+ "attrs": {
2158
+ "type": "object",
2159
+ "required": [],
2160
+ "additionalProperties": false,
2161
+ "properties": {}
2162
+ }
2163
+ }
2164
+ },
2165
+ {
2166
+ "type": "object",
2167
+ "required": [
2168
+ "artifactVersion",
2169
+ "edgeId",
2170
+ "from",
2171
+ "to",
2172
+ "relation",
2173
+ "semanticKey",
2174
+ "certainty",
2175
+ "provenance",
2176
+ "attrs"
2177
+ ],
2178
+ "additionalProperties": false,
2179
+ "description": "Endpoint kinds for targets are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2180
+ "properties": {
2181
+ "artifactVersion": {
2182
+ "const": 2
2183
+ },
2184
+ "edgeId": {
2185
+ "$ref": "#/$defs/edgeId"
2186
+ },
2187
+ "from": {
2188
+ "$ref": "#/$defs/nodeId"
2189
+ },
2190
+ "to": {
2191
+ "$ref": "#/$defs/nodeId"
2192
+ },
2193
+ "relation": {
2194
+ "const": "targets"
2195
+ },
2196
+ "semanticKey": {
2197
+ "type": "object",
2198
+ "required": [],
2199
+ "additionalProperties": false,
2200
+ "properties": {}
2201
+ },
2202
+ "certainty": {
2203
+ "$ref": "#/$defs/certainty"
2204
+ },
2205
+ "provenance": {
2206
+ "$ref": "#/$defs/provenanceList"
2207
+ },
2208
+ "attrs": {
2209
+ "type": "object",
2210
+ "required": [],
2211
+ "additionalProperties": false,
2212
+ "properties": {}
2213
+ }
2214
+ }
2215
+ },
2216
+ {
2217
+ "type": "object",
2218
+ "required": [
2219
+ "artifactVersion",
2220
+ "edgeId",
2221
+ "from",
2222
+ "to",
2223
+ "relation",
2224
+ "semanticKey",
2225
+ "certainty",
2226
+ "provenance",
2227
+ "attrs"
2228
+ ],
2229
+ "additionalProperties": false,
2230
+ "description": "Endpoint kinds for observed-at are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2231
+ "properties": {
2232
+ "artifactVersion": {
2233
+ "const": 2
2234
+ },
2235
+ "edgeId": {
2236
+ "$ref": "#/$defs/edgeId"
2237
+ },
2238
+ "from": {
2239
+ "$ref": "#/$defs/nodeId"
2240
+ },
2241
+ "to": {
2242
+ "$ref": "#/$defs/nodeId"
2243
+ },
2244
+ "relation": {
2245
+ "const": "observed-at"
2246
+ },
2247
+ "semanticKey": {
2248
+ "type": "object",
2249
+ "required": [],
2250
+ "additionalProperties": false,
2251
+ "properties": {}
2252
+ },
2253
+ "certainty": {
2254
+ "$ref": "#/$defs/certainty"
2255
+ },
2256
+ "provenance": {
2257
+ "$ref": "#/$defs/provenanceList"
2258
+ },
2259
+ "attrs": {
2260
+ "type": "object",
2261
+ "required": [],
2262
+ "additionalProperties": false,
2263
+ "properties": {}
2264
+ }
2265
+ }
2266
+ },
2267
+ {
2268
+ "type": "object",
2269
+ "required": [
2270
+ "artifactVersion",
2271
+ "edgeId",
2272
+ "from",
2273
+ "to",
2274
+ "relation",
2275
+ "semanticKey",
2276
+ "certainty",
2277
+ "provenance",
2278
+ "attrs"
2279
+ ],
2280
+ "additionalProperties": false,
2281
+ "description": "Endpoint kinds for represents are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2282
+ "properties": {
2283
+ "artifactVersion": {
2284
+ "const": 2
2285
+ },
2286
+ "edgeId": {
2287
+ "$ref": "#/$defs/edgeId"
2288
+ },
2289
+ "from": {
2290
+ "$ref": "#/$defs/nodeId"
2291
+ },
2292
+ "to": {
2293
+ "$ref": "#/$defs/nodeId"
2294
+ },
2295
+ "relation": {
2296
+ "const": "represents"
2297
+ },
2298
+ "semanticKey": {
2299
+ "type": "object",
2300
+ "required": [],
2301
+ "additionalProperties": false,
2302
+ "properties": {}
2303
+ },
2304
+ "certainty": {
2305
+ "$ref": "#/$defs/certainty"
2306
+ },
2307
+ "provenance": {
2308
+ "$ref": "#/$defs/provenanceList"
2309
+ },
2310
+ "attrs": {
2311
+ "type": "object",
2312
+ "required": [],
2313
+ "additionalProperties": false,
2314
+ "properties": {}
2315
+ }
2316
+ }
2317
+ },
2318
+ {
2319
+ "type": "object",
2320
+ "required": [
2321
+ "artifactVersion",
2322
+ "edgeId",
2323
+ "from",
2324
+ "to",
2325
+ "relation",
2326
+ "semanticKey",
2327
+ "certainty",
2328
+ "provenance",
2329
+ "attrs"
2330
+ ],
2331
+ "additionalProperties": false,
2332
+ "description": "Endpoint kinds for starts-at are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2333
+ "properties": {
2334
+ "artifactVersion": {
2335
+ "const": 2
2336
+ },
2337
+ "edgeId": {
2338
+ "$ref": "#/$defs/edgeId"
2339
+ },
2340
+ "from": {
2341
+ "$ref": "#/$defs/nodeId"
2342
+ },
2343
+ "to": {
2344
+ "$ref": "#/$defs/nodeId"
2345
+ },
2346
+ "relation": {
2347
+ "const": "starts-at"
2348
+ },
2349
+ "semanticKey": {
2350
+ "type": "object",
2351
+ "required": [],
2352
+ "additionalProperties": false,
2353
+ "properties": {}
2354
+ },
2355
+ "certainty": {
2356
+ "$ref": "#/$defs/certainty"
2357
+ },
2358
+ "provenance": {
2359
+ "$ref": "#/$defs/provenanceList"
2360
+ },
2361
+ "attrs": {
2362
+ "type": "object",
2363
+ "required": [],
2364
+ "additionalProperties": false,
2365
+ "properties": {}
2366
+ }
2367
+ }
2368
+ },
2369
+ {
2370
+ "type": "object",
2371
+ "required": [
2372
+ "artifactVersion",
2373
+ "edgeId",
2374
+ "from",
2375
+ "to",
2376
+ "relation",
2377
+ "semanticKey",
2378
+ "certainty",
2379
+ "provenance",
2380
+ "attrs"
2381
+ ],
2382
+ "additionalProperties": false,
2383
+ "description": "Endpoint kinds for ends-at are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2384
+ "properties": {
2385
+ "artifactVersion": {
2386
+ "const": 2
2387
+ },
2388
+ "edgeId": {
2389
+ "$ref": "#/$defs/edgeId"
2390
+ },
2391
+ "from": {
2392
+ "$ref": "#/$defs/nodeId"
2393
+ },
2394
+ "to": {
2395
+ "$ref": "#/$defs/nodeId"
2396
+ },
2397
+ "relation": {
2398
+ "const": "ends-at"
2399
+ },
2400
+ "semanticKey": {
2401
+ "type": "object",
2402
+ "required": [],
2403
+ "additionalProperties": false,
2404
+ "properties": {}
2405
+ },
2406
+ "certainty": {
2407
+ "$ref": "#/$defs/certainty"
2408
+ },
2409
+ "provenance": {
2410
+ "$ref": "#/$defs/provenanceList"
2411
+ },
2412
+ "attrs": {
2413
+ "type": "object",
2414
+ "required": [],
2415
+ "additionalProperties": false,
2416
+ "properties": {}
2417
+ }
2418
+ }
2419
+ },
2420
+ {
2421
+ "type": "object",
2422
+ "required": [
2423
+ "artifactVersion",
2424
+ "edgeId",
2425
+ "from",
2426
+ "to",
2427
+ "relation",
2428
+ "semanticKey",
2429
+ "certainty",
2430
+ "provenance",
2431
+ "attrs"
2432
+ ],
2433
+ "additionalProperties": false,
2434
+ "description": "Endpoint kinds for evidenced-by are enforced semantically: from/to are storage IDs, so a schema cannot see the kinds they resolve to.",
2435
+ "properties": {
2436
+ "artifactVersion": {
2437
+ "const": 2
2438
+ },
2439
+ "edgeId": {
2440
+ "$ref": "#/$defs/edgeId"
2441
+ },
2442
+ "from": {
2443
+ "$ref": "#/$defs/nodeId"
2444
+ },
2445
+ "to": {
2446
+ "$ref": "#/$defs/nodeId"
2447
+ },
2448
+ "relation": {
2449
+ "const": "evidenced-by"
2450
+ },
2451
+ "semanticKey": {
2452
+ "type": "object",
2453
+ "required": [
2454
+ "reason"
2455
+ ],
2456
+ "additionalProperties": false,
2457
+ "properties": {
2458
+ "reason": {
2459
+ "enum": [
2460
+ "dynamic-import",
2461
+ "namespace-spread",
2462
+ "export-star",
2463
+ "computed-member",
2464
+ "ambiguous-alias",
2465
+ "unresolved-module",
2466
+ "unsupported-syntax"
2467
+ ],
2468
+ "description": "The Task 4 ownership vocabulary (lib/qa/coherence/contracts.mjs OWNERSHIP_REASONS, re-exported as the module's EVIDENCED_BY_REASONS). Closed: the reason is inside the edge digest, so an open value is an open identity input."
2469
+ }
2470
+ }
2471
+ },
2472
+ "certainty": {
2473
+ "$ref": "#/$defs/certainty"
2474
+ },
2475
+ "provenance": {
2476
+ "$ref": "#/$defs/provenanceList"
2477
+ },
2478
+ "attrs": {
2479
+ "type": "object",
2480
+ "required": [
2481
+ "ownership"
2482
+ ],
2483
+ "additionalProperties": false,
2484
+ "properties": {
2485
+ "ownership": {}
2486
+ }
2487
+ }
2488
+ }
2489
+ }
2490
+ ]
2491
+ }
2492
+ }
2493
+ }