@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,2177 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/schemas/03-security-layer.schema.json",
4
+ "title": "Security Layer Layer Schema",
5
+ "description": "Defines authentication, authorization, access control, data classification, and security policies including STS-ml concepts for goal-oriented security modeling.",
6
+ "layerMetadata": {
7
+ "layerId": "03-security-layer",
8
+ "layerName": "Security 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": "assignment",
85
+ "sourceTypes": ["BusinessActor"],
86
+ "targetTypes": ["BusinessRole"],
87
+ "examples": [
88
+ {
89
+ "source": "BusinessActor",
90
+ "target": "BusinessRole",
91
+ "description": "Business actor assigned to business role"
92
+ }
93
+ ]
94
+ },
95
+ {
96
+ "relationshipTypeId": "association",
97
+ "sourceTypes": ["Requirement", "Stakeholder"],
98
+ "targetTypes": ["Constraint", "Driver", "Goal"],
99
+ "examples": [
100
+ {
101
+ "source": "Stakeholder",
102
+ "target": "Driver",
103
+ "description": "Stakeholder has concern represented by driver",
104
+ "layer": "01-motivation"
105
+ },
106
+ {
107
+ "source": "Stakeholder",
108
+ "target": "Goal",
109
+ "description": "Stakeholder has interest in goal",
110
+ "layer": "01-motivation"
111
+ },
112
+ {
113
+ "source": "Requirement",
114
+ "target": "Constraint",
115
+ "description": "Requirement is limited by constraint",
116
+ "layer": "01-motivation"
117
+ }
118
+ ]
119
+ },
120
+ {
121
+ "relationshipTypeId": "uses",
122
+ "sourceTypes": ["ApplicationComponent"],
123
+ "targetTypes": ["TechnologyService"],
124
+ "examples": [
125
+ {
126
+ "source": "ApplicationComponent",
127
+ "target": "TechnologyService",
128
+ "description": "Application component uses technology service"
129
+ }
130
+ ]
131
+ },
132
+ {
133
+ "relationshipTypeId": "reference",
134
+ "sourceTypes": ["CoverageRequirement", "DataObject", "TestCaseSketch"],
135
+ "targetTypes": ["CoverageRequirement", "Schema", "TestCoverageTarget"],
136
+ "examples": [
137
+ {
138
+ "source": "DataObject",
139
+ "target": "Schema",
140
+ "description": "Data object references JSON schema"
141
+ },
142
+ {
143
+ "source": "TestCaseSketch",
144
+ "target": "CoverageRequirement",
145
+ "description": "Test case sketch references coverage requirement it satisfies",
146
+ "layer": "12-testing"
147
+ },
148
+ {
149
+ "source": "CoverageRequirement",
150
+ "target": "TestCoverageTarget",
151
+ "description": "Coverage requirement references target it covers",
152
+ "layer": "12-testing"
153
+ }
154
+ ]
155
+ },
156
+ {
157
+ "relationshipTypeId": "fulfills-requirements",
158
+ "sourceTypes": ["ApplicationService", "Operation"],
159
+ "targetTypes": ["Requirement"],
160
+ "examples": [
161
+ {
162
+ "source": "ApplicationService",
163
+ "target": "Requirement",
164
+ "description": "OAuth service fulfills authentication requirement"
165
+ },
166
+ {
167
+ "source": "Operation",
168
+ "sourceLayer": "06-api",
169
+ "target": "Requirement",
170
+ "targetLayer": "01-motivation",
171
+ "value": "req-product-creation-capability",
172
+ "description": "POST /products operation fulfills product creation requirement"
173
+ }
174
+ ]
175
+ },
176
+ {
177
+ "relationshipTypeId": "constrainedby",
178
+ "sourceTypes": ["APIOperation"],
179
+ "targetTypes": ["Constraint"],
180
+ "examples": [
181
+ {
182
+ "source": "APIOperation",
183
+ "target": "Constraint",
184
+ "description": "API operation constrained by rate limit"
185
+ }
186
+ ]
187
+ },
188
+ {
189
+ "relationshipTypeId": "enforces-requirement",
190
+ "sourceTypes": ["NavigationGuard"],
191
+ "targetTypes": ["Requirement"],
192
+ "examples": [
193
+ {
194
+ "source": "NavigationGuard",
195
+ "target": "Requirement",
196
+ "description": "Auth guard enforces authentication requirement"
197
+ }
198
+ ]
199
+ },
200
+ {
201
+ "relationshipTypeId": "protects",
202
+ "sourceTypes": ["SecurityControl"],
203
+ "targetTypes": ["ApplicationService"],
204
+ "examples": [
205
+ {
206
+ "source": "SecurityControl",
207
+ "target": "ApplicationService",
208
+ "description": "Encryption control protects sensitive data service"
209
+ }
210
+ ]
211
+ },
212
+ {
213
+ "relationshipTypeId": "authenticates",
214
+ "sourceTypes": ["AuthenticationService"],
215
+ "targetTypes": ["User"],
216
+ "examples": [
217
+ {
218
+ "source": "AuthenticationService",
219
+ "target": "User",
220
+ "description": "OAuth service authenticates user"
221
+ }
222
+ ]
223
+ },
224
+ {
225
+ "relationshipTypeId": "authorization",
226
+ "sourceTypes": ["Role"],
227
+ "targetTypes": ["Operation"],
228
+ "examples": [
229
+ {
230
+ "source": "Role",
231
+ "target": "Operation",
232
+ "description": "Admin role authorizes delete operation"
233
+ }
234
+ ]
235
+ },
236
+ {
237
+ "relationshipTypeId": "derivedfrom",
238
+ "sourceTypes": ["TotalPrice"],
239
+ "targetTypes": ["Quantity, UnitPrice"],
240
+ "examples": [
241
+ {
242
+ "source": "TotalPrice",
243
+ "target": "Quantity, UnitPrice",
244
+ "description": "Total price derives from quantity times unit price"
245
+ }
246
+ ]
247
+ }
248
+ ]
249
+ },
250
+ "crossLayerRelationships": {
251
+ "$comment": "Relationships to/from entities in other layers",
252
+ "outgoing": [
253
+ {
254
+ "id": "motivation-governed-by-principles",
255
+ "predicate": "governed-by-principles",
256
+ "inversePredicate": "governs",
257
+ "targetLayer": "01-motivation",
258
+ "targetTypes": ["GovernedByPrinciple"],
259
+ "sourceTypes": ["BusinessService"],
260
+ "fieldPath": "motivation.governed-by-principles",
261
+ "cardinality": "array",
262
+ "format": "reference",
263
+ "strength": "high",
264
+ "required": false,
265
+ "description": "BusinessService governed by Principles",
266
+ "examples": [
267
+ {
268
+ "elementType": "BusinessService",
269
+ "elementId": "order-service",
270
+ "elementName": "Order Processing Service",
271
+ "fieldPath": "motivation.governed-by-principles",
272
+ "value": "principle-customer-first,principle-automation",
273
+ "layer": "02-business"
274
+ },
275
+ {
276
+ "elementType": "ApplicationService",
277
+ "elementId": "product-service",
278
+ "elementName": "product-service",
279
+ "fieldPath": "motivation.governed-by-principles",
280
+ "value": "principle-api-first,principle-cloud-native",
281
+ "layer": "04-application"
282
+ }
283
+ ]
284
+ },
285
+ {
286
+ "id": "motivation-supports-goals",
287
+ "predicate": "supports-goals",
288
+ "inversePredicate": "supported-by",
289
+ "targetLayer": "01-motivation",
290
+ "targetTypes": ["SupportsGoal"],
291
+ "sourceTypes": ["BusinessService"],
292
+ "fieldPath": "motivation.supports-goals",
293
+ "cardinality": "array",
294
+ "format": "reference",
295
+ "strength": "high",
296
+ "required": false,
297
+ "description": "BusinessService supports Goals",
298
+ "examples": [
299
+ {
300
+ "elementType": "BusinessService",
301
+ "elementId": "order-service",
302
+ "elementName": "Order Processing Service",
303
+ "fieldPath": "motivation.supports-goals",
304
+ "value": "goal-customer-satisfaction,goal-revenue-growth",
305
+ "layer": "02-business"
306
+ },
307
+ {
308
+ "elementType": "ApplicationService",
309
+ "elementId": "product-service",
310
+ "elementName": "product-service",
311
+ "fieldPath": "motivation.supports-goals",
312
+ "value": "goal-product-catalog-accuracy,goal-customer-satisfaction",
313
+ "layer": "04-application"
314
+ }
315
+ ]
316
+ },
317
+ {
318
+ "id": "security-classification",
319
+ "predicate": "classification",
320
+ "inversePredicate": "referenced-by",
321
+ "targetLayer": "03-security",
322
+ "targetTypes": ["Classification"],
323
+ "sourceTypes": ["Artifact"],
324
+ "fieldPath": "security.classification",
325
+ "cardinality": "single",
326
+ "format": "string",
327
+ "strength": "low",
328
+ "required": false,
329
+ "description": "Links to Classification in target layer",
330
+ "examples": [
331
+ {
332
+ "elementType": "Artifact",
333
+ "elementId": "product-db",
334
+ "elementName": "product-db",
335
+ "fieldPath": "security.classification",
336
+ "value": "internal",
337
+ "layer": "05-technology"
338
+ },
339
+ {
340
+ "elementType": "Artifact",
341
+ "elementId": "customer-db",
342
+ "elementName": "customer-db",
343
+ "fieldPath": "security.classification",
344
+ "value": "restricted",
345
+ "layer": "05-technology"
346
+ }
347
+ ]
348
+ }
349
+ ],
350
+ "incoming": [
351
+ {
352
+ "id": "security-classification",
353
+ "predicate": "referenced-by",
354
+ "inversePredicate": "classification",
355
+ "sourceLayer": "02-business",
356
+ "sourceTypes": ["Artifact"],
357
+ "targetTypes": ["Classification"],
358
+ "fieldPath": "security.classification",
359
+ "cardinality": "single",
360
+ "description": "Inverse of: Links to Classification in target layer"
361
+ },
362
+ {
363
+ "id": "security-classification",
364
+ "predicate": "referenced-by",
365
+ "inversePredicate": "classification",
366
+ "sourceLayer": "03-security",
367
+ "sourceTypes": ["Artifact"],
368
+ "targetTypes": ["Classification"],
369
+ "fieldPath": "security.classification",
370
+ "cardinality": "single",
371
+ "description": "Inverse of: Links to Classification in target layer"
372
+ },
373
+ {
374
+ "id": "security-classification",
375
+ "predicate": "referenced-by",
376
+ "inversePredicate": "classification",
377
+ "sourceLayer": "04-application",
378
+ "sourceTypes": ["Artifact"],
379
+ "targetTypes": ["Classification"],
380
+ "fieldPath": "security.classification",
381
+ "cardinality": "single",
382
+ "description": "Inverse of: Links to Classification in target layer"
383
+ },
384
+ {
385
+ "id": "security-classification",
386
+ "predicate": "referenced-by",
387
+ "inversePredicate": "classification",
388
+ "sourceLayer": "05-technology",
389
+ "sourceTypes": ["Artifact"],
390
+ "targetTypes": ["Classification"],
391
+ "fieldPath": "security.classification",
392
+ "cardinality": "single",
393
+ "description": "Inverse of: Links to Classification in target layer"
394
+ },
395
+ {
396
+ "id": "security-classification",
397
+ "predicate": "referenced-by",
398
+ "inversePredicate": "classification",
399
+ "sourceLayer": "06-api",
400
+ "sourceTypes": ["Artifact"],
401
+ "targetTypes": ["Classification"],
402
+ "fieldPath": "security.classification",
403
+ "cardinality": "single",
404
+ "description": "Inverse of: Links to Classification in target layer"
405
+ },
406
+ {
407
+ "id": "security-classification",
408
+ "predicate": "referenced-by",
409
+ "inversePredicate": "classification",
410
+ "sourceLayer": "07-data-model",
411
+ "sourceTypes": ["Artifact"],
412
+ "targetTypes": ["Classification"],
413
+ "fieldPath": "security.classification",
414
+ "cardinality": "single",
415
+ "description": "Inverse of: Links to Classification in target layer"
416
+ },
417
+ {
418
+ "id": "security-classification",
419
+ "predicate": "referenced-by",
420
+ "inversePredicate": "classification",
421
+ "sourceLayer": "08-datastore",
422
+ "sourceTypes": ["Artifact"],
423
+ "targetTypes": ["Classification"],
424
+ "fieldPath": "security.classification",
425
+ "cardinality": "single",
426
+ "description": "Inverse of: Links to Classification in target layer"
427
+ },
428
+ {
429
+ "id": "security-classification",
430
+ "predicate": "referenced-by",
431
+ "inversePredicate": "classification",
432
+ "sourceLayer": "09-ux",
433
+ "sourceTypes": ["Artifact"],
434
+ "targetTypes": ["Classification"],
435
+ "fieldPath": "security.classification",
436
+ "cardinality": "single",
437
+ "description": "Inverse of: Links to Classification in target layer"
438
+ },
439
+ {
440
+ "id": "security-classification",
441
+ "predicate": "referenced-by",
442
+ "inversePredicate": "classification",
443
+ "sourceLayer": "10-navigation",
444
+ "sourceTypes": ["Artifact"],
445
+ "targetTypes": ["Classification"],
446
+ "fieldPath": "security.classification",
447
+ "cardinality": "single",
448
+ "description": "Inverse of: Links to Classification in target layer"
449
+ },
450
+ {
451
+ "id": "security-classification",
452
+ "predicate": "referenced-by",
453
+ "inversePredicate": "classification",
454
+ "sourceLayer": "11-apm-observability",
455
+ "sourceTypes": ["Artifact"],
456
+ "targetTypes": ["Classification"],
457
+ "fieldPath": "security.classification",
458
+ "cardinality": "single",
459
+ "description": "Inverse of: Links to Classification in target layer"
460
+ },
461
+ {
462
+ "id": "security-classification",
463
+ "predicate": "referenced-by",
464
+ "inversePredicate": "classification",
465
+ "sourceLayer": "12-testing",
466
+ "sourceTypes": ["Artifact"],
467
+ "targetTypes": ["Classification"],
468
+ "fieldPath": "security.classification",
469
+ "cardinality": "single",
470
+ "description": "Inverse of: Links to Classification in target layer"
471
+ },
472
+ {
473
+ "id": "security-data-pii",
474
+ "predicate": "referenced-by",
475
+ "inversePredicate": "pii",
476
+ "sourceLayer": "04-application",
477
+ "sourceTypes": ["Data Properties", "DataObject"],
478
+ "targetTypes": ["Pii"],
479
+ "fieldPath": "data.pii",
480
+ "cardinality": "single",
481
+ "description": "Inverse of: Links to Pii in target layer"
482
+ },
483
+ {
484
+ "id": "security-encrypted",
485
+ "predicate": "referenced-by",
486
+ "inversePredicate": "encrypted",
487
+ "sourceLayer": "06-api",
488
+ "sourceTypes": ["Schema"],
489
+ "targetTypes": ["Encrypted"],
490
+ "fieldPath": "x-encrypted",
491
+ "cardinality": "single",
492
+ "description": "Inverse of: boolean"
493
+ },
494
+ {
495
+ "id": "security-encryption-required",
496
+ "predicate": "referenced-by",
497
+ "inversePredicate": "encryption-required",
498
+ "sourceLayer": "05-technology",
499
+ "sourceTypes": ["Artifact"],
500
+ "targetTypes": ["EncryptionRequired"],
501
+ "fieldPath": "security.encryption-required",
502
+ "cardinality": "single",
503
+ "description": "Inverse of: Links to EncryptionRequired in target layer"
504
+ },
505
+ {
506
+ "id": "security-encryption-type",
507
+ "predicate": "referenced-by",
508
+ "inversePredicate": "encryption-type",
509
+ "sourceLayer": "05-technology",
510
+ "sourceTypes": ["Artifact"],
511
+ "targetTypes": ["EncryptionType"],
512
+ "fieldPath": "security.encryption-type",
513
+ "cardinality": "single",
514
+ "description": "Inverse of: Links to EncryptionType in target layer"
515
+ },
516
+ {
517
+ "id": "security-pii",
518
+ "predicate": "referenced-by",
519
+ "inversePredicate": "pii",
520
+ "sourceLayer": "05-technology",
521
+ "sourceTypes": ["Artifact"],
522
+ "targetTypes": ["Pii"],
523
+ "fieldPath": "security.pii",
524
+ "cardinality": "single",
525
+ "description": "Inverse of: contains personally identifiable information"
526
+ },
527
+ {
528
+ "id": "security-pii",
529
+ "predicate": "referenced-by",
530
+ "inversePredicate": "pii",
531
+ "sourceLayer": "06-api",
532
+ "sourceTypes": ["Schema"],
533
+ "targetTypes": ["Pii"],
534
+ "fieldPath": "security.pii",
535
+ "cardinality": "single",
536
+ "description": "Inverse of: contains personally identifiable information"
537
+ },
538
+ {
539
+ "id": "security-process-security-controls",
540
+ "predicate": "referenced-by",
541
+ "inversePredicate": "security-controls",
542
+ "sourceLayer": "02-business",
543
+ "sourceTypes": ["BusinessProcess"],
544
+ "targetTypes": ["SecurityControl"],
545
+ "fieldPath": "process.security-controls",
546
+ "cardinality": "array",
547
+ "description": "Inverse of: security control references"
548
+ },
549
+ {
550
+ "id": "security-process-separation-of-duty",
551
+ "predicate": "referenced-by",
552
+ "inversePredicate": "separation-of-duty",
553
+ "sourceLayer": "02-business",
554
+ "sourceTypes": ["BusinessProcess"],
555
+ "targetTypes": ["SeparationOfDuty"],
556
+ "fieldPath": "process.separation-of-duty",
557
+ "cardinality": "single",
558
+ "description": "Inverse of: Links to SeparationOfDuty in target layer"
559
+ },
560
+ {
561
+ "id": "security-required-permissions",
562
+ "predicate": "referenced-by",
563
+ "inversePredicate": "required-permissions",
564
+ "sourceLayer": "06-api",
565
+ "sourceTypes": ["Operation", "SecurityScheme"],
566
+ "targetTypes": ["Permission"],
567
+ "fieldPath": "x-required-permissions",
568
+ "cardinality": "array",
569
+ "description": "Inverse of: string[] (Permission.name[], optional)"
570
+ },
571
+ {
572
+ "id": "security-resource",
573
+ "predicate": "referenced-by",
574
+ "inversePredicate": "security-resource",
575
+ "sourceLayer": "06-api",
576
+ "sourceTypes": ["Operation", "SecurityScheme"],
577
+ "targetTypes": ["SecureResource"],
578
+ "fieldPath": "x-security-resource",
579
+ "cardinality": "single",
580
+ "description": "Inverse of: string (SecureResource.resource, optional)"
581
+ }
582
+ ]
583
+ },
584
+ "type": "object",
585
+ "properties": {
586
+ "security-models": {
587
+ "type": "array",
588
+ "description": "Collection of SecurityModel entities",
589
+ "items": {
590
+ "$ref": "#/definitions/SecurityModel"
591
+ }
592
+ },
593
+ "authentication-configs": {
594
+ "type": "array",
595
+ "description": "Collection of AuthenticationConfig entities",
596
+ "items": {
597
+ "$ref": "#/definitions/AuthenticationConfig"
598
+ }
599
+ },
600
+ "password-policies": {
601
+ "type": "array",
602
+ "description": "Collection of PasswordPolicy entities",
603
+ "items": {
604
+ "$ref": "#/definitions/PasswordPolicy"
605
+ }
606
+ },
607
+ "roles": {
608
+ "type": "array",
609
+ "description": "Collection of Role entities",
610
+ "items": {
611
+ "$ref": "#/definitions/Role"
612
+ }
613
+ },
614
+ "permissions": {
615
+ "type": "array",
616
+ "description": "Collection of Permission entities",
617
+ "items": {
618
+ "$ref": "#/definitions/Permission"
619
+ }
620
+ },
621
+ "secure-resources": {
622
+ "type": "array",
623
+ "description": "Collection of SecureResource entities",
624
+ "items": {
625
+ "$ref": "#/definitions/SecureResource"
626
+ }
627
+ },
628
+ "resource-operations": {
629
+ "type": "array",
630
+ "description": "Collection of ResourceOperation entities",
631
+ "items": {
632
+ "$ref": "#/definitions/ResourceOperation"
633
+ }
634
+ },
635
+ "access-conditions": {
636
+ "type": "array",
637
+ "description": "Collection of AccessCondition entities",
638
+ "items": {
639
+ "$ref": "#/definitions/AccessCondition"
640
+ }
641
+ },
642
+ "field-access-controls": {
643
+ "type": "array",
644
+ "description": "Collection of FieldAccessControl entities",
645
+ "items": {
646
+ "$ref": "#/definitions/FieldAccessControl"
647
+ }
648
+ },
649
+ "security-policies": {
650
+ "type": "array",
651
+ "description": "Collection of SecurityPolicy entities",
652
+ "items": {
653
+ "$ref": "#/definitions/SecurityPolicy"
654
+ }
655
+ },
656
+ "policy-rules": {
657
+ "type": "array",
658
+ "description": "Collection of PolicyRule entities",
659
+ "items": {
660
+ "$ref": "#/definitions/PolicyRule"
661
+ }
662
+ },
663
+ "policy-actions": {
664
+ "type": "array",
665
+ "description": "Collection of PolicyAction entities",
666
+ "items": {
667
+ "$ref": "#/definitions/PolicyAction"
668
+ }
669
+ },
670
+ "data-classifications": {
671
+ "type": "array",
672
+ "description": "Collection of DataClassification entities",
673
+ "items": {
674
+ "$ref": "#/definitions/DataClassification"
675
+ }
676
+ },
677
+ "classifications": {
678
+ "type": "array",
679
+ "description": "Collection of Classification entities",
680
+ "items": {
681
+ "$ref": "#/definitions/Classification"
682
+ }
683
+ },
684
+ "actors": {
685
+ "type": "array",
686
+ "description": "Collection of Actor entities",
687
+ "items": {
688
+ "$ref": "#/definitions/Actor"
689
+ }
690
+ },
691
+ "actor-objectives": {
692
+ "type": "array",
693
+ "description": "Collection of ActorObjective entities",
694
+ "items": {
695
+ "$ref": "#/definitions/ActorObjective"
696
+ }
697
+ },
698
+ "actor-dependencies": {
699
+ "type": "array",
700
+ "description": "Collection of ActorDependency entities",
701
+ "items": {
702
+ "$ref": "#/definitions/ActorDependency"
703
+ }
704
+ },
705
+ "information-entities": {
706
+ "type": "array",
707
+ "description": "Collection of InformationEntity entities",
708
+ "items": {
709
+ "$ref": "#/definitions/InformationEntity"
710
+ }
711
+ },
712
+ "information-rights": {
713
+ "type": "array",
714
+ "description": "Collection of InformationRight entities",
715
+ "items": {
716
+ "$ref": "#/definitions/InformationRight"
717
+ }
718
+ },
719
+ "delegations": {
720
+ "type": "array",
721
+ "description": "Collection of Delegation entities",
722
+ "items": {
723
+ "$ref": "#/definitions/Delegation"
724
+ }
725
+ },
726
+ "security-constraintses": {
727
+ "type": "array",
728
+ "description": "Collection of SecurityConstraints entities",
729
+ "items": {
730
+ "$ref": "#/definitions/SecurityConstraints"
731
+ }
732
+ },
733
+ "separation-of-duties": {
734
+ "type": "array",
735
+ "description": "Collection of SeparationOfDuty entities",
736
+ "items": {
737
+ "$ref": "#/definitions/SeparationOfDuty"
738
+ }
739
+ },
740
+ "binding-of-duties": {
741
+ "type": "array",
742
+ "description": "Collection of BindingOfDuty entities",
743
+ "items": {
744
+ "$ref": "#/definitions/BindingOfDuty"
745
+ }
746
+ },
747
+ "need-to-knows": {
748
+ "type": "array",
749
+ "description": "Collection of NeedToKnow entities",
750
+ "items": {
751
+ "$ref": "#/definitions/NeedToKnow"
752
+ }
753
+ },
754
+ "social-dependencies": {
755
+ "type": "array",
756
+ "description": "Collection of SocialDependency entities",
757
+ "items": {
758
+ "$ref": "#/definitions/SocialDependency"
759
+ }
760
+ },
761
+ "accountability-requirements": {
762
+ "type": "array",
763
+ "description": "Collection of AccountabilityRequirement entities",
764
+ "items": {
765
+ "$ref": "#/definitions/AccountabilityRequirement"
766
+ }
767
+ },
768
+ "evidences": {
769
+ "type": "array",
770
+ "description": "Collection of Evidence entities",
771
+ "items": {
772
+ "$ref": "#/definitions/Evidence"
773
+ }
774
+ },
775
+ "threats": {
776
+ "type": "array",
777
+ "description": "Collection of Threat entities",
778
+ "items": {
779
+ "$ref": "#/definitions/Threat"
780
+ }
781
+ },
782
+ "countermeasures": {
783
+ "type": "array",
784
+ "description": "Collection of Countermeasure entities",
785
+ "items": {
786
+ "$ref": "#/definitions/Countermeasure"
787
+ }
788
+ },
789
+ "rate-limits": {
790
+ "type": "array",
791
+ "description": "Collection of RateLimit entities",
792
+ "items": {
793
+ "$ref": "#/definitions/RateLimit"
794
+ }
795
+ },
796
+ "audit-configs": {
797
+ "type": "array",
798
+ "description": "Collection of AuditConfig entities",
799
+ "items": {
800
+ "$ref": "#/definitions/AuditConfig"
801
+ }
802
+ },
803
+ "conditions": {
804
+ "type": "array",
805
+ "description": "Collection of Condition entities",
806
+ "items": {
807
+ "$ref": "#/definitions/Condition"
808
+ }
809
+ },
810
+ "retention-policies": {
811
+ "type": "array",
812
+ "description": "Collection of RetentionPolicy entities",
813
+ "items": {
814
+ "$ref": "#/definitions/RetentionPolicy"
815
+ }
816
+ },
817
+ "validation-rules": {
818
+ "type": "array",
819
+ "description": "Collection of ValidationRule entities",
820
+ "items": {
821
+ "$ref": "#/definitions/ValidationRule"
822
+ }
823
+ }
824
+ },
825
+ "definitions": {
826
+ "AuthProvider": {
827
+ "type": "string",
828
+ "enum": ["oauth2", "openid-connect", "saml", "jwt", "session", "api-key", "certificate"]
829
+ },
830
+ "PermissionScope": {
831
+ "type": "string",
832
+ "enum": ["global", "resource", "attribute", "owner"]
833
+ },
834
+ "ResourceType": {
835
+ "type": "string",
836
+ "enum": ["api", "screen", "data", "file", "service"]
837
+ },
838
+ "ConditionOperator": {
839
+ "type": "string",
840
+ "enum": [
841
+ "equals",
842
+ "notEquals",
843
+ "in",
844
+ "notIn",
845
+ "greaterThan",
846
+ "lessThan",
847
+ "greaterThanOrEqual",
848
+ "lessThanOrEqual",
849
+ "contains",
850
+ "notContains",
851
+ "startsWith",
852
+ "endsWith",
853
+ "matches",
854
+ "exists",
855
+ "notExists"
856
+ ]
857
+ },
858
+ "DataSource": {
859
+ "type": "string",
860
+ "enum": ["constant", "user-attribute", "resource-field", "context", "computed"]
861
+ },
862
+ "MaskingStrategy": {
863
+ "type": "string",
864
+ "enum": ["none", "partial", "full", "hash", "redact"]
865
+ },
866
+ "PolicyTarget": {
867
+ "type": "string",
868
+ "enum": ["all", "api", "data", "screen"]
869
+ },
870
+ "PolicyEffect": {
871
+ "type": "string",
872
+ "enum": ["allow", "deny", "audit", "warn"]
873
+ },
874
+ "ActionType": {
875
+ "type": "string",
876
+ "enum": [
877
+ "allow",
878
+ "deny",
879
+ "audit-access",
880
+ "require-mfa",
881
+ "require-approval",
882
+ "apply-mask",
883
+ "apply-encryption",
884
+ "apply-retention",
885
+ "notify",
886
+ "rate-limit",
887
+ "check-ip-whitelist",
888
+ "check-time-window"
889
+ ]
890
+ },
891
+ "ClassificationLevel": {
892
+ "type": "string",
893
+ "enum": ["public", "internal", "confidential", "restricted"]
894
+ },
895
+ "EncryptionRequirement": {
896
+ "type": "string",
897
+ "enum": ["none", "in-transit", "at-rest", "both", "end-to-end"]
898
+ },
899
+ "AccessControlLevel": {
900
+ "type": "string",
901
+ "enum": ["open", "authenticated", "role-based", "attribute-based"]
902
+ },
903
+ "AuditLevel": {
904
+ "type": "string",
905
+ "enum": ["none", "minimal", "standard", "comprehensive"]
906
+ },
907
+ "ActorType": {
908
+ "type": "string",
909
+ "enum": ["role", "agent", "organization", "system"]
910
+ },
911
+ "TrustLevel": {
912
+ "type": "string",
913
+ "enum": ["none", "low", "medium", "high", "full"]
914
+ },
915
+ "Criticality": {
916
+ "type": "string",
917
+ "enum": ["low", "medium", "high", "critical"]
918
+ },
919
+ "DelegationType": {
920
+ "type": "string",
921
+ "enum": ["execution", "permission", "approval"]
922
+ },
923
+ "VerificationLevel": {
924
+ "type": "string",
925
+ "enum": ["none", "manual", "automated", "continuous"]
926
+ },
927
+ "RequirementLevel": {
928
+ "type": "string",
929
+ "enum": ["none", "optional", "required", "mandatory"]
930
+ },
931
+ "EvidenceType": {
932
+ "type": "string",
933
+ "enum": [
934
+ "digital-signature",
935
+ "timestamp",
936
+ "ip-address",
937
+ "device-fingerprint",
938
+ "biometric",
939
+ "user-authentication",
940
+ "access-reason",
941
+ "approval-chain",
942
+ "video-recording"
943
+ ]
944
+ },
945
+ "EvidenceStrength": {
946
+ "type": "string",
947
+ "enum": ["weak", "moderate", "strong", "cryptographic"]
948
+ },
949
+ "Likelihood": {
950
+ "type": "string",
951
+ "enum": ["very-low", "low", "medium", "high", "very-high"]
952
+ },
953
+ "Impact": {
954
+ "type": "string",
955
+ "enum": ["negligible", "low", "medium", "high", "critical"]
956
+ },
957
+ "Effectiveness": {
958
+ "type": "string",
959
+ "enum": ["low", "medium", "high", "very-high"]
960
+ },
961
+ "RateLimitScope": {
962
+ "type": "string",
963
+ "enum": ["global", "user", "ip", "api-key", "tenant"]
964
+ },
965
+ "RateLimitAction": {
966
+ "type": "string",
967
+ "enum": ["reject", "queue", "throttle", "degrade"]
968
+ },
969
+ "StorageClass": {
970
+ "type": "string",
971
+ "enum": ["hot", "warm", "cold", "archive"]
972
+ },
973
+ "DestinationType": {
974
+ "type": "string",
975
+ "enum": ["database", "log-service", "siem", "file"]
976
+ },
977
+ "EvaluationType": {
978
+ "type": "string",
979
+ "enum": ["synchronous", "asynchronous", "cached"]
980
+ },
981
+ "DeletionMethod": {
982
+ "type": "string",
983
+ "enum": ["soft", "hard", "cryptographic", "overwrite", "physical"]
984
+ },
985
+ "ValidationRuleType": {
986
+ "type": "string",
987
+ "enum": [
988
+ "required",
989
+ "pattern",
990
+ "minLength",
991
+ "maxLength",
992
+ "min",
993
+ "max",
994
+ "enum",
995
+ "email",
996
+ "url",
997
+ "date",
998
+ "custom"
999
+ ]
1000
+ },
1001
+ "ValidationSeverity": {
1002
+ "type": "string",
1003
+ "enum": ["error", "warning", "info"]
1004
+ },
1005
+ "SecurityModel": {
1006
+ "type": "object",
1007
+ "description": "Complete security model for application",
1008
+ "required": ["id", "name", "version", "application"],
1009
+ "properties": {
1010
+ "id": {
1011
+ "type": "string",
1012
+ "format": "uuid",
1013
+ "minLength": 1
1014
+ },
1015
+ "name": {
1016
+ "type": "string",
1017
+ "minLength": 1
1018
+ },
1019
+ "version": {
1020
+ "type": "string",
1021
+ "minLength": 1
1022
+ },
1023
+ "application": {
1024
+ "type": "string",
1025
+ "minLength": 1
1026
+ },
1027
+ "authentication": {
1028
+ "type": "array",
1029
+ "description": "Contains relationship",
1030
+ "items": {
1031
+ "type": "string"
1032
+ }
1033
+ },
1034
+ "actors": {
1035
+ "type": "array",
1036
+ "description": "Contains relationship",
1037
+ "items": {
1038
+ "type": "string"
1039
+ }
1040
+ },
1041
+ "roles": {
1042
+ "type": "array",
1043
+ "description": "Contains relationship",
1044
+ "items": {
1045
+ "type": "string"
1046
+ }
1047
+ },
1048
+ "permissions": {
1049
+ "type": "array",
1050
+ "description": "Contains relationship",
1051
+ "items": {
1052
+ "type": "string"
1053
+ }
1054
+ },
1055
+ "resources": {
1056
+ "type": "array",
1057
+ "description": "Contains relationship",
1058
+ "items": {
1059
+ "type": "string"
1060
+ }
1061
+ },
1062
+ "informationEntities": {
1063
+ "type": "array",
1064
+ "description": "Contains relationship",
1065
+ "items": {
1066
+ "type": "string"
1067
+ }
1068
+ },
1069
+ "delegations": {
1070
+ "type": "array",
1071
+ "description": "Contains relationship",
1072
+ "items": {
1073
+ "type": "string"
1074
+ }
1075
+ },
1076
+ "securityConstraints": {
1077
+ "type": "array",
1078
+ "description": "Contains relationship",
1079
+ "items": {
1080
+ "type": "string"
1081
+ }
1082
+ },
1083
+ "policies": {
1084
+ "type": "array",
1085
+ "description": "Contains relationship",
1086
+ "items": {
1087
+ "type": "string"
1088
+ }
1089
+ },
1090
+ "dataClassification": {
1091
+ "type": "array",
1092
+ "description": "Contains relationship",
1093
+ "items": {
1094
+ "type": "string"
1095
+ }
1096
+ },
1097
+ "socialDependencies": {
1098
+ "type": "array",
1099
+ "description": "Contains relationship",
1100
+ "items": {
1101
+ "type": "string"
1102
+ }
1103
+ },
1104
+ "accountability": {
1105
+ "type": "array",
1106
+ "description": "Contains relationship",
1107
+ "items": {
1108
+ "type": "string"
1109
+ }
1110
+ },
1111
+ "threats": {
1112
+ "type": "array",
1113
+ "description": "Contains relationship",
1114
+ "items": {
1115
+ "type": "string"
1116
+ }
1117
+ }
1118
+ }
1119
+ },
1120
+ "AuthenticationConfig": {
1121
+ "type": "object",
1122
+ "description": "Authentication configuration",
1123
+ "required": ["id", "name", "provider", "sessionTimeout"],
1124
+ "properties": {
1125
+ "id": {
1126
+ "type": "string",
1127
+ "format": "uuid",
1128
+ "minLength": 1
1129
+ },
1130
+ "name": {
1131
+ "type": "string",
1132
+ "minLength": 1
1133
+ },
1134
+ "provider": {
1135
+ "$ref": "#/definitions/AuthProvider"
1136
+ },
1137
+ "sessionTimeout": {
1138
+ "type": "integer"
1139
+ },
1140
+ "mfaRequired": {
1141
+ "type": "boolean"
1142
+ },
1143
+ "passwordPolicy": {
1144
+ "type": "string",
1145
+ "minLength": 1
1146
+ }
1147
+ }
1148
+ },
1149
+ "PasswordPolicy": {
1150
+ "type": "object",
1151
+ "description": "Password requirements",
1152
+ "required": ["id", "name", "expiryDays"],
1153
+ "properties": {
1154
+ "id": {
1155
+ "type": "string",
1156
+ "format": "uuid",
1157
+ "minLength": 1
1158
+ },
1159
+ "name": {
1160
+ "type": "string",
1161
+ "minLength": 1
1162
+ },
1163
+ "minLength": {
1164
+ "type": "integer"
1165
+ },
1166
+ "maxLength": {
1167
+ "type": "integer"
1168
+ },
1169
+ "requireUppercase": {
1170
+ "type": "boolean"
1171
+ },
1172
+ "requireLowercase": {
1173
+ "type": "boolean"
1174
+ },
1175
+ "requireNumbers": {
1176
+ "type": "boolean"
1177
+ },
1178
+ "requireSpecialChars": {
1179
+ "type": "boolean"
1180
+ },
1181
+ "preventReuse": {
1182
+ "type": "integer"
1183
+ },
1184
+ "expiryDays": {
1185
+ "type": "integer"
1186
+ },
1187
+ "lockoutAttempts": {
1188
+ "type": "integer"
1189
+ },
1190
+ "lockoutDuration": {
1191
+ "type": "integer"
1192
+ }
1193
+ }
1194
+ },
1195
+ "Role": {
1196
+ "type": "object",
1197
+ "description": "User role definition",
1198
+ "required": ["id", "name", "displayName", "level", "inheritsFrom"],
1199
+ "properties": {
1200
+ "id": {
1201
+ "type": "string",
1202
+ "format": "uuid",
1203
+ "minLength": 1
1204
+ },
1205
+ "name": {
1206
+ "type": "string",
1207
+ "minLength": 1
1208
+ },
1209
+ "displayName": {
1210
+ "type": "string",
1211
+ "minLength": 1
1212
+ },
1213
+ "description": {
1214
+ "type": "string",
1215
+ "minLength": 1
1216
+ },
1217
+ "level": {
1218
+ "type": "integer"
1219
+ },
1220
+ "inheritsFrom": {
1221
+ "type": "string",
1222
+ "minLength": 1
1223
+ },
1224
+ "permissions": {
1225
+ "type": "array",
1226
+ "description": "Contains relationship",
1227
+ "items": {
1228
+ "type": "string"
1229
+ }
1230
+ }
1231
+ }
1232
+ },
1233
+ "Permission": {
1234
+ "type": "object",
1235
+ "description": "Permission definition",
1236
+ "required": ["name", "id", "scope", "resource", "action"],
1237
+ "properties": {
1238
+ "name": {
1239
+ "type": "string",
1240
+ "minLength": 1
1241
+ },
1242
+ "id": {
1243
+ "type": "string",
1244
+ "format": "uuid",
1245
+ "minLength": 1
1246
+ },
1247
+ "description": {
1248
+ "type": "string",
1249
+ "minLength": 1
1250
+ },
1251
+ "scope": {
1252
+ "$ref": "#/definitions/PermissionScope"
1253
+ },
1254
+ "resource": {
1255
+ "type": "string",
1256
+ "minLength": 1
1257
+ },
1258
+ "action": {
1259
+ "type": "string",
1260
+ "minLength": 1
1261
+ }
1262
+ }
1263
+ },
1264
+ "SecureResource": {
1265
+ "type": "object",
1266
+ "description": "Protected resource definition",
1267
+ "required": ["resource", "id", "name", "type"],
1268
+ "properties": {
1269
+ "resource": {
1270
+ "type": "string",
1271
+ "minLength": 1
1272
+ },
1273
+ "id": {
1274
+ "type": "string",
1275
+ "format": "uuid",
1276
+ "minLength": 1
1277
+ },
1278
+ "name": {
1279
+ "type": "string",
1280
+ "minLength": 1
1281
+ },
1282
+ "type": {
1283
+ "$ref": "#/definitions/ResourceType"
1284
+ },
1285
+ "description": {
1286
+ "type": "string",
1287
+ "minLength": 1
1288
+ },
1289
+ "operations": {
1290
+ "type": "array",
1291
+ "description": "Contains relationship",
1292
+ "items": {
1293
+ "type": "string"
1294
+ }
1295
+ },
1296
+ "fieldAccess": {
1297
+ "type": "array",
1298
+ "description": "Contains relationship",
1299
+ "items": {
1300
+ "type": "string"
1301
+ }
1302
+ }
1303
+ }
1304
+ },
1305
+ "ResourceOperation": {
1306
+ "type": "object",
1307
+ "description": "Operation on a resource",
1308
+ "required": ["id", "name", "operation"],
1309
+ "properties": {
1310
+ "id": {
1311
+ "type": "string",
1312
+ "format": "uuid",
1313
+ "minLength": 1
1314
+ },
1315
+ "name": {
1316
+ "type": "string",
1317
+ "minLength": 1
1318
+ },
1319
+ "operation": {
1320
+ "type": "string",
1321
+ "minLength": 1
1322
+ },
1323
+ "description": {
1324
+ "type": "string",
1325
+ "minLength": 1
1326
+ },
1327
+ "conditions": {
1328
+ "type": "array",
1329
+ "description": "Contains relationship",
1330
+ "items": {
1331
+ "type": "string"
1332
+ }
1333
+ },
1334
+ "rateLimit": {
1335
+ "type": "array",
1336
+ "description": "Contains relationship",
1337
+ "items": {
1338
+ "type": "string"
1339
+ }
1340
+ },
1341
+ "audit": {
1342
+ "type": "array",
1343
+ "description": "Contains relationship",
1344
+ "items": {
1345
+ "type": "string"
1346
+ }
1347
+ }
1348
+ }
1349
+ },
1350
+ "AccessCondition": {
1351
+ "type": "object",
1352
+ "description": "Conditional access rule",
1353
+ "required": ["id", "name", "field", "operator", "value", "message", "source"],
1354
+ "properties": {
1355
+ "id": {
1356
+ "type": "string",
1357
+ "format": "uuid",
1358
+ "minLength": 1
1359
+ },
1360
+ "name": {
1361
+ "type": "string",
1362
+ "minLength": 1
1363
+ },
1364
+ "field": {
1365
+ "type": "string",
1366
+ "minLength": 1
1367
+ },
1368
+ "operator": {
1369
+ "$ref": "#/definitions/ConditionOperator"
1370
+ },
1371
+ "value": {
1372
+ "type": "string",
1373
+ "minLength": 1
1374
+ },
1375
+ "message": {
1376
+ "type": "string",
1377
+ "minLength": 1
1378
+ },
1379
+ "source": {
1380
+ "$ref": "#/definitions/DataSource"
1381
+ }
1382
+ }
1383
+ },
1384
+ "FieldAccessControl": {
1385
+ "type": "object",
1386
+ "description": "Field-level access control",
1387
+ "required": ["id", "name", "field"],
1388
+ "properties": {
1389
+ "id": {
1390
+ "type": "string",
1391
+ "format": "uuid",
1392
+ "minLength": 1
1393
+ },
1394
+ "name": {
1395
+ "type": "string",
1396
+ "minLength": 1
1397
+ },
1398
+ "field": {
1399
+ "type": "string",
1400
+ "minLength": 1
1401
+ },
1402
+ "description": {
1403
+ "type": "string",
1404
+ "minLength": 1
1405
+ }
1406
+ }
1407
+ },
1408
+ "SecurityPolicy": {
1409
+ "type": "object",
1410
+ "description": "Declarative security policy",
1411
+ "required": ["id", "name", "priority", "target"],
1412
+ "properties": {
1413
+ "id": {
1414
+ "type": "string",
1415
+ "format": "uuid",
1416
+ "minLength": 1
1417
+ },
1418
+ "name": {
1419
+ "type": "string",
1420
+ "minLength": 1
1421
+ },
1422
+ "description": {
1423
+ "type": "string",
1424
+ "minLength": 1
1425
+ },
1426
+ "enabled": {
1427
+ "type": "boolean"
1428
+ },
1429
+ "priority": {
1430
+ "type": "integer"
1431
+ },
1432
+ "target": {
1433
+ "$ref": "#/definitions/PolicyTarget"
1434
+ },
1435
+ "rules": {
1436
+ "type": "array",
1437
+ "description": "Contains relationship",
1438
+ "items": {
1439
+ "type": "string"
1440
+ }
1441
+ }
1442
+ }
1443
+ },
1444
+ "PolicyRule": {
1445
+ "type": "object",
1446
+ "description": "Individual policy rule",
1447
+ "required": ["id", "name", "condition", "effect"],
1448
+ "properties": {
1449
+ "id": {
1450
+ "type": "string",
1451
+ "format": "uuid",
1452
+ "minLength": 1
1453
+ },
1454
+ "name": {
1455
+ "type": "string",
1456
+ "minLength": 1
1457
+ },
1458
+ "condition": {
1459
+ "type": "string",
1460
+ "minLength": 1
1461
+ },
1462
+ "effect": {
1463
+ "$ref": "#/definitions/PolicyEffect"
1464
+ },
1465
+ "message": {
1466
+ "type": "string",
1467
+ "minLength": 1
1468
+ },
1469
+ "actions": {
1470
+ "type": "array",
1471
+ "description": "Contains relationship",
1472
+ "items": {
1473
+ "type": "string"
1474
+ }
1475
+ }
1476
+ }
1477
+ },
1478
+ "PolicyAction": {
1479
+ "type": "object",
1480
+ "description": "Action to take when policy rule matches",
1481
+ "required": ["id", "name", "type", "parameters"],
1482
+ "properties": {
1483
+ "id": {
1484
+ "type": "string",
1485
+ "format": "uuid",
1486
+ "minLength": 1
1487
+ },
1488
+ "name": {
1489
+ "type": "string",
1490
+ "minLength": 1
1491
+ },
1492
+ "type": {
1493
+ "$ref": "#/definitions/ActionType"
1494
+ },
1495
+ "parameters": {
1496
+ "type": "object"
1497
+ }
1498
+ }
1499
+ },
1500
+ "DataClassification": {
1501
+ "type": "object",
1502
+ "description": "Data classification and protection policies",
1503
+ "required": ["id", "name"],
1504
+ "properties": {
1505
+ "id": {
1506
+ "type": "string",
1507
+ "format": "uuid",
1508
+ "minLength": 1
1509
+ },
1510
+ "name": {
1511
+ "type": "string",
1512
+ "minLength": 1
1513
+ },
1514
+ "version": {
1515
+ "type": "string",
1516
+ "minLength": 1
1517
+ },
1518
+ "classifications": {
1519
+ "type": "array",
1520
+ "description": "Contains relationship",
1521
+ "items": {
1522
+ "type": "string"
1523
+ }
1524
+ }
1525
+ }
1526
+ },
1527
+ "Classification": {
1528
+ "type": "object",
1529
+ "description": "A single classification level defining data sensitivity and protection requirements",
1530
+ "required": ["level", "label", "description"],
1531
+ "properties": {
1532
+ "level": {
1533
+ "$ref": "#/definitions/ClassificationLevel"
1534
+ },
1535
+ "label": {
1536
+ "type": "string",
1537
+ "minLength": 1
1538
+ },
1539
+ "description": {
1540
+ "type": "string",
1541
+ "minLength": 1
1542
+ }
1543
+ }
1544
+ },
1545
+ "Actor": {
1546
+ "type": "object",
1547
+ "description": "Actor in the system (beyond roles)",
1548
+ "required": ["id", "name", "type"],
1549
+ "properties": {
1550
+ "id": {
1551
+ "type": "string",
1552
+ "format": "uuid",
1553
+ "minLength": 1
1554
+ },
1555
+ "name": {
1556
+ "type": "string",
1557
+ "minLength": 1
1558
+ },
1559
+ "type": {
1560
+ "$ref": "#/definitions/ActorType"
1561
+ },
1562
+ "description": {
1563
+ "type": "string",
1564
+ "minLength": 1
1565
+ },
1566
+ "trustLevel": {
1567
+ "$ref": "#/definitions/TrustLevel"
1568
+ },
1569
+ "objectives": {
1570
+ "type": "array",
1571
+ "description": "Contains relationship",
1572
+ "items": {
1573
+ "type": "string"
1574
+ }
1575
+ },
1576
+ "dependencies": {
1577
+ "type": "array",
1578
+ "description": "Contains relationship",
1579
+ "items": {
1580
+ "type": "string"
1581
+ }
1582
+ }
1583
+ }
1584
+ },
1585
+ "ActorObjective": {
1586
+ "type": "object",
1587
+ "description": "Security-related objective or goal of an actor",
1588
+ "required": ["id", "name", "description"],
1589
+ "properties": {
1590
+ "id": {
1591
+ "type": "string",
1592
+ "format": "uuid",
1593
+ "minLength": 1
1594
+ },
1595
+ "name": {
1596
+ "type": "string",
1597
+ "minLength": 1
1598
+ },
1599
+ "description": {
1600
+ "type": "string",
1601
+ "minLength": 1
1602
+ },
1603
+ "criticality": {
1604
+ "$ref": "#/definitions/Criticality"
1605
+ }
1606
+ }
1607
+ },
1608
+ "ActorDependency": {
1609
+ "type": "object",
1610
+ "description": "Dependency between actors",
1611
+ "required": ["id", "name", "dependee", "resource", "objective", "criticality"],
1612
+ "properties": {
1613
+ "id": {
1614
+ "type": "string",
1615
+ "format": "uuid",
1616
+ "minLength": 1
1617
+ },
1618
+ "name": {
1619
+ "type": "string",
1620
+ "minLength": 1
1621
+ },
1622
+ "dependee": {
1623
+ "type": "string",
1624
+ "minLength": 1
1625
+ },
1626
+ "resource": {
1627
+ "type": "string",
1628
+ "minLength": 1
1629
+ },
1630
+ "objective": {
1631
+ "type": "string",
1632
+ "minLength": 1
1633
+ },
1634
+ "criticality": {
1635
+ "$ref": "#/definitions/Criticality"
1636
+ }
1637
+ }
1638
+ },
1639
+ "InformationEntity": {
1640
+ "type": "object",
1641
+ "description": "Information asset with fine-grained rights",
1642
+ "required": ["id", "name", "classification"],
1643
+ "properties": {
1644
+ "id": {
1645
+ "type": "string",
1646
+ "format": "uuid",
1647
+ "minLength": 1
1648
+ },
1649
+ "name": {
1650
+ "type": "string",
1651
+ "minLength": 1
1652
+ },
1653
+ "description": {
1654
+ "type": "string",
1655
+ "minLength": 1
1656
+ },
1657
+ "classification": {
1658
+ "$ref": "#/definitions/ClassificationLevel"
1659
+ },
1660
+ "authorizationRequirements": {
1661
+ "type": "array",
1662
+ "description": "Contains relationship",
1663
+ "items": {
1664
+ "type": "string"
1665
+ }
1666
+ }
1667
+ }
1668
+ },
1669
+ "InformationRight": {
1670
+ "type": "object",
1671
+ "description": "Fine-grained information access rights",
1672
+ "required": ["id", "name", "actor", "constraint"],
1673
+ "properties": {
1674
+ "id": {
1675
+ "type": "string",
1676
+ "format": "uuid",
1677
+ "minLength": 1
1678
+ },
1679
+ "name": {
1680
+ "type": "string",
1681
+ "minLength": 1
1682
+ },
1683
+ "actor": {
1684
+ "type": "string",
1685
+ "minLength": 1
1686
+ },
1687
+ "constraint": {
1688
+ "type": "string",
1689
+ "minLength": 1
1690
+ }
1691
+ }
1692
+ },
1693
+ "Delegation": {
1694
+ "type": "object",
1695
+ "description": "Explicit delegation of permissions or goals",
1696
+ "required": ["id", "name", "delegator", "delegatee", "delegationType"],
1697
+ "properties": {
1698
+ "id": {
1699
+ "type": "string",
1700
+ "format": "uuid",
1701
+ "minLength": 1
1702
+ },
1703
+ "name": {
1704
+ "type": "string",
1705
+ "minLength": 1
1706
+ },
1707
+ "delegator": {
1708
+ "type": "string",
1709
+ "minLength": 1
1710
+ },
1711
+ "delegatee": {
1712
+ "type": "string",
1713
+ "minLength": 1
1714
+ },
1715
+ "delegationType": {
1716
+ "$ref": "#/definitions/DelegationType"
1717
+ },
1718
+ "description": {
1719
+ "type": "string",
1720
+ "minLength": 1
1721
+ }
1722
+ }
1723
+ },
1724
+ "SecurityConstraints": {
1725
+ "type": "object",
1726
+ "description": "Security patterns and constraints",
1727
+ "required": ["id", "name"],
1728
+ "properties": {
1729
+ "id": {
1730
+ "type": "string",
1731
+ "format": "uuid",
1732
+ "minLength": 1
1733
+ },
1734
+ "name": {
1735
+ "type": "string",
1736
+ "minLength": 1
1737
+ },
1738
+ "version": {
1739
+ "type": "string",
1740
+ "minLength": 1
1741
+ },
1742
+ "separationOfDuty": {
1743
+ "type": "array",
1744
+ "description": "Contains relationship",
1745
+ "items": {
1746
+ "type": "string"
1747
+ }
1748
+ },
1749
+ "bindingOfDuty": {
1750
+ "type": "array",
1751
+ "description": "Contains relationship",
1752
+ "items": {
1753
+ "type": "string"
1754
+ }
1755
+ },
1756
+ "needToKnow": {
1757
+ "type": "array",
1758
+ "description": "Contains relationship",
1759
+ "items": {
1760
+ "type": "string"
1761
+ }
1762
+ }
1763
+ }
1764
+ },
1765
+ "SeparationOfDuty": {
1766
+ "type": "object",
1767
+ "description": "Different actors must perform related tasks",
1768
+ "required": ["name", "message"],
1769
+ "properties": {
1770
+ "name": {
1771
+ "type": "string",
1772
+ "minLength": 1
1773
+ },
1774
+ "description": {
1775
+ "type": "string",
1776
+ "minLength": 1
1777
+ },
1778
+ "message": {
1779
+ "type": "string",
1780
+ "minLength": 1
1781
+ },
1782
+ "tasks": {
1783
+ "type": "array",
1784
+ "description": "Contains relationship",
1785
+ "items": {
1786
+ "type": "string"
1787
+ }
1788
+ },
1789
+ "roles": {
1790
+ "type": "array",
1791
+ "description": "Contains relationship",
1792
+ "items": {
1793
+ "type": "string"
1794
+ }
1795
+ },
1796
+ "mutuallyExclusive": {
1797
+ "type": "array",
1798
+ "description": "Contains relationship",
1799
+ "items": {
1800
+ "type": "string"
1801
+ }
1802
+ }
1803
+ }
1804
+ },
1805
+ "BindingOfDuty": {
1806
+ "type": "object",
1807
+ "description": "Same actor must complete related tasks",
1808
+ "required": ["name", "message"],
1809
+ "properties": {
1810
+ "name": {
1811
+ "type": "string",
1812
+ "minLength": 1
1813
+ },
1814
+ "description": {
1815
+ "type": "string",
1816
+ "minLength": 1
1817
+ },
1818
+ "message": {
1819
+ "type": "string",
1820
+ "minLength": 1
1821
+ },
1822
+ "tasks": {
1823
+ "type": "array",
1824
+ "description": "Contains relationship",
1825
+ "items": {
1826
+ "type": "string"
1827
+ }
1828
+ },
1829
+ "scope": {
1830
+ "type": "array",
1831
+ "description": "Contains relationship",
1832
+ "items": {
1833
+ "type": "string"
1834
+ }
1835
+ }
1836
+ }
1837
+ },
1838
+ "NeedToKnow": {
1839
+ "type": "object",
1840
+ "description": "Information access based on objective/purpose requirements",
1841
+ "required": ["name", "resource", "objective", "message", "justificationRequired"],
1842
+ "properties": {
1843
+ "name": {
1844
+ "type": "string",
1845
+ "minLength": 1
1846
+ },
1847
+ "resource": {
1848
+ "type": "string",
1849
+ "minLength": 1
1850
+ },
1851
+ "objective": {
1852
+ "type": "string",
1853
+ "minLength": 1
1854
+ },
1855
+ "message": {
1856
+ "type": "string",
1857
+ "minLength": 1
1858
+ },
1859
+ "justificationRequired": {
1860
+ "type": "boolean"
1861
+ }
1862
+ }
1863
+ },
1864
+ "SocialDependency": {
1865
+ "type": "object",
1866
+ "description": "Dependencies and trust between actors",
1867
+ "required": ["id", "name", "depender", "dependee", "resource", "objective", "criticality"],
1868
+ "properties": {
1869
+ "id": {
1870
+ "type": "string",
1871
+ "format": "uuid",
1872
+ "minLength": 1
1873
+ },
1874
+ "name": {
1875
+ "type": "string",
1876
+ "minLength": 1
1877
+ },
1878
+ "depender": {
1879
+ "type": "string",
1880
+ "minLength": 1
1881
+ },
1882
+ "dependee": {
1883
+ "type": "string",
1884
+ "minLength": 1
1885
+ },
1886
+ "resource": {
1887
+ "type": "string",
1888
+ "minLength": 1
1889
+ },
1890
+ "objective": {
1891
+ "type": "string",
1892
+ "minLength": 1
1893
+ },
1894
+ "criticality": {
1895
+ "$ref": "#/definitions/Criticality"
1896
+ }
1897
+ }
1898
+ },
1899
+ "AccountabilityRequirement": {
1900
+ "type": "object",
1901
+ "description": "Accountability and non-repudiation requirements",
1902
+ "required": [
1903
+ "id",
1904
+ "name",
1905
+ "action",
1906
+ "resource",
1907
+ "nonRepudiation",
1908
+ "purposeDeclaration",
1909
+ "challengeable"
1910
+ ],
1911
+ "properties": {
1912
+ "id": {
1913
+ "type": "string",
1914
+ "format": "uuid",
1915
+ "minLength": 1
1916
+ },
1917
+ "name": {
1918
+ "type": "string",
1919
+ "minLength": 1
1920
+ },
1921
+ "action": {
1922
+ "type": "string",
1923
+ "minLength": 1
1924
+ },
1925
+ "resource": {
1926
+ "type": "string",
1927
+ "minLength": 1
1928
+ },
1929
+ "nonRepudiation": {
1930
+ "type": "boolean"
1931
+ },
1932
+ "purposeDeclaration": {
1933
+ "$ref": "#/definitions/RequirementLevel"
1934
+ },
1935
+ "challengeable": {
1936
+ "type": "boolean"
1937
+ }
1938
+ }
1939
+ },
1940
+ "Evidence": {
1941
+ "type": "object",
1942
+ "description": "Evidence required for accountability",
1943
+ "required": ["id", "name", "type", "source"],
1944
+ "properties": {
1945
+ "id": {
1946
+ "type": "string",
1947
+ "format": "uuid",
1948
+ "minLength": 1
1949
+ },
1950
+ "name": {
1951
+ "type": "string",
1952
+ "minLength": 1
1953
+ },
1954
+ "type": {
1955
+ "$ref": "#/definitions/EvidenceType"
1956
+ },
1957
+ "strength": {
1958
+ "$ref": "#/definitions/EvidenceStrength"
1959
+ },
1960
+ "source": {
1961
+ "type": "string",
1962
+ "minLength": 1
1963
+ }
1964
+ }
1965
+ },
1966
+ "Threat": {
1967
+ "type": "object",
1968
+ "description": "Security threat and countermeasures",
1969
+ "required": ["id", "name", "description", "threatens", "likelihood", "impact"],
1970
+ "properties": {
1971
+ "id": {
1972
+ "type": "string",
1973
+ "format": "uuid",
1974
+ "minLength": 1
1975
+ },
1976
+ "name": {
1977
+ "type": "string",
1978
+ "minLength": 1
1979
+ },
1980
+ "description": {
1981
+ "type": "string",
1982
+ "minLength": 1
1983
+ },
1984
+ "threatens": {
1985
+ "type": "string",
1986
+ "minLength": 1
1987
+ },
1988
+ "likelihood": {
1989
+ "$ref": "#/definitions/Likelihood"
1990
+ },
1991
+ "impact": {
1992
+ "$ref": "#/definitions/Impact"
1993
+ },
1994
+ "countermeasures": {
1995
+ "type": "array",
1996
+ "description": "Contains relationship",
1997
+ "items": {
1998
+ "type": "string"
1999
+ }
2000
+ }
2001
+ }
2002
+ },
2003
+ "Countermeasure": {
2004
+ "type": "object",
2005
+ "description": "Security countermeasure for a threat",
2006
+ "required": ["id", "name", "type", "description"],
2007
+ "properties": {
2008
+ "id": {
2009
+ "type": "string",
2010
+ "format": "uuid",
2011
+ "minLength": 1
2012
+ },
2013
+ "name": {
2014
+ "type": "string",
2015
+ "minLength": 1
2016
+ },
2017
+ "type": {
2018
+ "type": "string",
2019
+ "minLength": 1
2020
+ },
2021
+ "description": {
2022
+ "type": "string",
2023
+ "minLength": 1
2024
+ },
2025
+ "effectiveness": {
2026
+ "$ref": "#/definitions/Effectiveness"
2027
+ },
2028
+ "implemented": {
2029
+ "type": "boolean"
2030
+ }
2031
+ }
2032
+ },
2033
+ "RateLimit": {
2034
+ "type": "object",
2035
+ "description": "Defines throttling constraints for API or service access, specifying maximum request counts, time windows, and actions to take when limits are exceeded. Protects resources from abuse and ensures fair usage across consumers.",
2036
+ "required": ["id", "name", "requests", "window", "keyBy"],
2037
+ "properties": {
2038
+ "id": {
2039
+ "type": "string",
2040
+ "format": "uuid",
2041
+ "minLength": 1
2042
+ },
2043
+ "name": {
2044
+ "type": "string",
2045
+ "minLength": 1
2046
+ },
2047
+ "requests": {
2048
+ "type": "integer"
2049
+ },
2050
+ "window": {
2051
+ "type": "string",
2052
+ "minLength": 1
2053
+ },
2054
+ "scope": {
2055
+ "$ref": "#/definitions/RateLimitScope"
2056
+ },
2057
+ "keyBy": {
2058
+ "type": "string",
2059
+ "minLength": 1
2060
+ }
2061
+ }
2062
+ },
2063
+ "AuditConfig": {
2064
+ "type": "object",
2065
+ "description": "Configuration for security audit logging, specifying what events to capture, retention periods, storage destinations, and compliance requirements. Enables security monitoring and forensic analysis.",
2066
+ "required": ["id", "name", "level", "sanitizeFields"],
2067
+ "properties": {
2068
+ "id": {
2069
+ "type": "string",
2070
+ "format": "uuid",
2071
+ "minLength": 1
2072
+ },
2073
+ "name": {
2074
+ "type": "string",
2075
+ "minLength": 1
2076
+ },
2077
+ "enabled": {
2078
+ "type": "boolean"
2079
+ },
2080
+ "level": {
2081
+ "$ref": "#/definitions/AuditLevel"
2082
+ },
2083
+ "includePayload": {
2084
+ "type": "boolean"
2085
+ },
2086
+ "includeHeaders": {
2087
+ "type": "boolean"
2088
+ },
2089
+ "sanitizeFields": {
2090
+ "type": "string",
2091
+ "minLength": 1
2092
+ }
2093
+ }
2094
+ },
2095
+ "Condition": {
2096
+ "type": "object",
2097
+ "description": "A logical expression or predicate that determines when a SecurityPolicy rule applies. Supports attribute-based access control by evaluating context such as time, location, user attributes, or resource state.",
2098
+ "required": ["id", "name", "expression"],
2099
+ "properties": {
2100
+ "id": {
2101
+ "type": "string",
2102
+ "format": "uuid",
2103
+ "minLength": 1
2104
+ },
2105
+ "name": {
2106
+ "type": "string",
2107
+ "minLength": 1
2108
+ },
2109
+ "expression": {
2110
+ "type": "string",
2111
+ "minLength": 1
2112
+ },
2113
+ "description": {
2114
+ "type": "string",
2115
+ "minLength": 1
2116
+ },
2117
+ "evaluationType": {
2118
+ "$ref": "#/definitions/EvaluationType"
2119
+ }
2120
+ }
2121
+ },
2122
+ "RetentionPolicy": {
2123
+ "type": "object",
2124
+ "description": "Defines how long security-related data (audit logs, access records, encryption keys) must be retained, archival strategies, and secure deletion procedures. Ensures compliance with regulatory requirements.",
2125
+ "required": ["id", "name", "period"],
2126
+ "properties": {
2127
+ "id": {
2128
+ "type": "string",
2129
+ "format": "uuid",
2130
+ "minLength": 1
2131
+ },
2132
+ "name": {
2133
+ "type": "string",
2134
+ "minLength": 1
2135
+ },
2136
+ "period": {
2137
+ "type": "string",
2138
+ "minLength": 1
2139
+ },
2140
+ "description": {
2141
+ "type": "string",
2142
+ "minLength": 1
2143
+ }
2144
+ }
2145
+ },
2146
+ "ValidationRule": {
2147
+ "type": "object",
2148
+ "description": "Specifies data validation constraints for FieldAccessControl, defining allowed patterns, value ranges, or transformations applied when accessing protected fields. Prevents data corruption and enforces field-level integrity.",
2149
+ "required": ["id", "name", "type", "value", "message"],
2150
+ "properties": {
2151
+ "id": {
2152
+ "type": "string",
2153
+ "format": "uuid",
2154
+ "minLength": 1
2155
+ },
2156
+ "name": {
2157
+ "type": "string",
2158
+ "minLength": 1
2159
+ },
2160
+ "type": {
2161
+ "$ref": "#/definitions/ValidationRuleType"
2162
+ },
2163
+ "value": {
2164
+ "type": "string",
2165
+ "minLength": 1
2166
+ },
2167
+ "message": {
2168
+ "type": "string",
2169
+ "minLength": 1
2170
+ },
2171
+ "severity": {
2172
+ "$ref": "#/definitions/ValidationSeverity"
2173
+ }
2174
+ }
2175
+ }
2176
+ }
2177
+ }