@dzhechkov/keysarium 1.7.19 → 1.7.20

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 (50) hide show
  1. package/.dz-manifest.json +167 -27
  2. package/README.md +2 -2
  3. package/package.json +1 -1
  4. package/sbom.json +386 -36
  5. package/templates/.claude/skills/feature-adr/SKILL.md +9 -7
  6. package/templates/.claude/skills/feature-adr/modules/09-fleet-qe.md +1 -1
  7. package/templates/.claude/skills/feature-adr/references/agentic-qe/README.md +11 -9
  8. package/templates/.claude/skills/feature-adr/references/agentic-qe/UPSTREAM-MANIFEST.json +290 -70
  9. package/templates/.claude/skills/feature-adr/references/agentic-qe/{chaos-engineering-resilience.md → qe-ref-chaos-engineering-resilience/REFERENCE.md} +13 -0
  10. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
  11. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/schemas/output.json +1205 -0
  12. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/scripts/validate-config.json +47 -0
  13. package/templates/.claude/skills/feature-adr/references/agentic-qe/{mutation-testing.md → qe-ref-mutation-testing/REFERENCE.md} +39 -1
  14. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/config.json +14 -0
  15. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/evals/mutation-testing.yaml +651 -0
  16. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/references/mutation-operators.md +38 -0
  17. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/schemas/output.json +707 -0
  18. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/scripts/validate-config.json +44 -0
  19. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/test-data/sample-output.json +295 -0
  20. package/templates/.claude/skills/feature-adr/references/agentic-qe/{performance-testing.md → qe-ref-performance-testing/REFERENCE.md} +35 -1
  21. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/config.json +18 -0
  22. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/evals/performance-testing.yaml +771 -0
  23. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/references/k6-patterns.md +72 -0
  24. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/schemas/output.json +1184 -0
  25. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/scripts/validate-config.json +55 -0
  26. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/REFERENCE.md +222 -0
  27. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/evals/qcsd-production-swarm.yaml +246 -0
  28. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/schemas/output.json +505 -0
  29. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/scripts/validate-config.json +25 -0
  30. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/01-flag-detection.md +202 -0
  31. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/02-core-agents.md +428 -0
  32. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/03-batch1-results.md +101 -0
  33. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/04-conditional-agents.md +125 -0
  34. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/05-decision-synthesis.md +136 -0
  35. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/06-report-generation.md +181 -0
  36. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/07-learning-persistence.md +157 -0
  37. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/08-feedback-loop.md +122 -0
  38. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/09-final-output.md +140 -0
  39. package/templates/.claude/skills/feature-adr/references/agentic-qe/{security-testing.md → qe-ref-security-testing/REFERENCE.md} +44 -1
  40. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/config.json +13 -0
  41. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/evals/security-testing.yaml +789 -0
  42. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/references/compliance-agent-commands.md +131 -0
  43. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/references/owasp-top-10.md +66 -0
  44. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/schemas/output.json +879 -0
  45. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/scripts/validate-config.json +45 -0
  46. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/templates/security-report.md +44 -0
  47. package/templates/.claude/skills/feature-adr/references/agentic-qe/{tdd-london-chicago.md → qe-ref-tdd-london-chicago/REFERENCE.md} +21 -1
  48. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-tdd-london-chicago/schemas/output.json +444 -0
  49. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-tdd-london-chicago/scripts/validate-config.json +43 -0
  50. package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-production-swarm.md +0 -108
@@ -0,0 +1,707 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://agentic-qe.dev/schemas/mutation-testing-output.json",
4
+ "title": "Mutation Testing Skill Output Schema",
5
+ "description": "Schema for mutation testing skill output validation. Validates mutation scores, mutant details, surviving mutants, and test improvement suggestions.",
6
+ "type": "object",
7
+ "required": ["skillName", "version", "timestamp", "status", "trustTier", "output"],
8
+ "properties": {
9
+ "skillName": {
10
+ "type": "string",
11
+ "const": "mutation-testing",
12
+ "description": "Skill name must be mutation-testing"
13
+ },
14
+ "version": {
15
+ "type": "string",
16
+ "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9]+)?$",
17
+ "description": "Semantic version of the skill"
18
+ },
19
+ "timestamp": {
20
+ "type": "string",
21
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}",
22
+ "description": "ISO 8601 timestamp of output generation"
23
+ },
24
+ "status": {
25
+ "type": "string",
26
+ "enum": ["success", "partial", "failed", "skipped"],
27
+ "description": "Overall execution status"
28
+ },
29
+ "trustTier": {
30
+ "type": "integer",
31
+ "minimum": 0,
32
+ "maximum": 3,
33
+ "description": "Trust tier (0-3)"
34
+ },
35
+ "output": {
36
+ "type": "object",
37
+ "required": ["summary", "mutationScore", "mutants"],
38
+ "properties": {
39
+ "summary": {
40
+ "type": "string",
41
+ "minLength": 10,
42
+ "maxLength": 2000,
43
+ "description": "Human-readable summary of mutation testing results"
44
+ },
45
+ "mutationScore": {
46
+ "$ref": "#/$defs/mutationScore",
47
+ "description": "Overall mutation score and breakdown"
48
+ },
49
+ "mutants": {
50
+ "$ref": "#/$defs/mutantsSummary",
51
+ "description": "Summary of mutants generated and their statuses"
52
+ },
53
+ "survivors": {
54
+ "type": "array",
55
+ "items": {
56
+ "$ref": "#/$defs/survivingMutant"
57
+ },
58
+ "maxItems": 500,
59
+ "description": "List of surviving mutants requiring attention"
60
+ },
61
+ "operatorBreakdown": {
62
+ "type": "array",
63
+ "items": {
64
+ "$ref": "#/$defs/operatorStats"
65
+ },
66
+ "description": "Mutation score breakdown by operator type"
67
+ },
68
+ "fileBreakdown": {
69
+ "type": "array",
70
+ "items": {
71
+ "$ref": "#/$defs/fileStats"
72
+ },
73
+ "description": "Mutation score breakdown by source file"
74
+ },
75
+ "weakTests": {
76
+ "type": "array",
77
+ "items": {
78
+ "$ref": "#/$defs/weakTest"
79
+ },
80
+ "maxItems": 100,
81
+ "description": "Tests identified as weak based on mutation survival"
82
+ },
83
+ "recommendations": {
84
+ "type": "array",
85
+ "items": {
86
+ "$ref": "#/$defs/recommendation"
87
+ },
88
+ "maxItems": 50,
89
+ "description": "Test improvement recommendations"
90
+ },
91
+ "metrics": {
92
+ "$ref": "#/$defs/metrics",
93
+ "description": "Additional quantitative metrics"
94
+ },
95
+ "artifacts": {
96
+ "type": "array",
97
+ "items": {
98
+ "$ref": "#/$defs/artifact"
99
+ },
100
+ "maxItems": 20,
101
+ "description": "Generated artifacts (reports, logs)"
102
+ },
103
+ "testSuiteEffectiveness": {
104
+ "$ref": "#/$defs/testSuiteEffectiveness",
105
+ "description": "Test suite effectiveness metrics"
106
+ }
107
+ }
108
+ },
109
+ "metadata": {
110
+ "type": "object",
111
+ "properties": {
112
+ "executionTimeMs": {
113
+ "type": "integer",
114
+ "minimum": 0,
115
+ "maximum": 3600000,
116
+ "description": "Execution time in milliseconds"
117
+ },
118
+ "toolsUsed": {
119
+ "type": "array",
120
+ "items": {
121
+ "type": "string",
122
+ "enum": ["stryker", "pitest", "mutmut", "mull", "custom"]
123
+ },
124
+ "description": "Mutation testing tools used"
125
+ },
126
+ "agentId": {
127
+ "type": "string",
128
+ "pattern": "^qe-[a-z][a-z0-9-]*$",
129
+ "description": "ID of the agent that executed the skill"
130
+ },
131
+ "modelUsed": {
132
+ "type": "string",
133
+ "description": "LLM model used for analysis"
134
+ },
135
+ "inputHash": {
136
+ "type": "string",
137
+ "description": "Hash of input for caching"
138
+ },
139
+ "parentTaskId": {
140
+ "type": "string",
141
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
142
+ "description": "Parent task UUID if part of swarm"
143
+ },
144
+ "targetPath": {
145
+ "type": "string",
146
+ "description": "Path to source code under test"
147
+ },
148
+ "testPath": {
149
+ "type": "string",
150
+ "description": "Path to test suite"
151
+ },
152
+ "incremental": {
153
+ "type": "boolean",
154
+ "description": "Whether this was incremental mutation testing"
155
+ },
156
+ "changedLinesOnly": {
157
+ "type": "boolean",
158
+ "description": "Whether mutations were limited to changed lines"
159
+ }
160
+ }
161
+ },
162
+ "validation": {
163
+ "type": "object",
164
+ "properties": {
165
+ "schemaValid": {
166
+ "type": "boolean",
167
+ "description": "Whether output passes JSON schema validation"
168
+ },
169
+ "contentValid": {
170
+ "type": "boolean",
171
+ "description": "Whether output passes content validation"
172
+ },
173
+ "confidence": {
174
+ "type": "number",
175
+ "minimum": 0,
176
+ "maximum": 1,
177
+ "description": "Confidence score for output correctness"
178
+ },
179
+ "warnings": {
180
+ "type": "array",
181
+ "items": {
182
+ "type": "string",
183
+ "maxLength": 500
184
+ },
185
+ "maxItems": 20,
186
+ "description": "Validation warnings"
187
+ },
188
+ "errors": {
189
+ "type": "array",
190
+ "items": {
191
+ "type": "string",
192
+ "maxLength": 500
193
+ },
194
+ "maxItems": 20,
195
+ "description": "Validation errors"
196
+ }
197
+ }
198
+ },
199
+ "learning": {
200
+ "type": "object",
201
+ "properties": {
202
+ "patternsDetected": {
203
+ "type": "array",
204
+ "items": {
205
+ "type": "string"
206
+ },
207
+ "description": "Mutation patterns detected"
208
+ },
209
+ "reward": {
210
+ "type": "number",
211
+ "minimum": 0,
212
+ "maximum": 1,
213
+ "description": "Reward signal for learning"
214
+ },
215
+ "feedbackLoop": {
216
+ "type": "object",
217
+ "properties": {
218
+ "previousRunId": {
219
+ "type": "string",
220
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
221
+ },
222
+ "improvement": {
223
+ "type": "number",
224
+ "minimum": -1,
225
+ "maximum": 1
226
+ }
227
+ }
228
+ }
229
+ }
230
+ }
231
+ },
232
+ "$defs": {
233
+ "mutationScore": {
234
+ "type": "object",
235
+ "required": ["score", "killed", "survived", "total"],
236
+ "properties": {
237
+ "score": {
238
+ "type": "number",
239
+ "minimum": 0,
240
+ "maximum": 100,
241
+ "description": "Mutation score as percentage (0-100)"
242
+ },
243
+ "killed": {
244
+ "type": "integer",
245
+ "minimum": 0,
246
+ "description": "Number of mutants killed by tests"
247
+ },
248
+ "survived": {
249
+ "type": "integer",
250
+ "minimum": 0,
251
+ "description": "Number of mutants that survived"
252
+ },
253
+ "timeout": {
254
+ "type": "integer",
255
+ "minimum": 0,
256
+ "description": "Number of mutants that caused timeout"
257
+ },
258
+ "noCoverage": {
259
+ "type": "integer",
260
+ "minimum": 0,
261
+ "description": "Number of mutants with no test coverage"
262
+ },
263
+ "equivalent": {
264
+ "type": "integer",
265
+ "minimum": 0,
266
+ "description": "Number of equivalent mutants detected"
267
+ },
268
+ "total": {
269
+ "type": "integer",
270
+ "minimum": 0,
271
+ "description": "Total number of mutants generated"
272
+ },
273
+ "grade": {
274
+ "type": "string",
275
+ "pattern": "^[A-F][+-]?$",
276
+ "description": "Letter grade based on score"
277
+ },
278
+ "threshold": {
279
+ "type": "object",
280
+ "properties": {
281
+ "target": {
282
+ "type": "number",
283
+ "minimum": 0,
284
+ "maximum": 100,
285
+ "description": "Target mutation score"
286
+ },
287
+ "met": {
288
+ "type": "boolean",
289
+ "description": "Whether target was met"
290
+ }
291
+ }
292
+ },
293
+ "trend": {
294
+ "type": "string",
295
+ "enum": ["improving", "stable", "declining", "unknown"],
296
+ "description": "Trend compared to previous runs"
297
+ }
298
+ }
299
+ },
300
+ "mutantsSummary": {
301
+ "type": "object",
302
+ "required": ["total"],
303
+ "properties": {
304
+ "total": {
305
+ "type": "integer",
306
+ "minimum": 0,
307
+ "description": "Total mutants generated"
308
+ },
309
+ "byStatus": {
310
+ "type": "object",
311
+ "properties": {
312
+ "killed": { "type": "integer", "minimum": 0 },
313
+ "survived": { "type": "integer", "minimum": 0 },
314
+ "timeout": { "type": "integer", "minimum": 0 },
315
+ "noCoverage": { "type": "integer", "minimum": 0 },
316
+ "equivalent": { "type": "integer", "minimum": 0 },
317
+ "runtimeError": { "type": "integer", "minimum": 0 },
318
+ "compileError": { "type": "integer", "minimum": 0 }
319
+ }
320
+ },
321
+ "byOperator": {
322
+ "type": "object",
323
+ "additionalProperties": {
324
+ "type": "integer",
325
+ "minimum": 0
326
+ },
327
+ "description": "Count of mutants by operator type"
328
+ }
329
+ }
330
+ },
331
+ "survivingMutant": {
332
+ "type": "object",
333
+ "required": ["id", "operator", "location", "original", "mutated"],
334
+ "properties": {
335
+ "id": {
336
+ "type": "string",
337
+ "pattern": "^MUT-\\d{3,6}$",
338
+ "description": "Unique mutant identifier"
339
+ },
340
+ "operator": {
341
+ "type": "string",
342
+ "enum": [
343
+ "AOR", "AOD", "ROR", "LCR", "LOD", "COR", "COD",
344
+ "LVR", "RVR", "SDR", "UOR", "EMR", "ICR", "BCR",
345
+ "arithmetic", "relational", "logical", "conditional",
346
+ "return", "statement", "literal", "boundary", "other"
347
+ ],
348
+ "description": "Mutation operator used"
349
+ },
350
+ "operatorDescription": {
351
+ "type": "string",
352
+ "maxLength": 200,
353
+ "description": "Human-readable description of operator"
354
+ },
355
+ "location": {
356
+ "$ref": "#/$defs/location",
357
+ "description": "Location of the mutation"
358
+ },
359
+ "original": {
360
+ "type": "string",
361
+ "maxLength": 1000,
362
+ "description": "Original code before mutation"
363
+ },
364
+ "mutated": {
365
+ "type": "string",
366
+ "maxLength": 1000,
367
+ "description": "Mutated code"
368
+ },
369
+ "impact": {
370
+ "type": "string",
371
+ "enum": ["critical", "high", "medium", "low"],
372
+ "description": "Potential impact of this mutation going undetected"
373
+ },
374
+ "impactDescription": {
375
+ "type": "string",
376
+ "maxLength": 500,
377
+ "description": "Description of potential impact"
378
+ },
379
+ "suggestedTest": {
380
+ "type": "string",
381
+ "maxLength": 2000,
382
+ "description": "Suggested test to kill this mutant"
383
+ },
384
+ "relatedTests": {
385
+ "type": "array",
386
+ "items": {
387
+ "type": "string"
388
+ },
389
+ "description": "Tests that cover but don't kill this mutant"
390
+ },
391
+ "equivalentSuspect": {
392
+ "type": "boolean",
393
+ "description": "Whether this might be an equivalent mutant"
394
+ }
395
+ }
396
+ },
397
+ "operatorStats": {
398
+ "type": "object",
399
+ "required": ["operator", "total", "killed", "score"],
400
+ "properties": {
401
+ "operator": {
402
+ "type": "string",
403
+ "description": "Mutation operator name"
404
+ },
405
+ "operatorCategory": {
406
+ "type": "string",
407
+ "enum": ["arithmetic", "relational", "logical", "conditional", "literal", "return", "statement", "other"],
408
+ "description": "Operator category"
409
+ },
410
+ "total": {
411
+ "type": "integer",
412
+ "minimum": 0,
413
+ "description": "Total mutants for this operator"
414
+ },
415
+ "killed": {
416
+ "type": "integer",
417
+ "minimum": 0,
418
+ "description": "Mutants killed"
419
+ },
420
+ "survived": {
421
+ "type": "integer",
422
+ "minimum": 0,
423
+ "description": "Mutants survived"
424
+ },
425
+ "score": {
426
+ "type": "number",
427
+ "minimum": 0,
428
+ "maximum": 100,
429
+ "description": "Score for this operator"
430
+ }
431
+ }
432
+ },
433
+ "fileStats": {
434
+ "type": "object",
435
+ "required": ["file", "total", "killed", "score"],
436
+ "properties": {
437
+ "file": {
438
+ "type": "string",
439
+ "description": "Source file path"
440
+ },
441
+ "total": {
442
+ "type": "integer",
443
+ "minimum": 0
444
+ },
445
+ "killed": {
446
+ "type": "integer",
447
+ "minimum": 0
448
+ },
449
+ "survived": {
450
+ "type": "integer",
451
+ "minimum": 0
452
+ },
453
+ "score": {
454
+ "type": "number",
455
+ "minimum": 0,
456
+ "maximum": 100
457
+ },
458
+ "priority": {
459
+ "type": "string",
460
+ "enum": ["critical", "high", "medium", "low"],
461
+ "description": "Priority for improvement"
462
+ }
463
+ }
464
+ },
465
+ "weakTest": {
466
+ "type": "object",
467
+ "required": ["testFile", "mutantsNotKilled"],
468
+ "properties": {
469
+ "testFile": {
470
+ "type": "string",
471
+ "description": "Test file path"
472
+ },
473
+ "testName": {
474
+ "type": "string",
475
+ "description": "Specific test name if applicable"
476
+ },
477
+ "mutantsNotKilled": {
478
+ "type": "integer",
479
+ "minimum": 1,
480
+ "description": "Number of mutants this test fails to kill"
481
+ },
482
+ "priority": {
483
+ "type": "string",
484
+ "enum": ["critical", "high", "medium", "low"],
485
+ "description": "Priority for improvement"
486
+ },
487
+ "reason": {
488
+ "type": "string",
489
+ "maxLength": 500,
490
+ "description": "Reason why test is weak"
491
+ },
492
+ "suggestions": {
493
+ "type": "array",
494
+ "items": {
495
+ "type": "string"
496
+ },
497
+ "description": "Suggestions to improve this test"
498
+ }
499
+ }
500
+ },
501
+ "recommendation": {
502
+ "type": "object",
503
+ "required": ["id", "title", "priority"],
504
+ "properties": {
505
+ "id": {
506
+ "type": "string",
507
+ "pattern": "^REC-\\d{3,6}$",
508
+ "description": "Unique recommendation identifier"
509
+ },
510
+ "title": {
511
+ "type": "string",
512
+ "minLength": 5,
513
+ "maxLength": 200,
514
+ "description": "Recommendation title"
515
+ },
516
+ "description": {
517
+ "type": "string",
518
+ "maxLength": 2000,
519
+ "description": "Detailed recommendation"
520
+ },
521
+ "priority": {
522
+ "type": "string",
523
+ "enum": ["critical", "high", "medium", "low"],
524
+ "description": "Priority level"
525
+ },
526
+ "effort": {
527
+ "type": "string",
528
+ "enum": ["trivial", "low", "medium", "high", "major"],
529
+ "description": "Estimated effort"
530
+ },
531
+ "impact": {
532
+ "type": "integer",
533
+ "minimum": 1,
534
+ "maximum": 10,
535
+ "description": "Expected impact score"
536
+ },
537
+ "relatedMutants": {
538
+ "type": "array",
539
+ "items": {
540
+ "type": "string",
541
+ "pattern": "^MUT-\\d{3,6}$"
542
+ },
543
+ "description": "IDs of related surviving mutants"
544
+ },
545
+ "codeExample": {
546
+ "type": "string",
547
+ "maxLength": 5000,
548
+ "description": "Example test code"
549
+ },
550
+ "targetFile": {
551
+ "type": "string",
552
+ "description": "File to add/modify tests in"
553
+ }
554
+ }
555
+ },
556
+ "metrics": {
557
+ "type": "object",
558
+ "properties": {
559
+ "coverageCorrelation": {
560
+ "type": "number",
561
+ "minimum": 0,
562
+ "maximum": 1,
563
+ "description": "Correlation between coverage and mutation score"
564
+ },
565
+ "assertionDensity": {
566
+ "type": "number",
567
+ "minimum": 0,
568
+ "description": "Average assertions per test"
569
+ },
570
+ "testEfficiency": {
571
+ "type": "number",
572
+ "minimum": 0,
573
+ "maximum": 100,
574
+ "description": "Percentage of tests that kill at least one mutant"
575
+ },
576
+ "avgMutantsPerFile": {
577
+ "type": "number",
578
+ "minimum": 0,
579
+ "description": "Average mutants per source file"
580
+ },
581
+ "avgTimePerMutant": {
582
+ "type": "integer",
583
+ "minimum": 0,
584
+ "description": "Average time to test each mutant (ms)"
585
+ },
586
+ "parallelWorkers": {
587
+ "type": "integer",
588
+ "minimum": 1,
589
+ "description": "Number of parallel workers used"
590
+ },
591
+ "custom": {
592
+ "type": "object",
593
+ "additionalProperties": true,
594
+ "description": "Custom metrics"
595
+ }
596
+ }
597
+ },
598
+ "testSuiteEffectiveness": {
599
+ "type": "object",
600
+ "properties": {
601
+ "overallRating": {
602
+ "type": "string",
603
+ "enum": ["excellent", "good", "fair", "poor"],
604
+ "description": "Overall test suite effectiveness rating"
605
+ },
606
+ "strengthAreas": {
607
+ "type": "array",
608
+ "items": {
609
+ "type": "string"
610
+ },
611
+ "description": "Areas where tests are strong"
612
+ },
613
+ "weaknessAreas": {
614
+ "type": "array",
615
+ "items": {
616
+ "type": "string"
617
+ },
618
+ "description": "Areas needing improvement"
619
+ },
620
+ "boundaryTesting": {
621
+ "type": "number",
622
+ "minimum": 0,
623
+ "maximum": 100,
624
+ "description": "Score for boundary value testing"
625
+ },
626
+ "conditionCoverage": {
627
+ "type": "number",
628
+ "minimum": 0,
629
+ "maximum": 100,
630
+ "description": "Score for condition/decision coverage"
631
+ },
632
+ "errorHandling": {
633
+ "type": "number",
634
+ "minimum": 0,
635
+ "maximum": 100,
636
+ "description": "Score for error handling testing"
637
+ }
638
+ }
639
+ },
640
+ "artifact": {
641
+ "type": "object",
642
+ "required": ["type", "path"],
643
+ "properties": {
644
+ "type": {
645
+ "type": "string",
646
+ "enum": ["report", "data", "log", "coverage", "html", "json"],
647
+ "description": "Artifact type"
648
+ },
649
+ "path": {
650
+ "type": "string",
651
+ "maxLength": 500,
652
+ "description": "Path to artifact"
653
+ },
654
+ "format": {
655
+ "type": "string",
656
+ "enum": ["json", "html", "md", "txt", "xml", "csv"],
657
+ "description": "Artifact format"
658
+ },
659
+ "description": {
660
+ "type": "string",
661
+ "maxLength": 500,
662
+ "description": "Artifact description"
663
+ },
664
+ "sizeBytes": {
665
+ "type": "integer",
666
+ "minimum": 0,
667
+ "description": "File size in bytes"
668
+ }
669
+ }
670
+ },
671
+ "location": {
672
+ "type": "object",
673
+ "required": ["file", "line"],
674
+ "properties": {
675
+ "file": {
676
+ "type": "string",
677
+ "maxLength": 500,
678
+ "description": "File path"
679
+ },
680
+ "line": {
681
+ "type": "integer",
682
+ "minimum": 1,
683
+ "description": "Line number"
684
+ },
685
+ "column": {
686
+ "type": "integer",
687
+ "minimum": 1,
688
+ "description": "Column number"
689
+ },
690
+ "endLine": {
691
+ "type": "integer",
692
+ "minimum": 1,
693
+ "description": "End line for multi-line mutations"
694
+ },
695
+ "endColumn": {
696
+ "type": "integer",
697
+ "minimum": 1,
698
+ "description": "End column"
699
+ },
700
+ "function": {
701
+ "type": "string",
702
+ "description": "Function name containing the mutation"
703
+ }
704
+ }
705
+ }
706
+ }
707
+ }