@documentation-robotics/cli 0.1.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 (169) hide show
  1. package/PYTHON_CLI_PARITY.md +265 -0
  2. package/PYTHON_CLI_STRUCTURE_UPDATE.md +246 -0
  3. package/README.md +926 -0
  4. package/biome.json +42 -0
  5. package/bunfig.toml +3 -0
  6. package/dist/ai/claude-client.js +71 -0
  7. package/dist/ai/claude-client.js.map +7 -0
  8. package/dist/ai/context-provider.js +129 -0
  9. package/dist/ai/context-provider.js.map +7 -0
  10. package/dist/ai/tools.js +231 -0
  11. package/dist/ai/tools.js.map +7 -0
  12. package/dist/cli.js +224 -0
  13. package/dist/cli.js.map +7 -0
  14. package/dist/commands/add.js +51 -0
  15. package/dist/commands/add.js.map +7 -0
  16. package/dist/commands/changeset.js +174 -0
  17. package/dist/commands/changeset.js.map +7 -0
  18. package/dist/commands/chat.js +111 -0
  19. package/dist/commands/chat.js.map +7 -0
  20. package/dist/commands/conformance.js +132 -0
  21. package/dist/commands/conformance.js.map +7 -0
  22. package/dist/commands/delete.js +31 -0
  23. package/dist/commands/delete.js.map +7 -0
  24. package/dist/commands/element.js +28 -0
  25. package/dist/commands/element.js.map +7 -0
  26. package/dist/commands/export.js +65 -0
  27. package/dist/commands/export.js.map +7 -0
  28. package/dist/commands/info.js +40 -0
  29. package/dist/commands/info.js.map +7 -0
  30. package/dist/commands/init.js +45 -0
  31. package/dist/commands/init.js.map +7 -0
  32. package/dist/commands/list.js +32 -0
  33. package/dist/commands/list.js.map +7 -0
  34. package/dist/commands/migrate.js +36 -0
  35. package/dist/commands/migrate.js.map +7 -0
  36. package/dist/commands/project.js +74 -0
  37. package/dist/commands/project.js.map +7 -0
  38. package/dist/commands/relationship.js +118 -0
  39. package/dist/commands/relationship.js.map +7 -0
  40. package/dist/commands/search.js +48 -0
  41. package/dist/commands/search.js.map +7 -0
  42. package/dist/commands/show.js +38 -0
  43. package/dist/commands/show.js.map +7 -0
  44. package/dist/commands/trace.js +60 -0
  45. package/dist/commands/trace.js.map +7 -0
  46. package/dist/commands/update.js +37 -0
  47. package/dist/commands/update.js.map +7 -0
  48. package/dist/commands/upgrade.js +152 -0
  49. package/dist/commands/upgrade.js.map +7 -0
  50. package/dist/commands/validate.js +71 -0
  51. package/dist/commands/validate.js.map +7 -0
  52. package/dist/commands/version.js +20 -0
  53. package/dist/commands/version.js.map +7 -0
  54. package/dist/commands/visualize.js +51 -0
  55. package/dist/commands/visualize.js.map +7 -0
  56. package/dist/core/active-changeset.js +52 -0
  57. package/dist/core/active-changeset.js.map +7 -0
  58. package/dist/core/changeset.js +244 -0
  59. package/dist/core/changeset.js.map +7 -0
  60. package/dist/core/dependency-tracker.js +322 -0
  61. package/dist/core/dependency-tracker.js.map +7 -0
  62. package/dist/core/element.js +65 -0
  63. package/dist/core/element.js.map +7 -0
  64. package/dist/core/layer.js +75 -0
  65. package/dist/core/layer.js.map +7 -0
  66. package/dist/core/manifest.js +57 -0
  67. package/dist/core/manifest.js.map +7 -0
  68. package/dist/core/migration-registry.js +131 -0
  69. package/dist/core/migration-registry.js.map +7 -0
  70. package/dist/core/model.js +455 -0
  71. package/dist/core/model.js.map +7 -0
  72. package/dist/core/projection-engine.js +288 -0
  73. package/dist/core/projection-engine.js.map +7 -0
  74. package/dist/core/reference-registry.js +188 -0
  75. package/dist/core/reference-registry.js.map +7 -0
  76. package/dist/core/relationship-registry.js +114 -0
  77. package/dist/core/relationship-registry.js.map +7 -0
  78. package/dist/core/relationships.js +78 -0
  79. package/dist/core/relationships.js.map +7 -0
  80. package/dist/export/archimate-exporter.js +111 -0
  81. package/dist/export/archimate-exporter.js.map +7 -0
  82. package/dist/export/export-manager.js +63 -0
  83. package/dist/export/export-manager.js.map +7 -0
  84. package/dist/export/graphml-exporter.js +39 -0
  85. package/dist/export/graphml-exporter.js.map +7 -0
  86. package/dist/export/index.js +17 -0
  87. package/dist/export/index.js.map +7 -0
  88. package/dist/export/json-schema-exporter.js +60 -0
  89. package/dist/export/json-schema-exporter.js.map +7 -0
  90. package/dist/export/markdown-exporter.js +99 -0
  91. package/dist/export/markdown-exporter.js.map +7 -0
  92. package/dist/export/openapi-exporter.js +85 -0
  93. package/dist/export/openapi-exporter.js.map +7 -0
  94. package/dist/export/plantuml-exporter.js +60 -0
  95. package/dist/export/plantuml-exporter.js.map +7 -0
  96. package/dist/export/types.js +36 -0
  97. package/dist/export/types.js.map +7 -0
  98. package/dist/schemas/bundled/01-motivation-layer.schema.json +942 -0
  99. package/dist/schemas/bundled/02-business-layer.schema.json +1293 -0
  100. package/dist/schemas/bundled/03-security-layer.schema.json +2177 -0
  101. package/dist/schemas/bundled/04-application-layer.schema.json +1328 -0
  102. package/dist/schemas/bundled/05-technology-layer.schema.json +1465 -0
  103. package/dist/schemas/bundled/06-api-layer.schema.json +1743 -0
  104. package/dist/schemas/bundled/07-data-model-layer.schema.json +1253 -0
  105. package/dist/schemas/bundled/08-datastore-layer.schema.json +892 -0
  106. package/dist/schemas/bundled/09-ux-layer.schema.json +1506 -0
  107. package/dist/schemas/bundled/10-navigation-layer.schema.json +843 -0
  108. package/dist/schemas/bundled/11-apm-observability-layer.schema.json +1430 -0
  109. package/dist/schemas/bundled/12-testing-layer.schema.json +1091 -0
  110. package/dist/schemas/bundled/common/layer-extensions.schema.json +266 -0
  111. package/dist/schemas/bundled/common/predicates.schema.json +493 -0
  112. package/dist/schemas/bundled/common/relationships.schema.json +791 -0
  113. package/dist/schemas/bundled/common/source-references.schema.json +71 -0
  114. package/dist/schemas/bundled/link-registry.json +1839 -0
  115. package/dist/schemas/bundled/link-registry.schema.json +339 -0
  116. package/dist/schemas/bundled/relationship-catalog.json +1302 -0
  117. package/dist/schemas/bundled/relationship-type.schema.json +221 -0
  118. package/dist/server/server.js +1207 -0
  119. package/dist/server/server.js.map +7 -0
  120. package/dist/server/telemetry-middleware.js +24 -0
  121. package/dist/server/telemetry-middleware.js.map +7 -0
  122. package/dist/telemetry/console-interceptor.js +34 -0
  123. package/dist/telemetry/console-interceptor.js.map +7 -0
  124. package/dist/telemetry/index.js +54 -0
  125. package/dist/telemetry/index.js.map +7 -0
  126. package/dist/telemetry/resilient-exporter.js +41 -0
  127. package/dist/telemetry/resilient-exporter.js.map +7 -0
  128. package/dist/telemetry/resilient-log-exporter.js +41 -0
  129. package/dist/telemetry/resilient-log-exporter.js.map +7 -0
  130. package/dist/telemetry/test-instrumentation.js +32 -0
  131. package/dist/telemetry/test-instrumentation.js.map +7 -0
  132. package/dist/types/index.js +1 -0
  133. package/dist/types/index.js.map +7 -0
  134. package/dist/utils/element-utils.js +11 -0
  135. package/dist/utils/element-utils.js.map +7 -0
  136. package/dist/utils/errors.js +105 -0
  137. package/dist/utils/errors.js.map +7 -0
  138. package/dist/utils/file-io.js +69 -0
  139. package/dist/utils/file-io.js.map +7 -0
  140. package/dist/utils/globals.js +28 -0
  141. package/dist/utils/globals.js.map +7 -0
  142. package/dist/utils/model-path.js +22 -0
  143. package/dist/utils/model-path.js.map +7 -0
  144. package/dist/utils/project-paths.js +45 -0
  145. package/dist/utils/project-paths.js.map +7 -0
  146. package/dist/utils/spec-installer.js +85 -0
  147. package/dist/utils/spec-installer.js.map +7 -0
  148. package/dist/utils/spec-version.js +33 -0
  149. package/dist/utils/spec-version.js.map +7 -0
  150. package/dist/validators/index.js +15 -0
  151. package/dist/validators/index.js.map +7 -0
  152. package/dist/validators/naming-validator.js +82 -0
  153. package/dist/validators/naming-validator.js.map +7 -0
  154. package/dist/validators/reference-validator.js +106 -0
  155. package/dist/validators/reference-validator.js.map +7 -0
  156. package/dist/validators/schema-validator.js +148 -0
  157. package/dist/validators/schema-validator.js.map +7 -0
  158. package/dist/validators/semantic-validator.js +80 -0
  159. package/dist/validators/semantic-validator.js.map +7 -0
  160. package/dist/validators/types.js +48 -0
  161. package/dist/validators/types.js.map +7 -0
  162. package/dist/validators/validator.js +67 -0
  163. package/dist/validators/validator.js.map +7 -0
  164. package/docs/TEST-INSTRUMENTATION.md +405 -0
  165. package/docs/telemetry.md +427 -0
  166. package/package.json +70 -0
  167. package/test-debug.js +33 -0
  168. package/test-special.mjs +46 -0
  169. package/test_runner.ts +7 -0
@@ -0,0 +1,493 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/schemas/common/predicates.schema.json",
4
+ "title": "Semantic Predicates Library",
5
+ "description": "Definitions of semantic predicates used in Documentation Robotics relationships, aligned with ArchiMate and ontology best practices",
6
+ "version": "1.0.0",
7
+
8
+ "definitions": {
9
+ "PredicateType": {
10
+ "type": "string",
11
+ "description": "Semantic predicate describing a relationship type",
12
+ "enum": [
13
+ "supports",
14
+ "supported-by",
15
+ "realizes",
16
+ "realized-by",
17
+ "fulfills",
18
+ "fulfilled-by",
19
+ "delivers",
20
+ "delivered-by",
21
+ "constrains",
22
+ "constrained-by",
23
+ "governs",
24
+ "governed-by",
25
+ "owns",
26
+ "owned-by",
27
+ "performs",
28
+ "performed-by",
29
+ "provides",
30
+ "provided-by",
31
+ "consumes",
32
+ "consumed-by",
33
+ "requires",
34
+ "required-by",
35
+ "assigned",
36
+ "assigned-to",
37
+ "protects",
38
+ "protected-by",
39
+ "mitigates",
40
+ "mitigated-by",
41
+ "accesses",
42
+ "accessed-by",
43
+ "uses",
44
+ "used-by",
45
+ "deployed-on",
46
+ "hosts",
47
+ "runs-on",
48
+ "supports-runtime",
49
+ "exposes",
50
+ "exposed-by",
51
+ "implements",
52
+ "implemented-by",
53
+ "references",
54
+ "referenced-by",
55
+ "persists-to",
56
+ "stores",
57
+ "maps-to",
58
+ "mapped-from",
59
+ "renders",
60
+ "rendered-by",
61
+ "navigates-to",
62
+ "navigated-from",
63
+ "monitors",
64
+ "monitored-by",
65
+ "has-sla",
66
+ "applies-to",
67
+ "traces",
68
+ "traced-by",
69
+ "tests",
70
+ "tested-by",
71
+ "covers",
72
+ "covered-by",
73
+ "composes",
74
+ "composed-of",
75
+ "aggregates",
76
+ "aggregated-by",
77
+ "triggers",
78
+ "triggered-by",
79
+ "flows-to",
80
+ "flows-from",
81
+ "serves",
82
+ "served-by"
83
+ ]
84
+ },
85
+
86
+ "RelationshipStrength": {
87
+ "type": "string",
88
+ "description": "Strength/importance of a relationship",
89
+ "enum": ["critical", "high", "medium", "low"]
90
+ },
91
+
92
+ "RelationshipCategory": {
93
+ "type": "string",
94
+ "description": "Category of relationship based on layer or domain",
95
+ "enum": [
96
+ "motivation",
97
+ "business",
98
+ "security",
99
+ "application",
100
+ "technology",
101
+ "api",
102
+ "data",
103
+ "datastore",
104
+ "ux",
105
+ "navigation",
106
+ "apm",
107
+ "testing",
108
+ "structural",
109
+ "behavioral",
110
+ "dependency"
111
+ ]
112
+ },
113
+
114
+ "PredicateDefinition": {
115
+ "type": "object",
116
+ "description": "Full definition of a semantic predicate",
117
+ "required": ["predicate", "inversePredicate", "category", "description"],
118
+ "properties": {
119
+ "predicate": {
120
+ "$ref": "#/definitions/PredicateType",
121
+ "description": "Forward direction predicate"
122
+ },
123
+ "inversePredicate": {
124
+ "$ref": "#/definitions/PredicateType",
125
+ "description": "Reverse direction predicate"
126
+ },
127
+ "category": {
128
+ "$ref": "#/definitions/RelationshipCategory",
129
+ "description": "Relationship category"
130
+ },
131
+ "description": {
132
+ "type": "string",
133
+ "description": "Human-readable description of the predicate"
134
+ },
135
+ "archimateAlignment": {
136
+ "type": "string",
137
+ "description": "Corresponding ArchiMate relationship type (if applicable)",
138
+ "enum": [
139
+ "Composition",
140
+ "Aggregation",
141
+ "Assignment",
142
+ "Realization",
143
+ "Serving",
144
+ "Access",
145
+ "Influence",
146
+ "Triggering",
147
+ "Flow",
148
+ "Specialization",
149
+ "Association"
150
+ ]
151
+ },
152
+ "semantics": {
153
+ "type": "object",
154
+ "description": "Semantic properties of the relationship",
155
+ "properties": {
156
+ "directionality": {
157
+ "type": "string",
158
+ "enum": ["unidirectional", "bidirectional"],
159
+ "description": "Whether the relationship can be navigated in both directions"
160
+ },
161
+ "transitivity": {
162
+ "type": "boolean",
163
+ "description": "Whether the relationship is transitive (if A→B and B→C, then A→C)"
164
+ },
165
+ "symmetry": {
166
+ "type": "boolean",
167
+ "description": "Whether the relationship is symmetric (if A→B, then B→A)"
168
+ },
169
+ "reflexivity": {
170
+ "type": "boolean",
171
+ "description": "Whether an element can have this relationship with itself"
172
+ }
173
+ }
174
+ },
175
+ "defaultStrength": {
176
+ "$ref": "#/definitions/RelationshipStrength",
177
+ "description": "Default strength for this predicate type"
178
+ }
179
+ }
180
+ }
181
+ },
182
+
183
+ "predicates": {
184
+ "supports": {
185
+ "predicate": "supports",
186
+ "inversePredicate": "supported-by",
187
+ "category": "motivation",
188
+ "description": "Element contributes to achieving or enabling another element",
189
+ "archimateAlignment": "Influence",
190
+ "semantics": {
191
+ "directionality": "bidirectional",
192
+ "transitivity": true,
193
+ "symmetry": false,
194
+ "reflexivity": false
195
+ },
196
+ "defaultStrength": "high"
197
+ },
198
+ "realizes": {
199
+ "predicate": "realizes",
200
+ "inversePredicate": "realized-by",
201
+ "category": "structural",
202
+ "description": "Element implements or makes concrete another element",
203
+ "archimateAlignment": "Realization",
204
+ "semantics": {
205
+ "directionality": "bidirectional",
206
+ "transitivity": true,
207
+ "symmetry": false,
208
+ "reflexivity": false
209
+ },
210
+ "defaultStrength": "high"
211
+ },
212
+ "fulfills": {
213
+ "predicate": "fulfills",
214
+ "inversePredicate": "fulfilled-by",
215
+ "category": "motivation",
216
+ "description": "Element satisfies the needs specified by another element",
217
+ "archimateAlignment": "Realization",
218
+ "semantics": {
219
+ "directionality": "bidirectional",
220
+ "transitivity": false,
221
+ "symmetry": false,
222
+ "reflexivity": false
223
+ },
224
+ "defaultStrength": "high"
225
+ },
226
+ "delivers": {
227
+ "predicate": "delivers",
228
+ "inversePredicate": "delivered-by",
229
+ "category": "motivation",
230
+ "description": "Element provides value or benefit",
231
+ "archimateAlignment": "Realization",
232
+ "semantics": {
233
+ "directionality": "bidirectional",
234
+ "transitivity": false,
235
+ "symmetry": false,
236
+ "reflexivity": false
237
+ },
238
+ "defaultStrength": "high"
239
+ },
240
+ "constrains": {
241
+ "predicate": "constrains",
242
+ "inversePredicate": "constrained-by",
243
+ "category": "motivation",
244
+ "description": "Element limits or restricts another element",
245
+ "archimateAlignment": "Influence",
246
+ "semantics": {
247
+ "directionality": "bidirectional",
248
+ "transitivity": false,
249
+ "symmetry": false,
250
+ "reflexivity": false
251
+ },
252
+ "defaultStrength": "medium"
253
+ },
254
+ "governs": {
255
+ "predicate": "governs",
256
+ "inversePredicate": "governed-by",
257
+ "category": "motivation",
258
+ "description": "Element provides rules or guidelines for another element",
259
+ "archimateAlignment": "Influence",
260
+ "semantics": {
261
+ "directionality": "bidirectional",
262
+ "transitivity": false,
263
+ "symmetry": false,
264
+ "reflexivity": false
265
+ },
266
+ "defaultStrength": "high"
267
+ },
268
+ "owns": {
269
+ "predicate": "owns",
270
+ "inversePredicate": "owned-by",
271
+ "category": "business",
272
+ "description": "Element has responsibility or authority over another element",
273
+ "archimateAlignment": "Assignment",
274
+ "semantics": {
275
+ "directionality": "bidirectional",
276
+ "transitivity": false,
277
+ "symmetry": false,
278
+ "reflexivity": false
279
+ },
280
+ "defaultStrength": "medium"
281
+ },
282
+ "performs": {
283
+ "predicate": "performs",
284
+ "inversePredicate": "performed-by",
285
+ "category": "business",
286
+ "description": "Element executes or carries out another element",
287
+ "archimateAlignment": "Assignment",
288
+ "semantics": {
289
+ "directionality": "bidirectional",
290
+ "transitivity": false,
291
+ "symmetry": false,
292
+ "reflexivity": false
293
+ },
294
+ "defaultStrength": "medium"
295
+ },
296
+ "provides": {
297
+ "predicate": "provides",
298
+ "inversePredicate": "provided-by",
299
+ "category": "structural",
300
+ "description": "Element makes functionality available",
301
+ "archimateAlignment": "Serving",
302
+ "semantics": {
303
+ "directionality": "bidirectional",
304
+ "transitivity": false,
305
+ "symmetry": false,
306
+ "reflexivity": false
307
+ },
308
+ "defaultStrength": "high"
309
+ },
310
+ "consumes": {
311
+ "predicate": "consumes",
312
+ "inversePredicate": "consumed-by",
313
+ "category": "dependency",
314
+ "description": "Element uses or depends on another element's functionality",
315
+ "archimateAlignment": "Serving",
316
+ "semantics": {
317
+ "directionality": "bidirectional",
318
+ "transitivity": false,
319
+ "symmetry": false,
320
+ "reflexivity": false
321
+ },
322
+ "defaultStrength": "medium"
323
+ },
324
+ "requires": {
325
+ "predicate": "requires",
326
+ "inversePredicate": "required-by",
327
+ "category": "security",
328
+ "description": "Element needs another element to function correctly",
329
+ "archimateAlignment": "Access",
330
+ "semantics": {
331
+ "directionality": "bidirectional",
332
+ "transitivity": false,
333
+ "symmetry": false,
334
+ "reflexivity": false
335
+ },
336
+ "defaultStrength": "critical"
337
+ },
338
+ "protects": {
339
+ "predicate": "protects",
340
+ "inversePredicate": "protected-by",
341
+ "category": "security",
342
+ "description": "Element provides security for another element",
343
+ "archimateAlignment": "Influence",
344
+ "semantics": {
345
+ "directionality": "bidirectional",
346
+ "transitivity": false,
347
+ "symmetry": false,
348
+ "reflexivity": false
349
+ },
350
+ "defaultStrength": "high"
351
+ },
352
+ "mitigates": {
353
+ "predicate": "mitigates",
354
+ "inversePredicate": "mitigated-by",
355
+ "category": "security",
356
+ "description": "Element reduces or addresses a risk or threat",
357
+ "archimateAlignment": "Influence",
358
+ "semantics": {
359
+ "directionality": "bidirectional",
360
+ "transitivity": false,
361
+ "symmetry": false,
362
+ "reflexivity": false
363
+ },
364
+ "defaultStrength": "high"
365
+ },
366
+ "accesses": {
367
+ "predicate": "accesses",
368
+ "inversePredicate": "accessed-by",
369
+ "category": "security",
370
+ "description": "Element can read or modify another element",
371
+ "archimateAlignment": "Access",
372
+ "semantics": {
373
+ "directionality": "bidirectional",
374
+ "transitivity": false,
375
+ "symmetry": false,
376
+ "reflexivity": false
377
+ },
378
+ "defaultStrength": "critical"
379
+ },
380
+ "uses": {
381
+ "predicate": "uses",
382
+ "inversePredicate": "used-by",
383
+ "category": "dependency",
384
+ "description": "Element depends on or utilizes another element",
385
+ "archimateAlignment": "Serving",
386
+ "semantics": {
387
+ "directionality": "bidirectional",
388
+ "transitivity": false,
389
+ "symmetry": false,
390
+ "reflexivity": false
391
+ },
392
+ "defaultStrength": "medium"
393
+ },
394
+ "implements": {
395
+ "predicate": "implements",
396
+ "inversePredicate": "implemented-by",
397
+ "category": "structural",
398
+ "description": "Element provides concrete implementation of another element",
399
+ "archimateAlignment": "Realization",
400
+ "semantics": {
401
+ "directionality": "bidirectional",
402
+ "transitivity": false,
403
+ "symmetry": false,
404
+ "reflexivity": false
405
+ },
406
+ "defaultStrength": "high"
407
+ },
408
+ "composes": {
409
+ "predicate": "composes",
410
+ "inversePredicate": "composed-of",
411
+ "category": "structural",
412
+ "description": "Whole-part relationship where part cannot exist without whole",
413
+ "archimateAlignment": "Composition",
414
+ "semantics": {
415
+ "directionality": "bidirectional",
416
+ "transitivity": false,
417
+ "symmetry": false,
418
+ "reflexivity": false
419
+ },
420
+ "defaultStrength": "high"
421
+ },
422
+ "aggregates": {
423
+ "predicate": "aggregates",
424
+ "inversePredicate": "aggregated-by",
425
+ "category": "structural",
426
+ "description": "Whole-part relationship where part can exist independently",
427
+ "archimateAlignment": "Aggregation",
428
+ "semantics": {
429
+ "directionality": "bidirectional",
430
+ "transitivity": false,
431
+ "symmetry": false,
432
+ "reflexivity": false
433
+ },
434
+ "defaultStrength": "medium"
435
+ },
436
+ "triggers": {
437
+ "predicate": "triggers",
438
+ "inversePredicate": "triggered-by",
439
+ "category": "behavioral",
440
+ "description": "Element causes or initiates another element",
441
+ "archimateAlignment": "Triggering",
442
+ "semantics": {
443
+ "directionality": "bidirectional",
444
+ "transitivity": false,
445
+ "symmetry": false,
446
+ "reflexivity": false
447
+ },
448
+ "defaultStrength": "medium"
449
+ },
450
+ "flows-to": {
451
+ "predicate": "flows-to",
452
+ "inversePredicate": "flows-from",
453
+ "category": "behavioral",
454
+ "description": "Data or control flows from one element to another",
455
+ "archimateAlignment": "Flow",
456
+ "semantics": {
457
+ "directionality": "bidirectional",
458
+ "transitivity": true,
459
+ "symmetry": false,
460
+ "reflexivity": false
461
+ },
462
+ "defaultStrength": "medium"
463
+ },
464
+ "monitors": {
465
+ "predicate": "monitors",
466
+ "inversePredicate": "monitored-by",
467
+ "category": "apm",
468
+ "description": "Element observes or tracks another element",
469
+ "archimateAlignment": "Serving",
470
+ "semantics": {
471
+ "directionality": "bidirectional",
472
+ "transitivity": false,
473
+ "symmetry": false,
474
+ "reflexivity": false
475
+ },
476
+ "defaultStrength": "medium"
477
+ },
478
+ "tests": {
479
+ "predicate": "tests",
480
+ "inversePredicate": "tested-by",
481
+ "category": "testing",
482
+ "description": "Element validates or verifies another element",
483
+ "archimateAlignment": "Serving",
484
+ "semantics": {
485
+ "directionality": "bidirectional",
486
+ "transitivity": false,
487
+ "symmetry": false,
488
+ "reflexivity": false
489
+ },
490
+ "defaultStrength": "medium"
491
+ }
492
+ }
493
+ }