@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,791 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/schemas/common/relationships.schema.json",
4
+ "title": "Common Relationship Definitions",
5
+ "description": "Reusable JSON Schema definitions for cross-layer relationships in Documentation Robotics",
6
+ "version": "1.0.0",
7
+
8
+ "definitions": {
9
+ "RelationshipMetadata": {
10
+ "type": "object",
11
+ "description": "Metadata about a relationship between elements",
12
+ "properties": {
13
+ "predicate": {
14
+ "type": "string",
15
+ "description": "Semantic predicate describing the relationship (e.g., 'supports', 'realizes', 'implements')"
16
+ },
17
+ "inversePredicate": {
18
+ "type": "string",
19
+ "description": "Inverse predicate for bidirectional navigation (e.g., 'supported-by', 'realized-by', 'implemented-by')"
20
+ },
21
+ "targetType": {
22
+ "type": "string",
23
+ "description": "Target element type name (e.g., 'Goal', 'BusinessService', 'ApplicationComponent')"
24
+ },
25
+ "targetLayer": {
26
+ "type": "string",
27
+ "pattern": "^\\d{2}-[a-z-]+$",
28
+ "description": "Target layer ID (e.g., '01-motivation', '02-business', '04-application')"
29
+ },
30
+ "strength": {
31
+ "type": "string",
32
+ "enum": ["critical", "high", "medium", "low"],
33
+ "description": "Relationship strength indicating importance"
34
+ },
35
+ "category": {
36
+ "type": "string",
37
+ "description": "Relationship category (e.g., 'motivation', 'business', 'security', 'structural')"
38
+ },
39
+ "bidirectional": {
40
+ "type": "boolean",
41
+ "description": "Whether the relationship can be navigated in both directions",
42
+ "default": false
43
+ }
44
+ }
45
+ },
46
+
47
+ "UuidReference": {
48
+ "type": "string",
49
+ "format": "uuid",
50
+ "description": "UUID reference to another element",
51
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
52
+ },
53
+
54
+ "UuidReferenceArray": {
55
+ "type": "array",
56
+ "description": "Array of UUID references",
57
+ "items": {
58
+ "$ref": "#/definitions/UuidReference"
59
+ },
60
+ "uniqueItems": true
61
+ },
62
+
63
+ "MotivationProperties": {
64
+ "type": "object",
65
+ "description": "Motivation layer relationship properties",
66
+ "properties": {
67
+ "supports-goals": {
68
+ "allOf": [
69
+ { "$ref": "#/definitions/UuidReferenceArray" },
70
+ {
71
+ "description": "Goal IDs this element supports",
72
+ "x-relationship": {
73
+ "predicate": "supports",
74
+ "inversePredicate": "supported-by",
75
+ "targetType": "Goal",
76
+ "targetLayer": "01-motivation",
77
+ "strength": "high",
78
+ "category": "motivation",
79
+ "bidirectional": true
80
+ }
81
+ }
82
+ ]
83
+ },
84
+ "realizes-outcomes": {
85
+ "allOf": [
86
+ { "$ref": "#/definitions/UuidReferenceArray" },
87
+ {
88
+ "description": "Outcome IDs this element realizes",
89
+ "x-relationship": {
90
+ "predicate": "realizes",
91
+ "inversePredicate": "realized-by",
92
+ "targetType": "Outcome",
93
+ "targetLayer": "01-motivation",
94
+ "strength": "high",
95
+ "category": "motivation",
96
+ "bidirectional": true
97
+ }
98
+ }
99
+ ]
100
+ },
101
+ "fulfills-requirements": {
102
+ "allOf": [
103
+ { "$ref": "#/definitions/UuidReferenceArray" },
104
+ {
105
+ "description": "Requirement IDs this element fulfills",
106
+ "x-relationship": {
107
+ "predicate": "fulfills",
108
+ "inversePredicate": "fulfilled-by",
109
+ "targetType": "Requirement",
110
+ "targetLayer": "01-motivation",
111
+ "strength": "high",
112
+ "category": "motivation",
113
+ "bidirectional": true
114
+ }
115
+ }
116
+ ]
117
+ },
118
+ "delivers-value": {
119
+ "allOf": [
120
+ { "$ref": "#/definitions/UuidReferenceArray" },
121
+ {
122
+ "description": "Value IDs this element delivers",
123
+ "x-relationship": {
124
+ "predicate": "delivers",
125
+ "inversePredicate": "delivered-by",
126
+ "targetType": "Value",
127
+ "targetLayer": "01-motivation",
128
+ "strength": "high",
129
+ "category": "motivation",
130
+ "bidirectional": true
131
+ }
132
+ }
133
+ ]
134
+ },
135
+ "constrained-by": {
136
+ "allOf": [
137
+ { "$ref": "#/definitions/UuidReferenceArray" },
138
+ {
139
+ "description": "Constraint IDs that constrain this element",
140
+ "x-relationship": {
141
+ "predicate": "constrained-by",
142
+ "inversePredicate": "constrains",
143
+ "targetType": "Constraint",
144
+ "targetLayer": "01-motivation",
145
+ "strength": "medium",
146
+ "category": "motivation",
147
+ "bidirectional": true
148
+ }
149
+ }
150
+ ]
151
+ },
152
+ "governed-by": {
153
+ "allOf": [
154
+ { "$ref": "#/definitions/UuidReferenceArray" },
155
+ {
156
+ "description": "Principle IDs that govern this element",
157
+ "x-relationship": {
158
+ "predicate": "governed-by",
159
+ "inversePredicate": "governs",
160
+ "targetType": "Principle",
161
+ "targetLayer": "01-motivation",
162
+ "strength": "high",
163
+ "category": "motivation",
164
+ "bidirectional": true
165
+ }
166
+ }
167
+ ]
168
+ }
169
+ }
170
+ },
171
+
172
+ "BusinessProperties": {
173
+ "type": "object",
174
+ "description": "Business layer relationship properties",
175
+ "properties": {
176
+ "owned-by-actor": {
177
+ "allOf": [
178
+ { "$ref": "#/definitions/UuidReferenceArray" },
179
+ {
180
+ "description": "Business Actor IDs that own this element",
181
+ "x-relationship": {
182
+ "predicate": "owned-by",
183
+ "inversePredicate": "owns",
184
+ "targetType": "BusinessActor",
185
+ "targetLayer": "02-business",
186
+ "strength": "medium",
187
+ "category": "business",
188
+ "bidirectional": true
189
+ }
190
+ }
191
+ ]
192
+ },
193
+ "performed-by-role": {
194
+ "allOf": [
195
+ { "$ref": "#/definitions/UuidReferenceArray" },
196
+ {
197
+ "description": "Business Role IDs that perform this element",
198
+ "x-relationship": {
199
+ "predicate": "performed-by",
200
+ "inversePredicate": "performs",
201
+ "targetType": "BusinessRole",
202
+ "targetLayer": "02-business",
203
+ "strength": "medium",
204
+ "category": "business",
205
+ "bidirectional": true
206
+ }
207
+ }
208
+ ]
209
+ },
210
+ "provides-service": {
211
+ "allOf": [
212
+ { "$ref": "#/definitions/UuidReferenceArray" },
213
+ {
214
+ "description": "Business Service IDs provided by this element",
215
+ "x-relationship": {
216
+ "predicate": "provides",
217
+ "inversePredicate": "provided-by",
218
+ "targetType": "BusinessService",
219
+ "targetLayer": "02-business",
220
+ "strength": "high",
221
+ "category": "business",
222
+ "bidirectional": true
223
+ }
224
+ }
225
+ ]
226
+ },
227
+ "consumes-service": {
228
+ "allOf": [
229
+ { "$ref": "#/definitions/UuidReferenceArray" },
230
+ {
231
+ "description": "Business Service IDs consumed by this element",
232
+ "x-relationship": {
233
+ "predicate": "consumes",
234
+ "inversePredicate": "consumed-by",
235
+ "targetType": "BusinessService",
236
+ "targetLayer": "02-business",
237
+ "strength": "medium",
238
+ "category": "business",
239
+ "bidirectional": true
240
+ }
241
+ }
242
+ ]
243
+ }
244
+ }
245
+ },
246
+
247
+ "SecurityProperties": {
248
+ "type": "object",
249
+ "description": "Security layer relationship properties",
250
+ "properties": {
251
+ "requires-permission": {
252
+ "allOf": [
253
+ { "$ref": "#/definitions/UuidReferenceArray" },
254
+ {
255
+ "description": "Permission IDs required by this element",
256
+ "x-relationship": {
257
+ "predicate": "requires",
258
+ "inversePredicate": "required-by",
259
+ "targetType": "Permission",
260
+ "targetLayer": "03-security",
261
+ "strength": "critical",
262
+ "category": "security",
263
+ "bidirectional": true
264
+ }
265
+ }
266
+ ]
267
+ },
268
+ "assigned-role": {
269
+ "allOf": [
270
+ { "$ref": "#/definitions/UuidReferenceArray" },
271
+ {
272
+ "description": "Security Role IDs assigned to this element",
273
+ "x-relationship": {
274
+ "predicate": "assigned",
275
+ "inversePredicate": "assigned-to",
276
+ "targetType": "SecurityRole",
277
+ "targetLayer": "03-security",
278
+ "strength": "critical",
279
+ "category": "security",
280
+ "bidirectional": true
281
+ }
282
+ }
283
+ ]
284
+ },
285
+ "protected-by-control": {
286
+ "allOf": [
287
+ { "$ref": "#/definitions/UuidReferenceArray" },
288
+ {
289
+ "description": "Security Control IDs protecting this element",
290
+ "x-relationship": {
291
+ "predicate": "protected-by",
292
+ "inversePredicate": "protects",
293
+ "targetType": "SecurityControl",
294
+ "targetLayer": "03-security",
295
+ "strength": "high",
296
+ "category": "security",
297
+ "bidirectional": true
298
+ }
299
+ }
300
+ ]
301
+ },
302
+ "mitigates-threat": {
303
+ "allOf": [
304
+ { "$ref": "#/definitions/UuidReferenceArray" },
305
+ {
306
+ "description": "Threat IDs mitigated by this element",
307
+ "x-relationship": {
308
+ "predicate": "mitigates",
309
+ "inversePredicate": "mitigated-by",
310
+ "targetType": "Threat",
311
+ "targetLayer": "03-security",
312
+ "strength": "high",
313
+ "category": "security",
314
+ "bidirectional": true
315
+ }
316
+ }
317
+ ]
318
+ },
319
+ "accesses-resource": {
320
+ "allOf": [
321
+ { "$ref": "#/definitions/UuidReferenceArray" },
322
+ {
323
+ "description": "Security Resource IDs accessed by this element",
324
+ "x-relationship": {
325
+ "predicate": "accesses",
326
+ "inversePredicate": "accessed-by",
327
+ "targetType": "SecurityResource",
328
+ "targetLayer": "03-security",
329
+ "strength": "critical",
330
+ "category": "security",
331
+ "bidirectional": true
332
+ }
333
+ }
334
+ ]
335
+ }
336
+ }
337
+ },
338
+
339
+ "ApplicationProperties": {
340
+ "type": "object",
341
+ "description": "Application layer relationship properties",
342
+ "properties": {
343
+ "realizes-service": {
344
+ "allOf": [
345
+ { "$ref": "#/definitions/UuidReferenceArray" },
346
+ {
347
+ "description": "Business Service IDs realized by this application element",
348
+ "x-relationship": {
349
+ "predicate": "realizes",
350
+ "inversePredicate": "realized-by",
351
+ "targetType": "BusinessService",
352
+ "targetLayer": "02-business",
353
+ "strength": "high",
354
+ "category": "application",
355
+ "bidirectional": true
356
+ }
357
+ }
358
+ ]
359
+ },
360
+ "provides-app-service": {
361
+ "allOf": [
362
+ { "$ref": "#/definitions/UuidReferenceArray" },
363
+ {
364
+ "description": "Application Service IDs provided by this element",
365
+ "x-relationship": {
366
+ "predicate": "provides",
367
+ "inversePredicate": "provided-by",
368
+ "targetType": "ApplicationService",
369
+ "targetLayer": "04-application",
370
+ "strength": "high",
371
+ "category": "application",
372
+ "bidirectional": true
373
+ }
374
+ }
375
+ ]
376
+ },
377
+ "uses-component": {
378
+ "allOf": [
379
+ { "$ref": "#/definitions/UuidReferenceArray" },
380
+ {
381
+ "description": "Application Component IDs used by this element",
382
+ "x-relationship": {
383
+ "predicate": "uses",
384
+ "inversePredicate": "used-by",
385
+ "targetType": "ApplicationComponent",
386
+ "targetLayer": "04-application",
387
+ "strength": "medium",
388
+ "category": "application",
389
+ "bidirectional": true
390
+ }
391
+ }
392
+ ]
393
+ }
394
+ }
395
+ },
396
+
397
+ "TechnologyProperties": {
398
+ "type": "object",
399
+ "description": "Technology layer relationship properties",
400
+ "properties": {
401
+ "deployed-on": {
402
+ "allOf": [
403
+ { "$ref": "#/definitions/UuidReferenceArray" },
404
+ {
405
+ "description": "Infrastructure Node IDs this element is deployed on",
406
+ "x-relationship": {
407
+ "predicate": "deployed-on",
408
+ "inversePredicate": "hosts",
409
+ "targetType": "InfrastructureNode",
410
+ "targetLayer": "05-technology",
411
+ "strength": "high",
412
+ "category": "technology",
413
+ "bidirectional": true
414
+ }
415
+ }
416
+ ]
417
+ },
418
+ "runs-on-platform": {
419
+ "allOf": [
420
+ { "$ref": "#/definitions/UuidReferenceArray" },
421
+ {
422
+ "description": "Platform IDs this element runs on",
423
+ "x-relationship": {
424
+ "predicate": "runs-on",
425
+ "inversePredicate": "supports-runtime",
426
+ "targetType": "Platform",
427
+ "targetLayer": "05-technology",
428
+ "strength": "medium",
429
+ "category": "technology",
430
+ "bidirectional": true
431
+ }
432
+ }
433
+ ]
434
+ }
435
+ }
436
+ },
437
+
438
+ "ApiProperties": {
439
+ "type": "object",
440
+ "description": "API layer relationship properties",
441
+ "properties": {
442
+ "exposes-operation": {
443
+ "allOf": [
444
+ { "$ref": "#/definitions/UuidReferenceArray" },
445
+ {
446
+ "description": "API Operation IDs exposed by this element",
447
+ "x-relationship": {
448
+ "predicate": "exposes",
449
+ "inversePredicate": "exposed-by",
450
+ "targetType": "ApiOperation",
451
+ "targetLayer": "06-api",
452
+ "strength": "high",
453
+ "category": "api",
454
+ "bidirectional": true
455
+ }
456
+ }
457
+ ]
458
+ },
459
+ "implements-endpoint": {
460
+ "allOf": [
461
+ { "$ref": "#/definitions/UuidReferenceArray" },
462
+ {
463
+ "description": "API Endpoint IDs implemented by this element",
464
+ "x-relationship": {
465
+ "predicate": "implements",
466
+ "inversePredicate": "implemented-by",
467
+ "targetType": "ApiEndpoint",
468
+ "targetLayer": "06-api",
469
+ "strength": "high",
470
+ "category": "api",
471
+ "bidirectional": true
472
+ }
473
+ }
474
+ ]
475
+ }
476
+ }
477
+ },
478
+
479
+ "DataProperties": {
480
+ "type": "object",
481
+ "description": "Data model relationship properties",
482
+ "properties": {
483
+ "uses-schema": {
484
+ "allOf": [
485
+ { "$ref": "#/definitions/UuidReferenceArray" },
486
+ {
487
+ "description": "Schema IDs used by this element",
488
+ "x-relationship": {
489
+ "predicate": "uses",
490
+ "inversePredicate": "used-by",
491
+ "targetType": "Schema",
492
+ "targetLayer": "07-data-model",
493
+ "strength": "high",
494
+ "category": "data",
495
+ "bidirectional": true
496
+ }
497
+ }
498
+ ]
499
+ },
500
+ "references-entity": {
501
+ "allOf": [
502
+ { "$ref": "#/definitions/UuidReferenceArray" },
503
+ {
504
+ "description": "Entity IDs referenced by this element",
505
+ "x-relationship": {
506
+ "predicate": "references",
507
+ "inversePredicate": "referenced-by",
508
+ "targetType": "Entity",
509
+ "targetLayer": "07-data-model",
510
+ "strength": "medium",
511
+ "category": "data",
512
+ "bidirectional": true
513
+ }
514
+ }
515
+ ]
516
+ }
517
+ }
518
+ },
519
+
520
+ "DatastoreProperties": {
521
+ "type": "object",
522
+ "description": "Datastore layer relationship properties",
523
+ "properties": {
524
+ "persists-to-database": {
525
+ "allOf": [
526
+ { "$ref": "#/definitions/UuidReferenceArray" },
527
+ {
528
+ "description": "Database IDs this element persists to",
529
+ "x-relationship": {
530
+ "predicate": "persists-to",
531
+ "inversePredicate": "stores",
532
+ "targetType": "Database",
533
+ "targetLayer": "08-datastore",
534
+ "strength": "high",
535
+ "category": "datastore",
536
+ "bidirectional": true
537
+ }
538
+ }
539
+ ]
540
+ },
541
+ "maps-to-table": {
542
+ "allOf": [
543
+ { "$ref": "#/definitions/UuidReferenceArray" },
544
+ {
545
+ "description": "Table IDs this element maps to",
546
+ "x-relationship": {
547
+ "predicate": "maps-to",
548
+ "inversePredicate": "mapped-from",
549
+ "targetType": "Table",
550
+ "targetLayer": "08-datastore",
551
+ "strength": "high",
552
+ "category": "datastore",
553
+ "bidirectional": true
554
+ }
555
+ }
556
+ ]
557
+ }
558
+ }
559
+ },
560
+
561
+ "UxProperties": {
562
+ "type": "object",
563
+ "description": "UX layer relationship properties",
564
+ "properties": {
565
+ "supports-experience": {
566
+ "allOf": [
567
+ { "$ref": "#/definitions/UuidReferenceArray" },
568
+ {
569
+ "description": "User Experience IDs supported by this element",
570
+ "x-relationship": {
571
+ "predicate": "supports",
572
+ "inversePredicate": "supported-by",
573
+ "targetType": "UserExperience",
574
+ "targetLayer": "09-ux",
575
+ "strength": "high",
576
+ "category": "ux",
577
+ "bidirectional": true
578
+ }
579
+ }
580
+ ]
581
+ },
582
+ "renders-component": {
583
+ "allOf": [
584
+ { "$ref": "#/definitions/UuidReferenceArray" },
585
+ {
586
+ "description": "UI Component IDs rendered by this element",
587
+ "x-relationship": {
588
+ "predicate": "renders",
589
+ "inversePredicate": "rendered-by",
590
+ "targetType": "UiComponent",
591
+ "targetLayer": "09-ux",
592
+ "strength": "medium",
593
+ "category": "ux",
594
+ "bidirectional": true
595
+ }
596
+ }
597
+ ]
598
+ }
599
+ }
600
+ },
601
+
602
+ "NavigationProperties": {
603
+ "type": "object",
604
+ "description": "Navigation layer relationship properties",
605
+ "properties": {
606
+ "navigates-to-route": {
607
+ "allOf": [
608
+ { "$ref": "#/definitions/UuidReferenceArray" },
609
+ {
610
+ "description": "Route IDs this element navigates to",
611
+ "x-relationship": {
612
+ "predicate": "navigates-to",
613
+ "inversePredicate": "navigated-from",
614
+ "targetType": "Route",
615
+ "targetLayer": "10-navigation",
616
+ "strength": "medium",
617
+ "category": "navigation",
618
+ "bidirectional": true
619
+ }
620
+ }
621
+ ]
622
+ },
623
+ "protected-by-guard": {
624
+ "allOf": [
625
+ { "$ref": "#/definitions/UuidReferenceArray" },
626
+ {
627
+ "description": "Route Guard IDs protecting this element",
628
+ "x-relationship": {
629
+ "predicate": "protected-by",
630
+ "inversePredicate": "protects",
631
+ "targetType": "RouteGuard",
632
+ "targetLayer": "10-navigation",
633
+ "strength": "high",
634
+ "category": "navigation",
635
+ "bidirectional": true
636
+ }
637
+ }
638
+ ]
639
+ }
640
+ }
641
+ },
642
+
643
+ "ApmProperties": {
644
+ "type": "object",
645
+ "description": "APM/Observability relationship properties",
646
+ "properties": {
647
+ "monitored-by-metric": {
648
+ "allOf": [
649
+ { "$ref": "#/definitions/UuidReferenceArray" },
650
+ {
651
+ "description": "Metric IDs monitoring this element",
652
+ "x-relationship": {
653
+ "predicate": "monitored-by",
654
+ "inversePredicate": "monitors",
655
+ "targetType": "Metric",
656
+ "targetLayer": "11-apm-observability",
657
+ "strength": "medium",
658
+ "category": "apm",
659
+ "bidirectional": true
660
+ }
661
+ }
662
+ ]
663
+ },
664
+ "has-sla": {
665
+ "allOf": [
666
+ { "$ref": "#/definitions/UuidReferenceArray" },
667
+ {
668
+ "description": "SLA IDs applicable to this element",
669
+ "x-relationship": {
670
+ "predicate": "has-sla",
671
+ "inversePredicate": "applies-to",
672
+ "targetType": "ServiceLevelAgreement",
673
+ "targetLayer": "11-apm-observability",
674
+ "strength": "high",
675
+ "category": "apm",
676
+ "bidirectional": true
677
+ }
678
+ }
679
+ ]
680
+ },
681
+ "traced-by": {
682
+ "allOf": [
683
+ { "$ref": "#/definitions/UuidReferenceArray" },
684
+ {
685
+ "description": "Trace IDs for this element",
686
+ "x-relationship": {
687
+ "predicate": "traced-by",
688
+ "inversePredicate": "traces",
689
+ "targetType": "Trace",
690
+ "targetLayer": "11-apm-observability",
691
+ "strength": "low",
692
+ "category": "apm",
693
+ "bidirectional": true
694
+ }
695
+ }
696
+ ]
697
+ }
698
+ }
699
+ },
700
+
701
+ "TestingProperties": {
702
+ "type": "object",
703
+ "description": "Testing layer relationship properties",
704
+ "properties": {
705
+ "tested-by": {
706
+ "allOf": [
707
+ { "$ref": "#/definitions/UuidReferenceArray" },
708
+ {
709
+ "description": "Test Case IDs testing this element",
710
+ "x-relationship": {
711
+ "predicate": "tested-by",
712
+ "inversePredicate": "tests",
713
+ "targetType": "TestCase",
714
+ "targetLayer": "12-testing",
715
+ "strength": "medium",
716
+ "category": "testing",
717
+ "bidirectional": true
718
+ }
719
+ }
720
+ ]
721
+ },
722
+ "covered-by-suite": {
723
+ "allOf": [
724
+ { "$ref": "#/definitions/UuidReferenceArray" },
725
+ {
726
+ "description": "Test Suite IDs covering this element",
727
+ "x-relationship": {
728
+ "predicate": "covered-by",
729
+ "inversePredicate": "covers",
730
+ "targetType": "TestSuite",
731
+ "targetLayer": "12-testing",
732
+ "strength": "medium",
733
+ "category": "testing",
734
+ "bidirectional": true
735
+ }
736
+ }
737
+ ]
738
+ }
739
+ }
740
+ },
741
+
742
+ "ConditionalCriticalityRequirements": {
743
+ "description": "Conditional requirements based on element criticality level",
744
+ "allOf": [
745
+ {
746
+ "if": {
747
+ "properties": {
748
+ "criticality": { "const": "critical" }
749
+ }
750
+ },
751
+ "then": {
752
+ "required": ["properties"],
753
+ "properties": {
754
+ "properties": {
755
+ "required": ["motivation", "security"],
756
+ "properties": {
757
+ "motivation": {
758
+ "required": ["supports-goals"]
759
+ },
760
+ "security": {
761
+ "required": ["requires-permission", "protected-by-control"]
762
+ }
763
+ }
764
+ }
765
+ }
766
+ }
767
+ },
768
+ {
769
+ "if": {
770
+ "properties": {
771
+ "criticality": { "const": "high" }
772
+ }
773
+ },
774
+ "then": {
775
+ "required": ["properties"],
776
+ "properties": {
777
+ "properties": {
778
+ "required": ["motivation"],
779
+ "properties": {
780
+ "motivation": {
781
+ "required": ["supports-goals"]
782
+ }
783
+ }
784
+ }
785
+ }
786
+ }
787
+ }
788
+ ]
789
+ }
790
+ }
791
+ }