@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,1465 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/schemas/05-technology-layer.schema.json",
4
+ "title": "Technology Layer Layer Schema",
5
+ "description": "Describes the technology infrastructure including hardware, software, networks, and facilities that support applications.",
6
+ "layerMetadata": {
7
+ "layerId": "05-technology-layer",
8
+ "layerName": "Technology Layer",
9
+ "intraLayerRelationshipSupport": true,
10
+ "crossLayerRelationshipSupport": true,
11
+ "relationshipCatalogVersion": "2.1.0"
12
+ },
13
+ "intraLayerRelationships": {
14
+ "$comment": "Relationships between entities within this layer. References relationship-catalog.json by ID.",
15
+ "allowed": [
16
+ {
17
+ "relationshipTypeId": "composition",
18
+ "sourceTypes": ["BusinessCollaboration", "TestCoverageModel", "TestCoverageTarget"],
19
+ "targetTypes": ["BusinessRole", "OutcomeCategory", "TestCoverageTarget"],
20
+ "examples": [
21
+ {
22
+ "source": "BusinessCollaboration",
23
+ "target": "BusinessRole",
24
+ "description": "Business collaboration composes business roles that participate in it"
25
+ },
26
+ {
27
+ "source": "TestCoverageModel",
28
+ "target": "TestCoverageTarget",
29
+ "description": "Coverage model composes targets defining what needs testing",
30
+ "layer": "12-testing"
31
+ },
32
+ {
33
+ "source": "TestCoverageTarget",
34
+ "target": "OutcomeCategory",
35
+ "description": "Coverage target composes expected outcome categories",
36
+ "layer": "12-testing"
37
+ }
38
+ ]
39
+ },
40
+ {
41
+ "relationshipTypeId": "aggregation",
42
+ "sourceTypes": ["CoverageRequirement", "Goal", "InputPartitionSelection"],
43
+ "targetTypes": ["ContextVariation", "Goal", "PartitionValue"],
44
+ "examples": [
45
+ {
46
+ "source": "Goal",
47
+ "target": "Goal",
48
+ "description": "High-level goal aggregates sub-goals",
49
+ "layer": "01-motivation"
50
+ },
51
+ {
52
+ "source": "InputPartitionSelection",
53
+ "target": "PartitionValue",
54
+ "description": "Partition selection aggregates multiple partition values to cover",
55
+ "layer": "12-testing"
56
+ },
57
+ {
58
+ "source": "CoverageRequirement",
59
+ "target": "ContextVariation",
60
+ "description": "Requirement aggregates selected contexts for testing",
61
+ "layer": "12-testing"
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "relationshipTypeId": "specialization",
67
+ "sourceTypes": ["PremiumAccount", "Schema"],
68
+ "targetTypes": ["Account", "Schema"],
69
+ "examples": [
70
+ {
71
+ "source": "PremiumAccount",
72
+ "target": "Account",
73
+ "description": "Premium account specializes the general account concept"
74
+ },
75
+ {
76
+ "source": "Schema",
77
+ "target": "Schema",
78
+ "description": "API schema specializes another via allOf/oneOf/anyOf composition",
79
+ "layer": "06-api"
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ "relationshipTypeId": "realization",
85
+ "sourceTypes": ["ApplicationService", "Goal", "Outcome"],
86
+ "targetTypes": ["BusinessService", "Goal", "Value"],
87
+ "examples": [
88
+ {
89
+ "source": "Goal",
90
+ "target": "Value",
91
+ "description": "Goal realizes value for stakeholders",
92
+ "layer": "01-motivation"
93
+ },
94
+ {
95
+ "source": "Outcome",
96
+ "target": "Goal",
97
+ "description": "Outcome realizes achievement of goal",
98
+ "layer": "01-motivation"
99
+ },
100
+ {
101
+ "source": "ApplicationService",
102
+ "target": "BusinessService",
103
+ "description": "Application service realizes business service capability"
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ "relationshipTypeId": "assignment",
109
+ "sourceTypes": ["BusinessActor"],
110
+ "targetTypes": ["BusinessRole"],
111
+ "examples": [
112
+ {
113
+ "source": "BusinessActor",
114
+ "target": "BusinessRole",
115
+ "description": "Business actor assigned to business role"
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ "relationshipTypeId": "association",
121
+ "sourceTypes": ["Requirement", "Stakeholder"],
122
+ "targetTypes": ["Constraint", "Driver", "Goal"],
123
+ "examples": [
124
+ {
125
+ "source": "Stakeholder",
126
+ "target": "Driver",
127
+ "description": "Stakeholder has concern represented by driver",
128
+ "layer": "01-motivation"
129
+ },
130
+ {
131
+ "source": "Stakeholder",
132
+ "target": "Goal",
133
+ "description": "Stakeholder has interest in goal",
134
+ "layer": "01-motivation"
135
+ },
136
+ {
137
+ "source": "Requirement",
138
+ "target": "Constraint",
139
+ "description": "Requirement is limited by constraint",
140
+ "layer": "01-motivation"
141
+ }
142
+ ]
143
+ },
144
+ {
145
+ "relationshipTypeId": "triggering",
146
+ "sourceTypes": ["BusinessEvent", "CoverageGap", "PartitionDependency"],
147
+ "targetTypes": ["BusinessProcess", "CoverageRequirement", "PartitionValue"],
148
+ "examples": [
149
+ {
150
+ "source": "BusinessEvent",
151
+ "target": "BusinessProcess",
152
+ "description": "Business event triggers business process execution"
153
+ },
154
+ {
155
+ "source": "PartitionDependency",
156
+ "target": "PartitionValue",
157
+ "description": "Dependency condition triggers inclusion/exclusion of partition values",
158
+ "layer": "12-testing"
159
+ },
160
+ {
161
+ "source": "CoverageGap",
162
+ "target": "CoverageRequirement",
163
+ "description": "Identified gap triggers need for additional coverage",
164
+ "layer": "12-testing"
165
+ }
166
+ ]
167
+ },
168
+ {
169
+ "relationshipTypeId": "flow",
170
+ "sourceTypes": ["BusinessProcess", "CoverageRequirement", "TestCoverageTarget"],
171
+ "targetTypes": ["BusinessProcess", "CoverageRequirement", "TestCaseSketch"],
172
+ "examples": [
173
+ {
174
+ "source": "BusinessProcess",
175
+ "target": "BusinessProcess",
176
+ "description": "One business process flows to the next in sequence"
177
+ },
178
+ {
179
+ "source": "TestCoverageTarget",
180
+ "target": "CoverageRequirement",
181
+ "description": "Target flows to requirements that specify its coverage",
182
+ "layer": "12-testing"
183
+ },
184
+ {
185
+ "source": "CoverageRequirement",
186
+ "target": "TestCaseSketch",
187
+ "description": "Requirement flows to sketches that implement it",
188
+ "layer": "12-testing"
189
+ }
190
+ ]
191
+ },
192
+ {
193
+ "relationshipTypeId": "serving",
194
+ "sourceTypes": ["BusinessService", "ContextVariation", "InputSpacePartition"],
195
+ "targetTypes": ["BusinessActor", "TestCoverageTarget"],
196
+ "examples": [
197
+ {
198
+ "source": "BusinessService",
199
+ "target": "BusinessActor",
200
+ "description": "Business service serves business actor"
201
+ },
202
+ {
203
+ "source": "InputSpacePartition",
204
+ "target": "TestCoverageTarget",
205
+ "description": "Partition serves target by defining testable input space",
206
+ "layer": "12-testing"
207
+ },
208
+ {
209
+ "source": "ContextVariation",
210
+ "target": "TestCoverageTarget",
211
+ "description": "Context serves target by defining execution environments",
212
+ "layer": "12-testing"
213
+ }
214
+ ]
215
+ },
216
+ {
217
+ "relationshipTypeId": "access",
218
+ "sourceTypes": ["BusinessProcess", "CoverageRequirement", "TestCaseSketch"],
219
+ "targetTypes": ["BusinessObject", "InputPartitionSelection", "InputSelection"],
220
+ "examples": [
221
+ {
222
+ "source": "BusinessProcess",
223
+ "target": "BusinessObject",
224
+ "description": "Business process accesses business object data"
225
+ },
226
+ {
227
+ "source": "TestCaseSketch",
228
+ "target": "InputSelection",
229
+ "description": "Test sketch accesses input selections for test execution",
230
+ "layer": "12-testing"
231
+ },
232
+ {
233
+ "source": "CoverageRequirement",
234
+ "target": "InputPartitionSelection",
235
+ "description": "Requirement accesses partition selections for coverage",
236
+ "layer": "12-testing"
237
+ }
238
+ ]
239
+ },
240
+ {
241
+ "relationshipTypeId": "uses",
242
+ "sourceTypes": ["ApplicationComponent"],
243
+ "targetTypes": ["TechnologyService"],
244
+ "examples": [
245
+ {
246
+ "source": "ApplicationComponent",
247
+ "target": "TechnologyService",
248
+ "description": "Application component uses technology service"
249
+ }
250
+ ]
251
+ },
252
+ {
253
+ "relationshipTypeId": "depends-on",
254
+ "sourceTypes": ["ApplicationService", "TestCaseSketch"],
255
+ "targetTypes": ["ContextVariation", "DataObject", "OutcomeCategory"],
256
+ "examples": [
257
+ {
258
+ "source": "ApplicationService",
259
+ "target": "DataObject",
260
+ "description": "Application service depends on data object"
261
+ },
262
+ {
263
+ "source": "TestCaseSketch",
264
+ "target": "ContextVariation",
265
+ "description": "Test sketch depends on context for execution environment",
266
+ "layer": "12-testing"
267
+ },
268
+ {
269
+ "source": "TestCaseSketch",
270
+ "target": "OutcomeCategory",
271
+ "description": "Test sketch depends on expected outcome category",
272
+ "layer": "12-testing"
273
+ }
274
+ ]
275
+ },
276
+ {
277
+ "relationshipTypeId": "supports-goals",
278
+ "sourceTypes": ["BusinessService", "Operation"],
279
+ "targetTypes": ["Goal"],
280
+ "examples": [
281
+ {
282
+ "source": "BusinessService",
283
+ "sourceLayer": "02-business",
284
+ "target": "Goal",
285
+ "targetLayer": "01-motivation",
286
+ "value": "goal-revenue-growth",
287
+ "description": "Payment service supports revenue growth goal"
288
+ },
289
+ {
290
+ "source": "Operation",
291
+ "sourceLayer": "06-api",
292
+ "target": "Goal",
293
+ "targetLayer": "01-motivation",
294
+ "value": "goal-customer-satisfaction",
295
+ "description": "GET /products operation supports customer satisfaction goal"
296
+ }
297
+ ]
298
+ },
299
+ {
300
+ "relationshipTypeId": "fulfills-requirements",
301
+ "sourceTypes": ["ApplicationService", "Operation"],
302
+ "targetTypes": ["Requirement"],
303
+ "examples": [
304
+ {
305
+ "source": "ApplicationService",
306
+ "target": "Requirement",
307
+ "description": "OAuth service fulfills authentication requirement"
308
+ },
309
+ {
310
+ "source": "Operation",
311
+ "sourceLayer": "06-api",
312
+ "target": "Requirement",
313
+ "targetLayer": "01-motivation",
314
+ "value": "req-product-creation-capability",
315
+ "description": "POST /products operation fulfills product creation requirement"
316
+ }
317
+ ]
318
+ },
319
+ {
320
+ "relationshipTypeId": "governed-by-principles",
321
+ "sourceTypes": ["APIOperation"],
322
+ "targetTypes": ["Principle"],
323
+ "examples": [
324
+ {
325
+ "source": "APIOperation",
326
+ "target": "Principle",
327
+ "description": "REST API governed by RESTful design principles"
328
+ }
329
+ ]
330
+ },
331
+ {
332
+ "relationshipTypeId": "constrainedby",
333
+ "sourceTypes": ["APIOperation"],
334
+ "targetTypes": ["Constraint"],
335
+ "examples": [
336
+ {
337
+ "source": "APIOperation",
338
+ "target": "Constraint",
339
+ "description": "API operation constrained by rate limit"
340
+ }
341
+ ]
342
+ }
343
+ ]
344
+ },
345
+ "crossLayerRelationships": {
346
+ "$comment": "Relationships to/from entities in other layers",
347
+ "outgoing": [
348
+ {
349
+ "id": "apm-health-check-endpoint",
350
+ "predicate": "health-check-endpoint",
351
+ "inversePredicate": "referenced-by",
352
+ "targetLayer": "11-apm",
353
+ "targetTypes": ["HealthCheckEndpoint"],
354
+ "sourceTypes": ["TechnologyService"],
355
+ "fieldPath": "apm.health-check-endpoint",
356
+ "cardinality": "single",
357
+ "format": "string",
358
+ "strength": "medium",
359
+ "required": false,
360
+ "description": "health check endpoint",
361
+ "examples": [
362
+ {
363
+ "elementType": "TechnologyService",
364
+ "elementId": "container-platform",
365
+ "elementName": "container-platform",
366
+ "fieldPath": "apm.health-check-endpoint",
367
+ "value": "/healthz",
368
+ "layer": "05-technology"
369
+ }
370
+ ]
371
+ },
372
+ {
373
+ "id": "apm-health-monitored",
374
+ "predicate": "health-monitored",
375
+ "inversePredicate": "referenced-by",
376
+ "targetLayer": "11-apm",
377
+ "targetTypes": ["HealthMonitored"],
378
+ "sourceTypes": ["TechnologyService"],
379
+ "fieldPath": "apm.health-monitored",
380
+ "cardinality": "single",
381
+ "format": "boolean",
382
+ "strength": "medium",
383
+ "required": false,
384
+ "description": "whether health is actively monitored",
385
+ "examples": [
386
+ {
387
+ "elementType": "TechnologyService",
388
+ "elementId": "container-platform",
389
+ "elementName": "container-platform",
390
+ "fieldPath": "apm.health-monitored",
391
+ "value": "true",
392
+ "layer": "05-technology"
393
+ },
394
+ {
395
+ "elementType": "TechnologyService",
396
+ "elementId": "database-service",
397
+ "elementName": "database-service",
398
+ "fieldPath": "apm.health-monitored",
399
+ "value": "true",
400
+ "layer": "05-technology"
401
+ }
402
+ ]
403
+ },
404
+ {
405
+ "id": "apm-sla-target-availability",
406
+ "predicate": "sla-target-availability",
407
+ "inversePredicate": "referenced-by",
408
+ "targetLayer": "11-apm",
409
+ "targetTypes": ["SlaTargetAvailability"],
410
+ "sourceTypes": ["TechnologyService"],
411
+ "fieldPath": "apm.sla-target-availability",
412
+ "cardinality": "single",
413
+ "format": "percentage",
414
+ "strength": "medium",
415
+ "required": false,
416
+ "description": "string (e.g., \"99.95%\", \"99.99%\", optional)",
417
+ "examples": [
418
+ {
419
+ "elementType": "TechnologyService",
420
+ "elementId": "container-platform",
421
+ "elementName": "container-platform",
422
+ "fieldPath": "apm.sla-target-availability",
423
+ "value": "99.95%",
424
+ "layer": "05-technology"
425
+ },
426
+ {
427
+ "elementType": "TechnologyService",
428
+ "elementId": "database-service",
429
+ "elementName": "database-service",
430
+ "fieldPath": "apm.sla-target-availability",
431
+ "value": "99.99%",
432
+ "layer": "05-technology"
433
+ }
434
+ ]
435
+ },
436
+ {
437
+ "id": "apm-sla-target-latency",
438
+ "predicate": "sla-target-latency",
439
+ "inversePredicate": "referenced-by",
440
+ "targetLayer": "11-apm",
441
+ "targetTypes": ["SlaTargetLatency"],
442
+ "sourceTypes": ["TechnologyService"],
443
+ "fieldPath": "apm.sla-target-latency",
444
+ "cardinality": "single",
445
+ "format": "duration",
446
+ "strength": "medium",
447
+ "required": false,
448
+ "description": "string (e.g., \"200ms\", \"500ms\", optional)",
449
+ "examples": [
450
+ {
451
+ "elementType": "TechnologyService",
452
+ "elementId": "database-service",
453
+ "elementName": "database-service",
454
+ "fieldPath": "apm.sla-target-latency",
455
+ "value": "10ms",
456
+ "layer": "05-technology"
457
+ }
458
+ ]
459
+ },
460
+ {
461
+ "id": "motivation-constrained-by",
462
+ "predicate": "constrained-by",
463
+ "inversePredicate": "constrains",
464
+ "targetLayer": "01-motivation",
465
+ "targetTypes": ["ConstrainedBy"],
466
+ "sourceTypes": [
467
+ "Artifact",
468
+ "CommunicationNetwork",
469
+ "Node",
470
+ "SystemSoftware",
471
+ "TechnologyService"
472
+ ],
473
+ "fieldPath": "motivation.constrained-by",
474
+ "cardinality": "array",
475
+ "format": "reference",
476
+ "strength": "medium",
477
+ "required": false,
478
+ "description": "string[] (Constraint IDs for regulatory/compliance, optional)",
479
+ "examples": [
480
+ {
481
+ "elementType": "Node",
482
+ "elementId": "k8s-cluster",
483
+ "elementName": "k8s-cluster",
484
+ "fieldPath": "motivation.constrained-by",
485
+ "value": "constraint-aws-infrastructure,constraint-budget-500k",
486
+ "layer": "05-technology"
487
+ },
488
+ {
489
+ "elementType": "Node",
490
+ "elementId": "postgres-cluster",
491
+ "elementName": "postgres-cluster",
492
+ "fieldPath": "motivation.constrained-by",
493
+ "value": "constraint-no-proprietary-databases",
494
+ "layer": "05-technology"
495
+ }
496
+ ]
497
+ },
498
+ {
499
+ "id": "motivation-fulfills-requirements",
500
+ "predicate": "fulfills-requirements",
501
+ "inversePredicate": "fulfilled-by",
502
+ "targetLayer": "01-motivation",
503
+ "targetTypes": ["FulfillsRequirement"],
504
+ "sourceTypes": ["CommunicationNetwork", "Node", "SystemSoftware"],
505
+ "fieldPath": "motivation.fulfills-requirements",
506
+ "cardinality": "array",
507
+ "format": "reference",
508
+ "strength": "high",
509
+ "required": false,
510
+ "description": "comma-separated Requirement IDs this function fulfills",
511
+ "examples": [
512
+ {
513
+ "elementType": "Node",
514
+ "elementId": "k8s-cluster",
515
+ "elementName": "k8s-cluster",
516
+ "fieldPath": "motivation.fulfills-requirements",
517
+ "value": "req-horizontal-scaling,req-99-95-availability",
518
+ "layer": "05-technology"
519
+ },
520
+ {
521
+ "elementType": "Node",
522
+ "elementId": "postgres-cluster",
523
+ "elementName": "postgres-cluster",
524
+ "fieldPath": "motivation.fulfills-requirements",
525
+ "value": "req-acid-compliance,req-replication",
526
+ "layer": "05-technology"
527
+ }
528
+ ]
529
+ },
530
+ {
531
+ "id": "motivation-governed-by-principles",
532
+ "predicate": "governed-by-principles",
533
+ "inversePredicate": "governs",
534
+ "targetLayer": "01-motivation",
535
+ "targetTypes": ["GovernedByPrinciple"],
536
+ "sourceTypes": ["CommunicationNetwork", "Node", "SystemSoftware", "TechnologyService"],
537
+ "fieldPath": "motivation.governed-by-principles",
538
+ "cardinality": "array",
539
+ "format": "reference",
540
+ "strength": "high",
541
+ "required": false,
542
+ "description": "BusinessService governed by Principles",
543
+ "examples": [
544
+ {
545
+ "elementType": "BusinessService",
546
+ "elementId": "order-service",
547
+ "elementName": "Order Processing Service",
548
+ "fieldPath": "motivation.governed-by-principles",
549
+ "value": "principle-customer-first,principle-automation",
550
+ "layer": "02-business"
551
+ },
552
+ {
553
+ "elementType": "ApplicationService",
554
+ "elementId": "product-service",
555
+ "elementName": "product-service",
556
+ "fieldPath": "motivation.governed-by-principles",
557
+ "value": "principle-api-first,principle-cloud-native",
558
+ "layer": "04-application"
559
+ }
560
+ ]
561
+ },
562
+ {
563
+ "id": "motivation-supports-goals",
564
+ "predicate": "supports-goals",
565
+ "inversePredicate": "supported-by",
566
+ "targetLayer": "01-motivation",
567
+ "targetTypes": ["SupportsGoal"],
568
+ "sourceTypes": ["TechnologyService"],
569
+ "fieldPath": "motivation.supports-goals",
570
+ "cardinality": "array",
571
+ "format": "reference",
572
+ "strength": "high",
573
+ "required": false,
574
+ "description": "BusinessService supports Goals",
575
+ "examples": [
576
+ {
577
+ "elementType": "BusinessService",
578
+ "elementId": "order-service",
579
+ "elementName": "Order Processing Service",
580
+ "fieldPath": "motivation.supports-goals",
581
+ "value": "goal-customer-satisfaction,goal-revenue-growth",
582
+ "layer": "02-business"
583
+ },
584
+ {
585
+ "elementType": "ApplicationService",
586
+ "elementId": "product-service",
587
+ "elementName": "product-service",
588
+ "fieldPath": "motivation.supports-goals",
589
+ "value": "goal-product-catalog-accuracy,goal-customer-satisfaction",
590
+ "layer": "04-application"
591
+ }
592
+ ]
593
+ },
594
+ {
595
+ "id": "security-classification",
596
+ "predicate": "classification",
597
+ "inversePredicate": "referenced-by",
598
+ "targetLayer": "03-security",
599
+ "targetTypes": ["Classification"],
600
+ "sourceTypes": ["Artifact"],
601
+ "fieldPath": "security.classification",
602
+ "cardinality": "single",
603
+ "format": "string",
604
+ "strength": "low",
605
+ "required": false,
606
+ "description": "Links to Classification in target layer",
607
+ "examples": [
608
+ {
609
+ "elementType": "Artifact",
610
+ "elementId": "product-db",
611
+ "elementName": "product-db",
612
+ "fieldPath": "security.classification",
613
+ "value": "internal",
614
+ "layer": "05-technology"
615
+ },
616
+ {
617
+ "elementType": "Artifact",
618
+ "elementId": "customer-db",
619
+ "elementName": "customer-db",
620
+ "fieldPath": "security.classification",
621
+ "value": "restricted",
622
+ "layer": "05-technology"
623
+ }
624
+ ]
625
+ },
626
+ {
627
+ "id": "security-encryption-required",
628
+ "predicate": "encryption-required",
629
+ "inversePredicate": "referenced-by",
630
+ "targetLayer": "03-security",
631
+ "targetTypes": ["EncryptionRequired"],
632
+ "sourceTypes": ["Artifact"],
633
+ "fieldPath": "security.encryption-required",
634
+ "cardinality": "single",
635
+ "format": "boolean",
636
+ "strength": "medium",
637
+ "required": false,
638
+ "description": "Links to EncryptionRequired in target layer",
639
+ "examples": [
640
+ {
641
+ "elementType": "Artifact",
642
+ "elementId": "product-db",
643
+ "elementName": "product-db",
644
+ "fieldPath": "security.encryption-required",
645
+ "value": "true",
646
+ "layer": "05-technology"
647
+ },
648
+ {
649
+ "elementType": "Artifact",
650
+ "elementId": "customer-db",
651
+ "elementName": "customer-db",
652
+ "fieldPath": "security.encryption-required",
653
+ "value": "true",
654
+ "layer": "05-technology"
655
+ }
656
+ ]
657
+ },
658
+ {
659
+ "id": "security-encryption-type",
660
+ "predicate": "encryption-type",
661
+ "inversePredicate": "referenced-by",
662
+ "targetLayer": "03-security",
663
+ "targetTypes": ["EncryptionType"],
664
+ "sourceTypes": ["Artifact"],
665
+ "fieldPath": "security.encryption-type",
666
+ "cardinality": "single",
667
+ "format": "string",
668
+ "strength": "medium",
669
+ "required": false,
670
+ "description": "Links to EncryptionType in target layer",
671
+ "examples": [
672
+ {
673
+ "elementType": "Artifact",
674
+ "elementId": "product-db",
675
+ "elementName": "product-db",
676
+ "fieldPath": "security.encryption-type",
677
+ "value": "both",
678
+ "layer": "05-technology"
679
+ },
680
+ {
681
+ "elementType": "Artifact",
682
+ "elementId": "customer-db",
683
+ "elementName": "customer-db",
684
+ "fieldPath": "security.encryption-type",
685
+ "value": "both",
686
+ "layer": "05-technology"
687
+ }
688
+ ]
689
+ },
690
+ {
691
+ "id": "security-pii",
692
+ "predicate": "pii",
693
+ "inversePredicate": "referenced-by",
694
+ "targetLayer": "03-security",
695
+ "targetTypes": ["Pii"],
696
+ "sourceTypes": ["Artifact"],
697
+ "fieldPath": "security.pii",
698
+ "cardinality": "single",
699
+ "format": "boolean",
700
+ "strength": "medium",
701
+ "required": false,
702
+ "description": "contains personally identifiable information",
703
+ "examples": [
704
+ {
705
+ "elementType": "Artifact",
706
+ "elementId": "customer-db",
707
+ "elementName": "customer-db",
708
+ "fieldPath": "security.pii",
709
+ "value": "true",
710
+ "layer": "05-technology"
711
+ }
712
+ ]
713
+ }
714
+ ],
715
+ "incoming": []
716
+ },
717
+ "type": "object",
718
+ "properties": {
719
+ "nodes": {
720
+ "type": "array",
721
+ "description": "Collection of Node entities",
722
+ "items": {
723
+ "$ref": "#/definitions/Node"
724
+ }
725
+ },
726
+ "devices": {
727
+ "type": "array",
728
+ "description": "Collection of Device entities",
729
+ "items": {
730
+ "$ref": "#/definitions/Device"
731
+ }
732
+ },
733
+ "system-softwares": {
734
+ "type": "array",
735
+ "description": "Collection of SystemSoftware entities",
736
+ "items": {
737
+ "$ref": "#/definitions/SystemSoftware"
738
+ }
739
+ },
740
+ "technology-collaborations": {
741
+ "type": "array",
742
+ "description": "Collection of TechnologyCollaboration entities",
743
+ "items": {
744
+ "$ref": "#/definitions/TechnologyCollaboration"
745
+ }
746
+ },
747
+ "technology-interfaces": {
748
+ "type": "array",
749
+ "description": "Collection of TechnologyInterface entities",
750
+ "items": {
751
+ "$ref": "#/definitions/TechnologyInterface"
752
+ }
753
+ },
754
+ "paths": {
755
+ "type": "array",
756
+ "description": "Collection of Path entities",
757
+ "items": {
758
+ "$ref": "#/definitions/Path"
759
+ }
760
+ },
761
+ "communication-networks": {
762
+ "type": "array",
763
+ "description": "Collection of CommunicationNetwork entities",
764
+ "items": {
765
+ "$ref": "#/definitions/CommunicationNetwork"
766
+ }
767
+ },
768
+ "technology-functions": {
769
+ "type": "array",
770
+ "description": "Collection of TechnologyFunction entities",
771
+ "items": {
772
+ "$ref": "#/definitions/TechnologyFunction"
773
+ }
774
+ },
775
+ "technology-processes": {
776
+ "type": "array",
777
+ "description": "Collection of TechnologyProcess entities",
778
+ "items": {
779
+ "$ref": "#/definitions/TechnologyProcess"
780
+ }
781
+ },
782
+ "technology-interactions": {
783
+ "type": "array",
784
+ "description": "Collection of TechnologyInteraction entities",
785
+ "items": {
786
+ "$ref": "#/definitions/TechnologyInteraction"
787
+ }
788
+ },
789
+ "technology-events": {
790
+ "type": "array",
791
+ "description": "Collection of TechnologyEvent entities",
792
+ "items": {
793
+ "$ref": "#/definitions/TechnologyEvent"
794
+ }
795
+ },
796
+ "technology-services": {
797
+ "type": "array",
798
+ "description": "Collection of TechnologyService entities",
799
+ "items": {
800
+ "$ref": "#/definitions/TechnologyService"
801
+ }
802
+ },
803
+ "artifacts": {
804
+ "type": "array",
805
+ "description": "Collection of Artifact entities",
806
+ "items": {
807
+ "$ref": "#/definitions/Artifact"
808
+ }
809
+ }
810
+ },
811
+ "definitions": {
812
+ "NodeType": {
813
+ "type": "string",
814
+ "enum": [
815
+ "server",
816
+ "container",
817
+ "vm",
818
+ "kubernetes-cluster",
819
+ "serverless-function",
820
+ "database-cluster"
821
+ ]
822
+ },
823
+ "DeviceType": {
824
+ "type": "string",
825
+ "enum": ["server", "workstation", "mobile", "iot-device", "network-device"]
826
+ },
827
+ "SystemSoftwareType": {
828
+ "type": "string",
829
+ "enum": [
830
+ "operating-system",
831
+ "database",
832
+ "middleware",
833
+ "container-runtime",
834
+ "web-server",
835
+ "message-broker"
836
+ ]
837
+ },
838
+ "TechProtocol": {
839
+ "type": "string",
840
+ "enum": ["HTTP", "HTTPS", "TCP", "UDP", "WebSocket", "AMQP", "MQTT", "SQL"]
841
+ },
842
+ "PathType": {
843
+ "type": "string",
844
+ "enum": ["network", "vpn", "direct-connect", "internet"]
845
+ },
846
+ "NetworkType": {
847
+ "type": "string",
848
+ "enum": ["lan", "wan", "vpn", "internet", "cdn"]
849
+ },
850
+ "TechEventType": {
851
+ "type": "string",
852
+ "enum": ["startup", "shutdown", "failure", "scaling", "maintenance"]
853
+ },
854
+ "TechServiceType": {
855
+ "type": "string",
856
+ "enum": ["infrastructure", "platform", "storage", "compute", "network"]
857
+ },
858
+ "ArtifactType": {
859
+ "type": "string",
860
+ "enum": ["database", "file", "configuration", "binary", "log", "backup"]
861
+ },
862
+ "Node": {
863
+ "type": "object",
864
+ "description": "Computational or physical resource that hosts artifacts",
865
+ "required": ["id", "name", "nodeType"],
866
+ "properties": {
867
+ "id": {
868
+ "type": "string",
869
+ "format": "uuid",
870
+ "minLength": 1
871
+ },
872
+ "name": {
873
+ "type": "string",
874
+ "minLength": 1
875
+ },
876
+ "documentation": {
877
+ "type": "string",
878
+ "minLength": 1
879
+ },
880
+ "nodeType": {
881
+ "$ref": "#/definitions/NodeType"
882
+ },
883
+ "properties": {
884
+ "type": "object",
885
+ "description": "Cross-layer properties",
886
+ "properties": {
887
+ "node": {
888
+ "type": "object",
889
+ "properties": {
890
+ "provider": {
891
+ "type": "string",
892
+ "description": "optional"
893
+ },
894
+ "instance-type": {
895
+ "type": "string",
896
+ "description": "optional"
897
+ },
898
+ "region": {
899
+ "type": "string",
900
+ "description": "optional"
901
+ }
902
+ }
903
+ },
904
+ "spec": {
905
+ "type": "object",
906
+ "properties": {
907
+ "terraform": {
908
+ "type": "string",
909
+ "description": "optional"
910
+ }
911
+ }
912
+ },
913
+ "motivation": {
914
+ "type": "object",
915
+ "properties": {
916
+ "governed-by-principles": {
917
+ "type": "string",
918
+ "description": "optional, technology selection principles"
919
+ },
920
+ "constrained-by": {
921
+ "type": "string",
922
+ "description": "optional, budget, vendor, regulatory constraints"
923
+ },
924
+ "fulfills-requirements": {
925
+ "type": "string",
926
+ "description": "optional, technical/non-functional requirements"
927
+ }
928
+ }
929
+ }
930
+ }
931
+ }
932
+ }
933
+ },
934
+ "Device": {
935
+ "type": "object",
936
+ "description": "Physical IT resource with processing capability",
937
+ "required": ["id", "name", "deviceType"],
938
+ "properties": {
939
+ "id": {
940
+ "type": "string",
941
+ "format": "uuid",
942
+ "minLength": 1
943
+ },
944
+ "name": {
945
+ "type": "string",
946
+ "minLength": 1
947
+ },
948
+ "documentation": {
949
+ "type": "string",
950
+ "minLength": 1
951
+ },
952
+ "deviceType": {
953
+ "$ref": "#/definitions/DeviceType"
954
+ },
955
+ "properties": {
956
+ "type": "object",
957
+ "description": "Cross-layer properties",
958
+ "properties": {
959
+ "device": {
960
+ "type": "object",
961
+ "properties": {
962
+ "manufacturer": {
963
+ "type": "string",
964
+ "description": ""
965
+ },
966
+ "model": {
967
+ "type": "string",
968
+ "description": ""
969
+ }
970
+ }
971
+ }
972
+ }
973
+ }
974
+ }
975
+ },
976
+ "SystemSoftware": {
977
+ "type": "object",
978
+ "description": "Software that provides platform for applications",
979
+ "required": ["id", "name", "softwareType"],
980
+ "properties": {
981
+ "id": {
982
+ "type": "string",
983
+ "format": "uuid",
984
+ "minLength": 1
985
+ },
986
+ "name": {
987
+ "type": "string",
988
+ "minLength": 1
989
+ },
990
+ "documentation": {
991
+ "type": "string",
992
+ "minLength": 1
993
+ },
994
+ "softwareType": {
995
+ "$ref": "#/definitions/SystemSoftwareType"
996
+ },
997
+ "properties": {
998
+ "type": "object",
999
+ "description": "Cross-layer properties",
1000
+ "properties": {
1001
+ "software": {
1002
+ "type": "object",
1003
+ "properties": {
1004
+ "version": {
1005
+ "type": "string",
1006
+ "description": ""
1007
+ },
1008
+ "license": {
1009
+ "type": "string",
1010
+ "description": "optional"
1011
+ }
1012
+ }
1013
+ },
1014
+ "motivation": {
1015
+ "type": "object",
1016
+ "properties": {
1017
+ "governed-by-principles": {
1018
+ "type": "string",
1019
+ "description": "optional, software selection principles"
1020
+ },
1021
+ "constrained-by": {
1022
+ "type": "string",
1023
+ "description": "optional, license, compliance constraints"
1024
+ },
1025
+ "fulfills-requirements": {
1026
+ "type": "string",
1027
+ "description": "optional, security, compliance requirements"
1028
+ }
1029
+ }
1030
+ }
1031
+ }
1032
+ }
1033
+ }
1034
+ },
1035
+ "TechnologyCollaboration": {
1036
+ "type": "object",
1037
+ "description": "Aggregate of nodes working together",
1038
+ "required": ["id", "name"],
1039
+ "properties": {
1040
+ "id": {
1041
+ "type": "string",
1042
+ "format": "uuid",
1043
+ "minLength": 1
1044
+ },
1045
+ "name": {
1046
+ "type": "string",
1047
+ "minLength": 1
1048
+ },
1049
+ "documentation": {
1050
+ "type": "string",
1051
+ "minLength": 1
1052
+ },
1053
+ "nodes": {
1054
+ "type": "array",
1055
+ "description": "Contains relationship",
1056
+ "items": {
1057
+ "type": "string"
1058
+ }
1059
+ }
1060
+ }
1061
+ },
1062
+ "TechnologyInterface": {
1063
+ "type": "object",
1064
+ "description": "Point of access where technology services are available",
1065
+ "required": ["id", "name", "protocol"],
1066
+ "properties": {
1067
+ "id": {
1068
+ "type": "string",
1069
+ "format": "uuid",
1070
+ "minLength": 1
1071
+ },
1072
+ "name": {
1073
+ "type": "string",
1074
+ "minLength": 1
1075
+ },
1076
+ "documentation": {
1077
+ "type": "string",
1078
+ "minLength": 1
1079
+ },
1080
+ "protocol": {
1081
+ "$ref": "#/definitions/TechProtocol"
1082
+ },
1083
+ "properties": {
1084
+ "type": "object",
1085
+ "description": "Cross-layer properties",
1086
+ "properties": {
1087
+ "interface": {
1088
+ "type": "object",
1089
+ "properties": {
1090
+ "port": {
1091
+ "type": "string",
1092
+ "description": ""
1093
+ },
1094
+ "url": {
1095
+ "type": "string",
1096
+ "description": ""
1097
+ }
1098
+ }
1099
+ }
1100
+ }
1101
+ }
1102
+ }
1103
+ },
1104
+ "Path": {
1105
+ "type": "object",
1106
+ "description": "Link between nodes through which they exchange",
1107
+ "required": ["id", "name", "pathType"],
1108
+ "properties": {
1109
+ "id": {
1110
+ "type": "string",
1111
+ "format": "uuid",
1112
+ "minLength": 1
1113
+ },
1114
+ "name": {
1115
+ "type": "string",
1116
+ "minLength": 1
1117
+ },
1118
+ "documentation": {
1119
+ "type": "string",
1120
+ "minLength": 1
1121
+ },
1122
+ "pathType": {
1123
+ "$ref": "#/definitions/PathType"
1124
+ },
1125
+ "properties": {
1126
+ "type": "object",
1127
+ "description": "Cross-layer properties",
1128
+ "properties": {
1129
+ "path": {
1130
+ "type": "object",
1131
+ "properties": {
1132
+ "bandwidth": {
1133
+ "type": "string",
1134
+ "description": "optional"
1135
+ },
1136
+ "latency": {
1137
+ "type": "string",
1138
+ "description": "optional"
1139
+ }
1140
+ }
1141
+ }
1142
+ }
1143
+ }
1144
+ }
1145
+ },
1146
+ "CommunicationNetwork": {
1147
+ "type": "object",
1148
+ "description": "Set of structures that connects nodes",
1149
+ "required": ["id", "name", "networkType"],
1150
+ "properties": {
1151
+ "id": {
1152
+ "type": "string",
1153
+ "format": "uuid",
1154
+ "minLength": 1
1155
+ },
1156
+ "name": {
1157
+ "type": "string",
1158
+ "minLength": 1
1159
+ },
1160
+ "documentation": {
1161
+ "type": "string",
1162
+ "minLength": 1
1163
+ },
1164
+ "networkType": {
1165
+ "$ref": "#/definitions/NetworkType"
1166
+ },
1167
+ "properties": {
1168
+ "type": "object",
1169
+ "description": "Cross-layer properties",
1170
+ "properties": {
1171
+ "network": {
1172
+ "type": "object",
1173
+ "properties": {
1174
+ "cidr": {
1175
+ "type": "string",
1176
+ "description": "optional"
1177
+ },
1178
+ "vlan": {
1179
+ "type": "string",
1180
+ "description": ""
1181
+ }
1182
+ }
1183
+ },
1184
+ "motivation": {
1185
+ "type": "object",
1186
+ "properties": {
1187
+ "governed-by-principles": {
1188
+ "type": "string",
1189
+ "description": "optional, network architecture principles"
1190
+ },
1191
+ "constrained-by": {
1192
+ "type": "string",
1193
+ "description": "optional, regulatory, data residency constraints"
1194
+ },
1195
+ "fulfills-requirements": {
1196
+ "type": "string",
1197
+ "description": "optional, security, compliance requirements"
1198
+ }
1199
+ }
1200
+ }
1201
+ }
1202
+ }
1203
+ }
1204
+ },
1205
+ "TechnologyFunction": {
1206
+ "type": "object",
1207
+ "description": "Collection of technology behavior",
1208
+ "required": ["id", "name"],
1209
+ "properties": {
1210
+ "id": {
1211
+ "type": "string",
1212
+ "format": "uuid",
1213
+ "minLength": 1
1214
+ },
1215
+ "name": {
1216
+ "type": "string",
1217
+ "minLength": 1
1218
+ },
1219
+ "documentation": {
1220
+ "type": "string",
1221
+ "minLength": 1
1222
+ }
1223
+ }
1224
+ },
1225
+ "TechnologyProcess": {
1226
+ "type": "object",
1227
+ "description": "Sequence of technology behaviors",
1228
+ "required": ["id", "name"],
1229
+ "properties": {
1230
+ "id": {
1231
+ "type": "string",
1232
+ "format": "uuid",
1233
+ "minLength": 1
1234
+ },
1235
+ "name": {
1236
+ "type": "string",
1237
+ "minLength": 1
1238
+ },
1239
+ "documentation": {
1240
+ "type": "string",
1241
+ "minLength": 1
1242
+ },
1243
+ "properties": {
1244
+ "type": "object",
1245
+ "description": "Cross-layer properties",
1246
+ "properties": {
1247
+ "process": {
1248
+ "type": "object",
1249
+ "properties": {
1250
+ "automation": {
1251
+ "type": "string",
1252
+ "description": "optional"
1253
+ }
1254
+ }
1255
+ }
1256
+ }
1257
+ }
1258
+ }
1259
+ },
1260
+ "TechnologyInteraction": {
1261
+ "type": "object",
1262
+ "description": "Unit of collective technology behavior",
1263
+ "required": ["id", "name"],
1264
+ "properties": {
1265
+ "id": {
1266
+ "type": "string",
1267
+ "format": "uuid",
1268
+ "minLength": 1
1269
+ },
1270
+ "name": {
1271
+ "type": "string",
1272
+ "minLength": 1
1273
+ },
1274
+ "documentation": {
1275
+ "type": "string",
1276
+ "minLength": 1
1277
+ }
1278
+ }
1279
+ },
1280
+ "TechnologyEvent": {
1281
+ "type": "object",
1282
+ "description": "Technology state change",
1283
+ "required": ["id", "name", "eventType"],
1284
+ "properties": {
1285
+ "id": {
1286
+ "type": "string",
1287
+ "format": "uuid",
1288
+ "minLength": 1
1289
+ },
1290
+ "name": {
1291
+ "type": "string",
1292
+ "minLength": 1
1293
+ },
1294
+ "documentation": {
1295
+ "type": "string",
1296
+ "minLength": 1
1297
+ },
1298
+ "eventType": {
1299
+ "$ref": "#/definitions/TechEventType"
1300
+ }
1301
+ }
1302
+ },
1303
+ "TechnologyService": {
1304
+ "type": "object",
1305
+ "description": "Externally visible unit of technology functionality",
1306
+ "required": ["id", "name", "serviceType"],
1307
+ "properties": {
1308
+ "id": {
1309
+ "type": "string",
1310
+ "format": "uuid",
1311
+ "minLength": 1
1312
+ },
1313
+ "name": {
1314
+ "type": "string",
1315
+ "minLength": 1
1316
+ },
1317
+ "documentation": {
1318
+ "type": "string",
1319
+ "minLength": 1
1320
+ },
1321
+ "serviceType": {
1322
+ "$ref": "#/definitions/TechServiceType"
1323
+ },
1324
+ "properties": {
1325
+ "type": "object",
1326
+ "description": "Cross-layer properties",
1327
+ "properties": {
1328
+ "service": {
1329
+ "type": "object",
1330
+ "properties": {
1331
+ "sla": {
1332
+ "type": "string",
1333
+ "description": "optional"
1334
+ },
1335
+ "monitoring": {
1336
+ "type": "string",
1337
+ "description": "optional"
1338
+ }
1339
+ }
1340
+ },
1341
+ "motivation": {
1342
+ "type": "object",
1343
+ "properties": {
1344
+ "supports-goals": {
1345
+ "type": "string",
1346
+ "description": "optional, comma-separated Goal IDs this service supports"
1347
+ },
1348
+ "governed-by-principles": {
1349
+ "type": "string",
1350
+ "description": "optional, comma-separated Principle IDs"
1351
+ },
1352
+ "constrained-by": {
1353
+ "type": "string",
1354
+ "description": "optional, comma-separated Constraint IDs"
1355
+ }
1356
+ }
1357
+ },
1358
+ "apm": {
1359
+ "type": "object",
1360
+ "properties": {
1361
+ "sla-target-availability": {
1362
+ "type": "string",
1363
+ "description": "optional, target uptime percentage"
1364
+ },
1365
+ "sla-target-latency": {
1366
+ "type": "string",
1367
+ "description": "optional, target response time"
1368
+ },
1369
+ "health-monitored": {
1370
+ "type": "string",
1371
+ "description": "optional, whether health is actively monitored"
1372
+ },
1373
+ "health-check-endpoint": {
1374
+ "type": "string",
1375
+ "description": "optional, health check endpoint"
1376
+ }
1377
+ }
1378
+ }
1379
+ }
1380
+ }
1381
+ }
1382
+ },
1383
+ "Artifact": {
1384
+ "type": "object",
1385
+ "description": "Physical piece of data used or produced",
1386
+ "required": ["id", "name", "artifactType"],
1387
+ "properties": {
1388
+ "id": {
1389
+ "type": "string",
1390
+ "format": "uuid",
1391
+ "minLength": 1
1392
+ },
1393
+ "name": {
1394
+ "type": "string",
1395
+ "minLength": 1
1396
+ },
1397
+ "documentation": {
1398
+ "type": "string",
1399
+ "minLength": 1
1400
+ },
1401
+ "artifactType": {
1402
+ "$ref": "#/definitions/ArtifactType"
1403
+ },
1404
+ "properties": {
1405
+ "type": "object",
1406
+ "description": "Cross-layer properties",
1407
+ "properties": {
1408
+ "artifact": {
1409
+ "type": "object",
1410
+ "properties": {
1411
+ "format": {
1412
+ "type": "string",
1413
+ "description": "optional"
1414
+ },
1415
+ "size": {
1416
+ "type": "string",
1417
+ "description": "optional"
1418
+ }
1419
+ }
1420
+ },
1421
+ "spec": {
1422
+ "type": "object",
1423
+ "properties": {
1424
+ "database": {
1425
+ "type": "string",
1426
+ "description": "optional"
1427
+ }
1428
+ }
1429
+ },
1430
+ "security": {
1431
+ "type": "object",
1432
+ "properties": {
1433
+ "encryption-required": {
1434
+ "type": "string",
1435
+ "description": "optional"
1436
+ },
1437
+ "encryption-type": {
1438
+ "type": "string",
1439
+ "description": "optional"
1440
+ },
1441
+ "classification": {
1442
+ "type": "string",
1443
+ "description": "optional"
1444
+ },
1445
+ "pii": {
1446
+ "type": "string",
1447
+ "description": "optional, contains personally identifiable information"
1448
+ }
1449
+ }
1450
+ },
1451
+ "motivation": {
1452
+ "type": "object",
1453
+ "properties": {
1454
+ "constrained-by": {
1455
+ "type": "string",
1456
+ "description": "optional, retention, compliance constraints"
1457
+ }
1458
+ }
1459
+ }
1460
+ }
1461
+ }
1462
+ }
1463
+ }
1464
+ }
1465
+ }