@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,1091 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/schemas/12-testing-layer.schema.json",
4
+ "title": "Testing Layer Schema",
5
+ "description": "Models test coverage requirements, input space partitioning, and coverage criteria to ensure comprehensive testing with traceability to requirements.",
6
+ "layerMetadata": {
7
+ "layerId": "12-testing",
8
+ "layerName": "Testing 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": ["CoverageRequirement", "TestCoverageModel", "TestCoverageTarget"],
19
+ "targetTypes": ["InputPartitionSelection", "OutcomeCategory", "TestCoverageTarget"],
20
+ "examples": [
21
+ {
22
+ "source": "TestCoverageModel",
23
+ "target": "TestCoverageTarget",
24
+ "description": "Coverage model composes targets defining what needs testing"
25
+ },
26
+ {
27
+ "source": "TestCoverageTarget",
28
+ "target": "OutcomeCategory",
29
+ "description": "Coverage target composes expected outcome categories"
30
+ },
31
+ {
32
+ "source": "CoverageRequirement",
33
+ "target": "InputPartitionSelection",
34
+ "description": "Coverage requirement composes partition value selections"
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "relationshipTypeId": "aggregation",
40
+ "sourceTypes": ["CoverageRequirement", "InputPartitionSelection"],
41
+ "targetTypes": ["ContextVariation", "PartitionValue"],
42
+ "examples": [
43
+ {
44
+ "source": "InputPartitionSelection",
45
+ "target": "PartitionValue",
46
+ "description": "Partition selection aggregates multiple partition values to cover"
47
+ },
48
+ {
49
+ "source": "CoverageRequirement",
50
+ "target": "ContextVariation",
51
+ "description": "Requirement aggregates selected contexts for testing"
52
+ }
53
+ ]
54
+ },
55
+ {
56
+ "relationshipTypeId": "triggering",
57
+ "sourceTypes": ["CoverageGap", "PartitionDependency"],
58
+ "targetTypes": ["CoverageRequirement", "PartitionValue"],
59
+ "examples": [
60
+ {
61
+ "source": "PartitionDependency",
62
+ "target": "PartitionValue",
63
+ "description": "Dependency condition triggers inclusion/exclusion of partition values"
64
+ },
65
+ {
66
+ "source": "CoverageGap",
67
+ "target": "CoverageRequirement",
68
+ "description": "Identified gap triggers need for additional coverage"
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ "relationshipTypeId": "flow",
74
+ "sourceTypes": ["CoverageRequirement", "TestCoverageTarget"],
75
+ "targetTypes": ["CoverageRequirement", "TestCaseSketch"],
76
+ "examples": [
77
+ {
78
+ "source": "TestCoverageTarget",
79
+ "target": "CoverageRequirement",
80
+ "description": "Target flows to requirements that specify its coverage"
81
+ },
82
+ {
83
+ "source": "CoverageRequirement",
84
+ "target": "TestCaseSketch",
85
+ "description": "Requirement flows to sketches that implement it"
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "relationshipTypeId": "serving",
91
+ "sourceTypes": ["ContextVariation", "InputSpacePartition"],
92
+ "targetTypes": ["TestCoverageTarget"],
93
+ "examples": [
94
+ {
95
+ "source": "InputSpacePartition",
96
+ "target": "TestCoverageTarget",
97
+ "description": "Partition serves target by defining testable input space"
98
+ },
99
+ {
100
+ "source": "ContextVariation",
101
+ "target": "TestCoverageTarget",
102
+ "description": "Context serves target by defining execution environments"
103
+ }
104
+ ]
105
+ },
106
+ {
107
+ "relationshipTypeId": "access",
108
+ "sourceTypes": ["CoverageRequirement", "TestCaseSketch"],
109
+ "targetTypes": ["InputPartitionSelection", "InputSelection"],
110
+ "examples": [
111
+ {
112
+ "source": "TestCaseSketch",
113
+ "target": "InputSelection",
114
+ "description": "Test sketch accesses input selections for test execution"
115
+ },
116
+ {
117
+ "source": "CoverageRequirement",
118
+ "target": "InputPartitionSelection",
119
+ "description": "Requirement accesses partition selections for coverage"
120
+ }
121
+ ]
122
+ },
123
+ {
124
+ "relationshipTypeId": "reference",
125
+ "sourceTypes": ["CoverageRequirement", "InputSelection", "TestCaseSketch"],
126
+ "targetTypes": ["CoverageRequirement", "PartitionValue", "TestCoverageTarget"],
127
+ "examples": [
128
+ {
129
+ "source": "TestCaseSketch",
130
+ "target": "CoverageRequirement",
131
+ "description": "Test case sketch references coverage requirement it satisfies"
132
+ },
133
+ {
134
+ "source": "CoverageRequirement",
135
+ "target": "TestCoverageTarget",
136
+ "description": "Coverage requirement references target it covers"
137
+ },
138
+ {
139
+ "source": "InputSelection",
140
+ "target": "PartitionValue",
141
+ "description": "Input selection references selected partition value"
142
+ }
143
+ ]
144
+ },
145
+ {
146
+ "relationshipTypeId": "depends-on",
147
+ "sourceTypes": ["CoverageRequirement", "TestCaseSketch"],
148
+ "targetTypes": ["ContextVariation", "InputSpacePartition", "OutcomeCategory"],
149
+ "examples": [
150
+ {
151
+ "source": "TestCaseSketch",
152
+ "target": "ContextVariation",
153
+ "description": "Test sketch depends on context for execution environment"
154
+ },
155
+ {
156
+ "source": "TestCaseSketch",
157
+ "target": "OutcomeCategory",
158
+ "description": "Test sketch depends on expected outcome category"
159
+ },
160
+ {
161
+ "source": "CoverageRequirement",
162
+ "target": "InputSpacePartition",
163
+ "description": "Requirement depends on partitions for coverage criteria"
164
+ }
165
+ ]
166
+ },
167
+ {
168
+ "relationshipTypeId": "validates",
169
+ "sourceTypes": ["TargetCoverageSummary", "TestCaseSketch"],
170
+ "targetTypes": ["CoverageRequirement", "TestCoverageTarget"],
171
+ "examples": [
172
+ {
173
+ "source": "TestCaseSketch",
174
+ "target": "CoverageRequirement",
175
+ "description": "Test sketch validates requirement is satisfied"
176
+ },
177
+ {
178
+ "source": "TargetCoverageSummary",
179
+ "target": "TestCoverageTarget",
180
+ "description": "Summary validates coverage completeness of target"
181
+ }
182
+ ]
183
+ }
184
+ ]
185
+ },
186
+ "crossLayerRelationships": {
187
+ "$comment": "Relationships to/from entities in other layers",
188
+ "outgoing": [
189
+ {
190
+ "id": "testing-supports-goals",
191
+ "predicate": "supports-goals",
192
+ "inversePredicate": "supported-by",
193
+ "targetLayer": "01-motivation",
194
+ "targetTypes": ["Goal"],
195
+ "sourceTypes": ["TestCoverageModel", "TestCaseSketch"],
196
+ "fieldPath": "motivation.supports-goals",
197
+ "cardinality": "array",
198
+ "format": "uuid",
199
+ "strength": "high",
200
+ "required": false,
201
+ "description": "Testing elements support strategic goals"
202
+ },
203
+ {
204
+ "id": "testing-fulfills-requirements",
205
+ "predicate": "fulfills-requirements",
206
+ "inversePredicate": "fulfilled-by",
207
+ "targetLayer": "01-motivation",
208
+ "targetTypes": ["Requirement"],
209
+ "sourceTypes": ["TestCoverageModel", "TestCaseSketch", "CoverageRequirement"],
210
+ "fieldPath": "motivation.fulfills-requirements",
211
+ "cardinality": "array",
212
+ "format": "uuid",
213
+ "strength": "high",
214
+ "required": false,
215
+ "description": "Testing elements fulfill requirements"
216
+ },
217
+ {
218
+ "id": "testing-governed-by-principles",
219
+ "predicate": "governed-by-principles",
220
+ "inversePredicate": "governs",
221
+ "targetLayer": "01-motivation",
222
+ "targetTypes": ["Principle"],
223
+ "sourceTypes": ["TestCoverageModel"],
224
+ "fieldPath": "motivation.governed-by-principles",
225
+ "cardinality": "array",
226
+ "format": "uuid",
227
+ "strength": "high",
228
+ "required": false,
229
+ "description": "Testing models governed by testing principles"
230
+ },
231
+ {
232
+ "id": "testing-constrained-by",
233
+ "predicate": "constrained-by",
234
+ "inversePredicate": "constrains",
235
+ "targetLayer": "01-motivation",
236
+ "targetTypes": ["Constraint"],
237
+ "sourceTypes": ["TestCoverageModel", "CoverageRequirement"],
238
+ "fieldPath": "motivation.constrained-by",
239
+ "cardinality": "array",
240
+ "format": "uuid",
241
+ "strength": "medium",
242
+ "required": false,
243
+ "description": "Testing elements constrained by limitations"
244
+ }
245
+ ],
246
+ "incoming": []
247
+ },
248
+ "type": "object",
249
+ "properties": {
250
+ "test-coverage-models": {
251
+ "type": "array",
252
+ "description": "Collection of TestCoverageModel entities",
253
+ "items": {
254
+ "$ref": "#/definitions/TestCoverageModel"
255
+ }
256
+ },
257
+ "test-coverage-targets": {
258
+ "type": "array",
259
+ "description": "Collection of TestCoverageTarget entities",
260
+ "items": {
261
+ "$ref": "#/definitions/TestCoverageTarget"
262
+ }
263
+ },
264
+ "target-input-fields": {
265
+ "type": "array",
266
+ "description": "Collection of TargetInputField entities",
267
+ "items": {
268
+ "$ref": "#/definitions/TargetInputField"
269
+ }
270
+ },
271
+ "input-space-partitions": {
272
+ "type": "array",
273
+ "description": "Collection of InputSpacePartition entities",
274
+ "items": {
275
+ "$ref": "#/definitions/InputSpacePartition"
276
+ }
277
+ },
278
+ "partition-values": {
279
+ "type": "array",
280
+ "description": "Collection of PartitionValue entities",
281
+ "items": {
282
+ "$ref": "#/definitions/PartitionValue"
283
+ }
284
+ },
285
+ "partition-dependencies": {
286
+ "type": "array",
287
+ "description": "Collection of PartitionDependency entities",
288
+ "items": {
289
+ "$ref": "#/definitions/PartitionDependency"
290
+ }
291
+ },
292
+ "context-variations": {
293
+ "type": "array",
294
+ "description": "Collection of ContextVariation entities",
295
+ "items": {
296
+ "$ref": "#/definitions/ContextVariation"
297
+ }
298
+ },
299
+ "environment-factors": {
300
+ "type": "array",
301
+ "description": "Collection of EnvironmentFactor entities",
302
+ "items": {
303
+ "$ref": "#/definitions/EnvironmentFactor"
304
+ }
305
+ },
306
+ "outcome-categories": {
307
+ "type": "array",
308
+ "description": "Collection of OutcomeCategory entities",
309
+ "items": {
310
+ "$ref": "#/definitions/OutcomeCategory"
311
+ }
312
+ },
313
+ "coverage-requirements": {
314
+ "type": "array",
315
+ "description": "Collection of CoverageRequirement entities",
316
+ "items": {
317
+ "$ref": "#/definitions/CoverageRequirement"
318
+ }
319
+ },
320
+ "input-partition-selections": {
321
+ "type": "array",
322
+ "description": "Collection of InputPartitionSelection entities",
323
+ "items": {
324
+ "$ref": "#/definitions/InputPartitionSelection"
325
+ }
326
+ },
327
+ "coverage-exclusions": {
328
+ "type": "array",
329
+ "description": "Collection of CoverageExclusion entities",
330
+ "items": {
331
+ "$ref": "#/definitions/CoverageExclusion"
332
+ }
333
+ },
334
+ "test-case-sketches": {
335
+ "type": "array",
336
+ "description": "Collection of TestCaseSketch entities",
337
+ "items": {
338
+ "$ref": "#/definitions/TestCaseSketch"
339
+ }
340
+ },
341
+ "input-selections": {
342
+ "type": "array",
343
+ "description": "Collection of InputSelection entities",
344
+ "items": {
345
+ "$ref": "#/definitions/InputSelection"
346
+ }
347
+ },
348
+ "coverage-summaries": {
349
+ "type": "array",
350
+ "description": "Collection of CoverageSummary entities",
351
+ "items": {
352
+ "$ref": "#/definitions/CoverageSummary"
353
+ }
354
+ },
355
+ "target-coverage-summaries": {
356
+ "type": "array",
357
+ "description": "Collection of TargetCoverageSummary entities",
358
+ "items": {
359
+ "$ref": "#/definitions/TargetCoverageSummary"
360
+ }
361
+ },
362
+ "coverage-gaps": {
363
+ "type": "array",
364
+ "description": "Collection of CoverageGap entities",
365
+ "items": {
366
+ "$ref": "#/definitions/CoverageGap"
367
+ }
368
+ }
369
+ },
370
+ "definitions": {
371
+ "TargetType": {
372
+ "type": "string",
373
+ "enum": [
374
+ "workflow",
375
+ "workflow-step",
376
+ "form",
377
+ "api-operation",
378
+ "data-transform",
379
+ "navigation-path",
380
+ "integration",
381
+ "composite"
382
+ ]
383
+ },
384
+ "Priority": {
385
+ "type": "string",
386
+ "enum": ["critical", "high", "medium", "low"]
387
+ },
388
+ "FieldRelevance": {
389
+ "type": "string",
390
+ "enum": ["primary", "secondary", "contextual"]
391
+ },
392
+ "PresenceRule": {
393
+ "type": "string",
394
+ "enum": ["required", "optional", "conditional"]
395
+ },
396
+ "PartitionCategory": {
397
+ "type": "string",
398
+ "enum": ["typical", "boundary", "invalid", "None", "special"]
399
+ },
400
+ "DependencyEffect": {
401
+ "type": "string",
402
+ "enum": ["requires", "excludes", "enables", "modifies"]
403
+ },
404
+ "ContextType": {
405
+ "type": "string",
406
+ "enum": ["ui-entry", "api-entry", "event-triggered", "scheduled", "integration"]
407
+ },
408
+ "OutcomeType": {
409
+ "type": "string",
410
+ "enum": [
411
+ "success",
412
+ "validation-error",
413
+ "authorization-denied",
414
+ "not-found",
415
+ "conflict",
416
+ "precondition-failed",
417
+ "idempotent-noop",
418
+ "partial-success",
419
+ "error"
420
+ ]
421
+ },
422
+ "CoverageCriteria": {
423
+ "type": "string",
424
+ "enum": [
425
+ "exhaustive",
426
+ "pairwise",
427
+ "each-choice",
428
+ "boundary",
429
+ "risk-based",
430
+ "happy-path",
431
+ "error-path"
432
+ ]
433
+ },
434
+ "SketchStatus": {
435
+ "type": "string",
436
+ "enum": ["planned", "implemented", "automated", "manual", "blocked", "deprecated"]
437
+ },
438
+ "ImplementationFormat": {
439
+ "type": "string",
440
+ "enum": [
441
+ "gherkin",
442
+ "postman",
443
+ "jest",
444
+ "pytest",
445
+ "playwright",
446
+ "cypress",
447
+ "robot",
448
+ "manual",
449
+ "other"
450
+ ]
451
+ },
452
+ "GapSeverity": {
453
+ "type": "string",
454
+ "enum": ["critical", "high", "medium", "low"]
455
+ },
456
+ "TestCoverageModel": {
457
+ "type": "object",
458
+ "description": "Complete test coverage model for application",
459
+ "required": ["id", "name", "version", "application"],
460
+ "properties": {
461
+ "id": {
462
+ "type": "string",
463
+ "format": "uuid",
464
+ "minLength": 1
465
+ },
466
+ "name": {
467
+ "type": "string",
468
+ "minLength": 1
469
+ },
470
+ "version": {
471
+ "type": "string",
472
+ "minLength": 1
473
+ },
474
+ "application": {
475
+ "type": "string",
476
+ "minLength": 1
477
+ },
478
+ "description": {
479
+ "type": "string",
480
+ "minLength": 1
481
+ },
482
+ "coverageTargets": {
483
+ "type": "array",
484
+ "description": "Contains relationship",
485
+ "items": {
486
+ "type": "string"
487
+ }
488
+ },
489
+ "inputSpacePartitions": {
490
+ "type": "array",
491
+ "description": "Contains relationship",
492
+ "items": {
493
+ "type": "string"
494
+ }
495
+ },
496
+ "contextVariations": {
497
+ "type": "array",
498
+ "description": "Contains relationship",
499
+ "items": {
500
+ "type": "string"
501
+ }
502
+ },
503
+ "coverageRequirements": {
504
+ "type": "array",
505
+ "description": "Contains relationship",
506
+ "items": {
507
+ "type": "string"
508
+ }
509
+ },
510
+ "testCaseSketches": {
511
+ "type": "array",
512
+ "description": "Contains relationship",
513
+ "items": {
514
+ "type": "string"
515
+ }
516
+ }
517
+ }
518
+ },
519
+ "TestCoverageTarget": {
520
+ "type": "object",
521
+ "description": "An artifact or functionality that requires test coverage",
522
+ "required": ["id", "name", "targetType"],
523
+ "properties": {
524
+ "id": {
525
+ "type": "string",
526
+ "format": "uuid",
527
+ "minLength": 1
528
+ },
529
+ "name": {
530
+ "type": "string",
531
+ "minLength": 1
532
+ },
533
+ "description": {
534
+ "type": "string",
535
+ "minLength": 1
536
+ },
537
+ "targetType": {
538
+ "$ref": "#/definitions/TargetType"
539
+ },
540
+ "priority": {
541
+ "$ref": "#/definitions/Priority"
542
+ },
543
+ "applicableContexts": {
544
+ "type": "array",
545
+ "description": "Contains relationship",
546
+ "items": {
547
+ "type": "string"
548
+ }
549
+ },
550
+ "inputFields": {
551
+ "type": "array",
552
+ "description": "Contains relationship",
553
+ "items": {
554
+ "type": "string"
555
+ }
556
+ },
557
+ "outcomeCategories": {
558
+ "type": "array",
559
+ "description": "Contains relationship",
560
+ "items": {
561
+ "type": "string"
562
+ }
563
+ },
564
+ "source": {
565
+ "type": "object",
566
+ "description": "Source code reference for the artifact requiring test coverage",
567
+ "properties": {
568
+ "reference": {
569
+ "$ref": "common/source-references.schema.json#/definitions/SourceReference"
570
+ }
571
+ }
572
+ }
573
+ }
574
+ },
575
+ "TargetInputField": {
576
+ "type": "object",
577
+ "description": "Input field associated with a coverage target",
578
+ "required": ["id", "name", "fieldRef", "partitionRef"],
579
+ "properties": {
580
+ "id": {
581
+ "type": "string",
582
+ "format": "uuid",
583
+ "minLength": 1
584
+ },
585
+ "name": {
586
+ "type": "string",
587
+ "minLength": 1
588
+ },
589
+ "fieldRef": {
590
+ "type": "string",
591
+ "minLength": 1
592
+ },
593
+ "partitionRef": {
594
+ "type": "string",
595
+ "minLength": 1
596
+ },
597
+ "description": {
598
+ "type": "string",
599
+ "minLength": 1
600
+ },
601
+ "relevance": {
602
+ "$ref": "#/definitions/FieldRelevance"
603
+ }
604
+ }
605
+ },
606
+ "InputSpacePartition": {
607
+ "type": "object",
608
+ "description": "Partitioning of an input dimension into testable categories",
609
+ "required": ["id", "name", "fieldRef", "presenceRule"],
610
+ "properties": {
611
+ "id": {
612
+ "type": "string",
613
+ "format": "uuid",
614
+ "minLength": 1
615
+ },
616
+ "name": {
617
+ "type": "string",
618
+ "minLength": 1
619
+ },
620
+ "description": {
621
+ "type": "string",
622
+ "minLength": 1
623
+ },
624
+ "fieldRef": {
625
+ "type": "string",
626
+ "minLength": 1
627
+ },
628
+ "presenceRule": {
629
+ "$ref": "#/definitions/PresenceRule"
630
+ },
631
+ "partitions": {
632
+ "type": "array",
633
+ "description": "Contains relationship",
634
+ "items": {
635
+ "type": "string"
636
+ }
637
+ },
638
+ "dependencies": {
639
+ "type": "array",
640
+ "description": "Contains relationship",
641
+ "items": {
642
+ "type": "string"
643
+ }
644
+ }
645
+ }
646
+ },
647
+ "PartitionValue": {
648
+ "type": "object",
649
+ "description": "A specific partition within the input space",
650
+ "required": [
651
+ "name",
652
+ "id",
653
+ "label",
654
+ "constraint",
655
+ "constraintExpression",
656
+ "category",
657
+ "representativeValue"
658
+ ],
659
+ "properties": {
660
+ "name": {
661
+ "type": "string",
662
+ "minLength": 1
663
+ },
664
+ "id": {
665
+ "type": "string",
666
+ "format": "uuid",
667
+ "minLength": 1
668
+ },
669
+ "label": {
670
+ "type": "string",
671
+ "minLength": 1
672
+ },
673
+ "description": {
674
+ "type": "string",
675
+ "minLength": 1
676
+ },
677
+ "constraint": {
678
+ "type": "string",
679
+ "minLength": 1
680
+ },
681
+ "constraintExpression": {
682
+ "type": "string",
683
+ "minLength": 1
684
+ },
685
+ "category": {
686
+ "$ref": "#/definitions/PartitionCategory"
687
+ },
688
+ "representativeValue": {
689
+ "type": "string",
690
+ "minLength": 1
691
+ }
692
+ }
693
+ },
694
+ "PartitionDependency": {
695
+ "type": "object",
696
+ "description": "Constraint between partition values across fields",
697
+ "required": [
698
+ "id",
699
+ "name",
700
+ "dependsOnPartition",
701
+ "dependsOnValue",
702
+ "effect",
703
+ "affectedValues"
704
+ ],
705
+ "properties": {
706
+ "id": {
707
+ "type": "string",
708
+ "format": "uuid",
709
+ "minLength": 1
710
+ },
711
+ "name": {
712
+ "type": "string",
713
+ "minLength": 1
714
+ },
715
+ "dependsOnPartition": {
716
+ "type": "string",
717
+ "minLength": 1
718
+ },
719
+ "dependsOnValue": {
720
+ "type": "string",
721
+ "minLength": 1
722
+ },
723
+ "effect": {
724
+ "$ref": "#/definitions/DependencyEffect"
725
+ },
726
+ "affectedValues": {
727
+ "type": "string",
728
+ "minLength": 1
729
+ },
730
+ "description": {
731
+ "type": "string",
732
+ "minLength": 1
733
+ }
734
+ }
735
+ },
736
+ "ContextVariation": {
737
+ "type": "object",
738
+ "description": "Different context in which functionality can be invoked",
739
+ "required": ["id", "name", "contextType"],
740
+ "properties": {
741
+ "id": {
742
+ "type": "string",
743
+ "format": "uuid",
744
+ "minLength": 1
745
+ },
746
+ "name": {
747
+ "type": "string",
748
+ "minLength": 1
749
+ },
750
+ "description": {
751
+ "type": "string",
752
+ "minLength": 1
753
+ },
754
+ "contextType": {
755
+ "$ref": "#/definitions/ContextType"
756
+ },
757
+ "environmentFactors": {
758
+ "type": "array",
759
+ "description": "Contains relationship",
760
+ "items": {
761
+ "type": "string"
762
+ }
763
+ }
764
+ }
765
+ },
766
+ "EnvironmentFactor": {
767
+ "type": "object",
768
+ "description": "Environmental condition that may affect behavior",
769
+ "required": ["id", "name", "factor", "value"],
770
+ "properties": {
771
+ "id": {
772
+ "type": "string",
773
+ "format": "uuid",
774
+ "minLength": 1
775
+ },
776
+ "name": {
777
+ "type": "string",
778
+ "minLength": 1
779
+ },
780
+ "factor": {
781
+ "type": "string",
782
+ "minLength": 1
783
+ },
784
+ "value": {
785
+ "type": "string",
786
+ "minLength": 1
787
+ },
788
+ "description": {
789
+ "type": "string",
790
+ "minLength": 1
791
+ }
792
+ }
793
+ },
794
+ "OutcomeCategory": {
795
+ "type": "object",
796
+ "description": "Category of expected outcomes (not specific assertions)",
797
+ "required": ["id", "name", "outcomeType", "httpStatusRange"],
798
+ "properties": {
799
+ "id": {
800
+ "type": "string",
801
+ "format": "uuid",
802
+ "minLength": 1
803
+ },
804
+ "name": {
805
+ "type": "string",
806
+ "minLength": 1
807
+ },
808
+ "description": {
809
+ "type": "string",
810
+ "minLength": 1
811
+ },
812
+ "outcomeType": {
813
+ "$ref": "#/definitions/OutcomeType"
814
+ },
815
+ "httpStatusRange": {
816
+ "type": "string",
817
+ "minLength": 1
818
+ }
819
+ }
820
+ },
821
+ "CoverageRequirement": {
822
+ "type": "object",
823
+ "description": "Requirement for test coverage of a target",
824
+ "required": ["id", "name", "coverageCriteria"],
825
+ "properties": {
826
+ "id": {
827
+ "type": "string",
828
+ "format": "uuid",
829
+ "minLength": 1
830
+ },
831
+ "name": {
832
+ "type": "string",
833
+ "minLength": 1
834
+ },
835
+ "description": {
836
+ "type": "string",
837
+ "minLength": 1
838
+ },
839
+ "coverageCriteria": {
840
+ "$ref": "#/definitions/CoverageCriteria"
841
+ },
842
+ "priority": {
843
+ "$ref": "#/definitions/Priority"
844
+ },
845
+ "inputPartitionSelections": {
846
+ "type": "array",
847
+ "description": "Contains relationship",
848
+ "items": {
849
+ "type": "string"
850
+ }
851
+ },
852
+ "contextSelections": {
853
+ "type": "array",
854
+ "description": "Contains relationship",
855
+ "items": {
856
+ "type": "string"
857
+ }
858
+ },
859
+ "outcomeSelections": {
860
+ "type": "array",
861
+ "description": "Contains relationship",
862
+ "items": {
863
+ "type": "string"
864
+ }
865
+ },
866
+ "exclusions": {
867
+ "type": "array",
868
+ "description": "Contains relationship",
869
+ "items": {
870
+ "type": "string"
871
+ }
872
+ }
873
+ }
874
+ },
875
+ "InputPartitionSelection": {
876
+ "type": "object",
877
+ "description": "Selection of partition values to include in coverage",
878
+ "required": [
879
+ "id",
880
+ "name",
881
+ "partitionRef",
882
+ "coverValues",
883
+ "coverAllCategories",
884
+ "excludeValues"
885
+ ],
886
+ "properties": {
887
+ "id": {
888
+ "type": "string",
889
+ "format": "uuid",
890
+ "minLength": 1
891
+ },
892
+ "name": {
893
+ "type": "string",
894
+ "minLength": 1
895
+ },
896
+ "partitionRef": {
897
+ "type": "string",
898
+ "minLength": 1
899
+ },
900
+ "coverValues": {
901
+ "type": "string",
902
+ "minLength": 1
903
+ },
904
+ "coverAllCategories": {
905
+ "type": "boolean"
906
+ },
907
+ "excludeValues": {
908
+ "type": "string",
909
+ "minLength": 1
910
+ }
911
+ }
912
+ },
913
+ "CoverageExclusion": {
914
+ "type": "object",
915
+ "description": "Explicit exclusion from coverage with justification",
916
+ "required": ["id", "name", "description", "reason", "riskAccepted", "approvedBy"],
917
+ "properties": {
918
+ "id": {
919
+ "type": "string",
920
+ "format": "uuid",
921
+ "minLength": 1
922
+ },
923
+ "name": {
924
+ "type": "string",
925
+ "minLength": 1
926
+ },
927
+ "description": {
928
+ "type": "string",
929
+ "minLength": 1
930
+ },
931
+ "reason": {
932
+ "type": "string",
933
+ "minLength": 1
934
+ },
935
+ "riskAccepted": {
936
+ "type": "boolean"
937
+ },
938
+ "approvedBy": {
939
+ "type": "string",
940
+ "minLength": 1
941
+ }
942
+ }
943
+ },
944
+ "TestCaseSketch": {
945
+ "type": "object",
946
+ "description": "Abstract test case selecting specific partition values",
947
+ "required": ["id", "name", "status"],
948
+ "properties": {
949
+ "id": {
950
+ "type": "string",
951
+ "format": "uuid",
952
+ "minLength": 1
953
+ },
954
+ "name": {
955
+ "type": "string",
956
+ "minLength": 1
957
+ },
958
+ "description": {
959
+ "type": "string",
960
+ "minLength": 1
961
+ },
962
+ "status": {
963
+ "$ref": "#/definitions/SketchStatus"
964
+ },
965
+ "inputSelections": {
966
+ "type": "array",
967
+ "description": "Contains relationship",
968
+ "items": {
969
+ "type": "string"
970
+ }
971
+ },
972
+ "source": {
973
+ "type": "object",
974
+ "description": "Source code reference to the test case implementation",
975
+ "properties": {
976
+ "reference": {
977
+ "$ref": "common/source-references.schema.json#/definitions/SourceReference"
978
+ }
979
+ }
980
+ }
981
+ }
982
+ },
983
+ "InputSelection": {
984
+ "type": "object",
985
+ "description": "Specific partition value selected for a test case",
986
+ "required": ["id", "name", "partitionRef", "selectedValue", "concreteValue", "valueSource"],
987
+ "properties": {
988
+ "id": {
989
+ "type": "string",
990
+ "format": "uuid",
991
+ "minLength": 1
992
+ },
993
+ "name": {
994
+ "type": "string",
995
+ "minLength": 1
996
+ },
997
+ "partitionRef": {
998
+ "type": "string",
999
+ "minLength": 1
1000
+ },
1001
+ "selectedValue": {
1002
+ "type": "string",
1003
+ "minLength": 1
1004
+ },
1005
+ "concreteValue": {
1006
+ "type": "string",
1007
+ "minLength": 1
1008
+ },
1009
+ "valueSource": {
1010
+ "type": "string",
1011
+ "minLength": 1
1012
+ }
1013
+ }
1014
+ },
1015
+ "CoverageSummary": {
1016
+ "type": "object",
1017
+ "description": "Summary of coverage status (can be computed or declared)",
1018
+ "required": ["totalTargets", "totalRequirements", "totalSketches"],
1019
+ "properties": {
1020
+ "generatedAt": {
1021
+ "type": "string",
1022
+ "minLength": 1
1023
+ },
1024
+ "totalTargets": {
1025
+ "type": "integer"
1026
+ },
1027
+ "totalRequirements": {
1028
+ "type": "integer"
1029
+ },
1030
+ "totalSketches": {
1031
+ "type": "integer"
1032
+ },
1033
+ "targetSummaries": {
1034
+ "type": "array",
1035
+ "description": "Contains relationship",
1036
+ "items": {
1037
+ "type": "string"
1038
+ }
1039
+ },
1040
+ "gaps": {
1041
+ "type": "array",
1042
+ "description": "Contains relationship",
1043
+ "items": {
1044
+ "type": "string"
1045
+ }
1046
+ }
1047
+ }
1048
+ },
1049
+ "TargetCoverageSummary": {
1050
+ "type": "object",
1051
+ "description": "Coverage metrics summary for a single test coverage target",
1052
+ "required": ["targetRef", "sketchCount", "implementedCount", "automatedCount"],
1053
+ "properties": {
1054
+ "targetRef": {
1055
+ "type": "string",
1056
+ "minLength": 1
1057
+ },
1058
+ "sketchCount": {
1059
+ "type": "integer"
1060
+ },
1061
+ "implementedCount": {
1062
+ "type": "integer"
1063
+ },
1064
+ "automatedCount": {
1065
+ "type": "integer"
1066
+ },
1067
+ "coveragePercentage": {
1068
+ "type": "number"
1069
+ }
1070
+ }
1071
+ },
1072
+ "CoverageGap": {
1073
+ "type": "object",
1074
+ "description": "Identified gap in test coverage requiring attention",
1075
+ "required": ["description", "severity", "affectedRequirements"],
1076
+ "properties": {
1077
+ "description": {
1078
+ "type": "string",
1079
+ "minLength": 1
1080
+ },
1081
+ "severity": {
1082
+ "$ref": "#/definitions/GapSeverity"
1083
+ },
1084
+ "affectedRequirements": {
1085
+ "type": "string",
1086
+ "minLength": 1
1087
+ }
1088
+ }
1089
+ }
1090
+ }
1091
+ }