@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.
- package/.dz-manifest.json +167 -27
- package/README.md +2 -2
- package/package.json +1 -1
- package/sbom.json +386 -36
- package/templates/.claude/skills/feature-adr/SKILL.md +9 -7
- package/templates/.claude/skills/feature-adr/modules/09-fleet-qe.md +1 -1
- package/templates/.claude/skills/feature-adr/references/agentic-qe/README.md +11 -9
- package/templates/.claude/skills/feature-adr/references/agentic-qe/UPSTREAM-MANIFEST.json +290 -70
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{chaos-engineering-resilience.md → qe-ref-chaos-engineering-resilience/REFERENCE.md} +13 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/schemas/output.json +1205 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/scripts/validate-config.json +47 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{mutation-testing.md → qe-ref-mutation-testing/REFERENCE.md} +39 -1
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/config.json +14 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/evals/mutation-testing.yaml +651 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/references/mutation-operators.md +38 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/schemas/output.json +707 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/scripts/validate-config.json +44 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/test-data/sample-output.json +295 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{performance-testing.md → qe-ref-performance-testing/REFERENCE.md} +35 -1
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/config.json +18 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/evals/performance-testing.yaml +771 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/references/k6-patterns.md +72 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/schemas/output.json +1184 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/scripts/validate-config.json +55 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/REFERENCE.md +222 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/evals/qcsd-production-swarm.yaml +246 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/schemas/output.json +505 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/scripts/validate-config.json +25 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/01-flag-detection.md +202 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/02-core-agents.md +428 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/03-batch1-results.md +101 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/04-conditional-agents.md +125 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/05-decision-synthesis.md +136 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/06-report-generation.md +181 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/07-learning-persistence.md +157 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/08-feedback-loop.md +122 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/09-final-output.md +140 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{security-testing.md → qe-ref-security-testing/REFERENCE.md} +44 -1
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/config.json +13 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/evals/security-testing.yaml +789 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/references/compliance-agent-commands.md +131 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/references/owasp-top-10.md +66 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/schemas/output.json +879 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/scripts/validate-config.json +45 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/templates/security-report.md +44 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/{tdd-london-chicago.md → qe-ref-tdd-london-chicago/REFERENCE.md} +21 -1
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-tdd-london-chicago/schemas/output.json +444 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-tdd-london-chicago/scripts/validate-config.json +43 -0
- package/templates/.claude/skills/feature-adr/references/agentic-qe/qcsd-production-swarm.md +0 -108
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skillName": "mutation-testing",
|
|
3
|
+
"skillVersion": "1.0.0",
|
|
4
|
+
"requiredTools": [
|
|
5
|
+
"jq"
|
|
6
|
+
],
|
|
7
|
+
"optionalTools": [
|
|
8
|
+
"stryker",
|
|
9
|
+
"pitest",
|
|
10
|
+
"mutmut",
|
|
11
|
+
"ajv",
|
|
12
|
+
"jsonschema",
|
|
13
|
+
"python3"
|
|
14
|
+
],
|
|
15
|
+
"schemaPath": "schemas/output.json",
|
|
16
|
+
"requiredFields": [
|
|
17
|
+
"skillName",
|
|
18
|
+
"status",
|
|
19
|
+
"output",
|
|
20
|
+
"output.mutationScore",
|
|
21
|
+
"output.mutants"
|
|
22
|
+
],
|
|
23
|
+
"requiredNonEmptyFields": [
|
|
24
|
+
"output.summary"
|
|
25
|
+
],
|
|
26
|
+
"mustContainTerms": [
|
|
27
|
+
"mutation",
|
|
28
|
+
"mutant",
|
|
29
|
+
"killed"
|
|
30
|
+
],
|
|
31
|
+
"mustNotContainTerms": [
|
|
32
|
+
"TODO",
|
|
33
|
+
"placeholder",
|
|
34
|
+
"undefined mutation score"
|
|
35
|
+
],
|
|
36
|
+
"enumValidations": {
|
|
37
|
+
".status": [
|
|
38
|
+
"success",
|
|
39
|
+
"partial",
|
|
40
|
+
"failed",
|
|
41
|
+
"skipped"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skillName": "mutation-testing",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"timestamp": "2026-02-02T12:00:00Z",
|
|
5
|
+
"status": "success",
|
|
6
|
+
"trustTier": 3,
|
|
7
|
+
"output": {
|
|
8
|
+
"summary": "Mutation testing completed for src/auth module. Generated 150 mutants across 8 files. Test suite killed 127 mutants (84.7% mutation score). Identified 5 weak tests requiring boundary value improvements.",
|
|
9
|
+
"mutationScore": {
|
|
10
|
+
"score": 84.67,
|
|
11
|
+
"killed": 127,
|
|
12
|
+
"survived": 18,
|
|
13
|
+
"timeout": 3,
|
|
14
|
+
"noCoverage": 1,
|
|
15
|
+
"equivalent": 1,
|
|
16
|
+
"total": 150,
|
|
17
|
+
"grade": "B",
|
|
18
|
+
"threshold": {
|
|
19
|
+
"target": 80,
|
|
20
|
+
"met": true
|
|
21
|
+
},
|
|
22
|
+
"trend": "improving"
|
|
23
|
+
},
|
|
24
|
+
"mutants": {
|
|
25
|
+
"total": 150,
|
|
26
|
+
"byStatus": {
|
|
27
|
+
"killed": 127,
|
|
28
|
+
"survived": 18,
|
|
29
|
+
"timeout": 3,
|
|
30
|
+
"noCoverage": 1,
|
|
31
|
+
"equivalent": 1,
|
|
32
|
+
"runtimeError": 0,
|
|
33
|
+
"compileError": 0
|
|
34
|
+
},
|
|
35
|
+
"byOperator": {
|
|
36
|
+
"AOR": 25,
|
|
37
|
+
"ROR": 45,
|
|
38
|
+
"LCR": 30,
|
|
39
|
+
"COR": 28,
|
|
40
|
+
"RVR": 22
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"survivors": [
|
|
44
|
+
{
|
|
45
|
+
"id": "MUT-001",
|
|
46
|
+
"operator": "ROR",
|
|
47
|
+
"operatorDescription": "Relational Operator Replacement (>= to >)",
|
|
48
|
+
"location": {
|
|
49
|
+
"file": "src/auth/validator.ts",
|
|
50
|
+
"line": 45,
|
|
51
|
+
"column": 12,
|
|
52
|
+
"function": "validateAge"
|
|
53
|
+
},
|
|
54
|
+
"original": "if (age >= 18)",
|
|
55
|
+
"mutated": "if (age > 18)",
|
|
56
|
+
"impact": "high",
|
|
57
|
+
"impactDescription": "Edge case at exactly 18 years old would incorrectly fail validation",
|
|
58
|
+
"suggestedTest": "test('should validate user exactly 18 years old', () => { expect(validateAge(18)).toBe(true); });",
|
|
59
|
+
"relatedTests": ["should validate adult", "should reject minor"],
|
|
60
|
+
"equivalentSuspect": false
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "MUT-002",
|
|
64
|
+
"operator": "LCR",
|
|
65
|
+
"operatorDescription": "Logical Connector Replacement (&& to ||)",
|
|
66
|
+
"location": {
|
|
67
|
+
"file": "src/auth/permissions.ts",
|
|
68
|
+
"line": 28,
|
|
69
|
+
"column": 8,
|
|
70
|
+
"function": "canAccess"
|
|
71
|
+
},
|
|
72
|
+
"original": "isAdmin && hasPermission",
|
|
73
|
+
"mutated": "isAdmin || hasPermission",
|
|
74
|
+
"impact": "critical",
|
|
75
|
+
"impactDescription": "Would allow unauthorized access if only one condition is true",
|
|
76
|
+
"suggestedTest": "test('should deny access when only admin flag is set', () => { expect(canAccess({ isAdmin: true, hasPermission: false })).toBe(false); });",
|
|
77
|
+
"relatedTests": ["should allow admin access"],
|
|
78
|
+
"equivalentSuspect": false
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "MUT-003",
|
|
82
|
+
"operator": "conditional",
|
|
83
|
+
"operatorDescription": "Conditional boundary mutation",
|
|
84
|
+
"location": {
|
|
85
|
+
"file": "src/auth/session.ts",
|
|
86
|
+
"line": 67,
|
|
87
|
+
"column": 6,
|
|
88
|
+
"function": "isSessionValid"
|
|
89
|
+
},
|
|
90
|
+
"original": "if (expiresAt > now)",
|
|
91
|
+
"mutated": "if (expiresAt >= now)",
|
|
92
|
+
"impact": "medium",
|
|
93
|
+
"impactDescription": "Session might be considered valid at exact expiration moment",
|
|
94
|
+
"suggestedTest": "test('should invalidate session at exact expiration time', () => { const now = Date.now(); expect(isSessionValid({ expiresAt: now })).toBe(false); });",
|
|
95
|
+
"relatedTests": ["should validate active session"],
|
|
96
|
+
"equivalentSuspect": false
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"operatorBreakdown": [
|
|
100
|
+
{
|
|
101
|
+
"operator": "AOR",
|
|
102
|
+
"operatorCategory": "arithmetic",
|
|
103
|
+
"total": 25,
|
|
104
|
+
"killed": 24,
|
|
105
|
+
"survived": 1,
|
|
106
|
+
"score": 96.0
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"operator": "ROR",
|
|
110
|
+
"operatorCategory": "relational",
|
|
111
|
+
"total": 45,
|
|
112
|
+
"killed": 36,
|
|
113
|
+
"survived": 8,
|
|
114
|
+
"score": 80.0
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"operator": "LCR",
|
|
118
|
+
"operatorCategory": "logical",
|
|
119
|
+
"total": 30,
|
|
120
|
+
"killed": 25,
|
|
121
|
+
"survived": 5,
|
|
122
|
+
"score": 83.3
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"operator": "COR",
|
|
126
|
+
"operatorCategory": "conditional",
|
|
127
|
+
"total": 28,
|
|
128
|
+
"killed": 24,
|
|
129
|
+
"survived": 3,
|
|
130
|
+
"score": 85.7
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"operator": "RVR",
|
|
134
|
+
"operatorCategory": "return",
|
|
135
|
+
"total": 22,
|
|
136
|
+
"killed": 18,
|
|
137
|
+
"survived": 1,
|
|
138
|
+
"score": 81.8
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"fileBreakdown": [
|
|
142
|
+
{
|
|
143
|
+
"file": "src/auth/validator.ts",
|
|
144
|
+
"total": 35,
|
|
145
|
+
"killed": 28,
|
|
146
|
+
"survived": 6,
|
|
147
|
+
"score": 80.0,
|
|
148
|
+
"priority": "high"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"file": "src/auth/permissions.ts",
|
|
152
|
+
"total": 28,
|
|
153
|
+
"killed": 22,
|
|
154
|
+
"survived": 5,
|
|
155
|
+
"score": 78.6,
|
|
156
|
+
"priority": "high"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"file": "src/auth/session.ts",
|
|
160
|
+
"total": 25,
|
|
161
|
+
"killed": 21,
|
|
162
|
+
"survived": 3,
|
|
163
|
+
"score": 84.0,
|
|
164
|
+
"priority": "medium"
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
"weakTests": [
|
|
168
|
+
{
|
|
169
|
+
"testFile": "tests/auth/validator.test.ts",
|
|
170
|
+
"mutantsNotKilled": 6,
|
|
171
|
+
"priority": "high",
|
|
172
|
+
"reason": "Missing boundary value tests for age validation",
|
|
173
|
+
"suggestions": [
|
|
174
|
+
"Add test for exactly 18 years old",
|
|
175
|
+
"Add test for age = 0",
|
|
176
|
+
"Add test for maximum age boundary"
|
|
177
|
+
]
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"testFile": "tests/auth/permissions.test.ts",
|
|
181
|
+
"mutantsNotKilled": 5,
|
|
182
|
+
"priority": "high",
|
|
183
|
+
"reason": "Incomplete logical condition coverage",
|
|
184
|
+
"suggestions": [
|
|
185
|
+
"Test all combinations of admin and permission flags",
|
|
186
|
+
"Add negative tests for partial conditions"
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"testFile": "tests/auth/session.test.ts",
|
|
191
|
+
"mutantsNotKilled": 3,
|
|
192
|
+
"priority": "medium",
|
|
193
|
+
"reason": "Missing exact boundary tests for session expiration",
|
|
194
|
+
"suggestions": [
|
|
195
|
+
"Test session validity at exact expiration time"
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
],
|
|
199
|
+
"recommendations": [
|
|
200
|
+
{
|
|
201
|
+
"id": "REC-001",
|
|
202
|
+
"title": "Add boundary value tests for age validation",
|
|
203
|
+
"description": "The validator.ts file has multiple surviving relational operator mutations. Add tests for exact boundary values (18, 0, max age).",
|
|
204
|
+
"priority": "high",
|
|
205
|
+
"effort": "low",
|
|
206
|
+
"impact": 8,
|
|
207
|
+
"relatedMutants": ["MUT-001"],
|
|
208
|
+
"codeExample": "test('should validate exact boundary ages', () => {\n expect(validateAge(18)).toBe(true);\n expect(validateAge(17)).toBe(false);\n});",
|
|
209
|
+
"targetFile": "tests/auth/validator.test.ts"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"id": "REC-002",
|
|
213
|
+
"title": "Add combinatorial tests for permission logic",
|
|
214
|
+
"description": "The permissions.ts file has surviving logical operator mutations. Test all combinations of boolean conditions.",
|
|
215
|
+
"priority": "critical",
|
|
216
|
+
"effort": "medium",
|
|
217
|
+
"impact": 9,
|
|
218
|
+
"relatedMutants": ["MUT-002"],
|
|
219
|
+
"targetFile": "tests/auth/permissions.test.ts"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"id": "REC-003",
|
|
223
|
+
"title": "Add session expiration edge case tests",
|
|
224
|
+
"description": "Test session validity at the exact moment of expiration.",
|
|
225
|
+
"priority": "medium",
|
|
226
|
+
"effort": "low",
|
|
227
|
+
"impact": 6,
|
|
228
|
+
"relatedMutants": ["MUT-003"],
|
|
229
|
+
"targetFile": "tests/auth/session.test.ts"
|
|
230
|
+
}
|
|
231
|
+
],
|
|
232
|
+
"metrics": {
|
|
233
|
+
"coverageCorrelation": 0.72,
|
|
234
|
+
"assertionDensity": 3.2,
|
|
235
|
+
"testEfficiency": 89.5,
|
|
236
|
+
"avgMutantsPerFile": 18.75,
|
|
237
|
+
"avgTimePerMutant": 245,
|
|
238
|
+
"parallelWorkers": 8
|
|
239
|
+
},
|
|
240
|
+
"testSuiteEffectiveness": {
|
|
241
|
+
"overallRating": "good",
|
|
242
|
+
"strengthAreas": [
|
|
243
|
+
"Good arithmetic operator coverage",
|
|
244
|
+
"Strong return value testing"
|
|
245
|
+
],
|
|
246
|
+
"weaknessAreas": [
|
|
247
|
+
"Boundary value testing needs improvement",
|
|
248
|
+
"Logical condition combinations incomplete"
|
|
249
|
+
],
|
|
250
|
+
"boundaryTesting": 72,
|
|
251
|
+
"conditionCoverage": 78,
|
|
252
|
+
"errorHandling": 85
|
|
253
|
+
},
|
|
254
|
+
"artifacts": [
|
|
255
|
+
{
|
|
256
|
+
"type": "report",
|
|
257
|
+
"path": "reports/mutation/mutation-report.html",
|
|
258
|
+
"format": "html",
|
|
259
|
+
"description": "Interactive HTML mutation testing report",
|
|
260
|
+
"sizeBytes": 245678
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"type": "data",
|
|
264
|
+
"path": "reports/mutation/mutation-results.json",
|
|
265
|
+
"format": "json",
|
|
266
|
+
"description": "Raw mutation testing data",
|
|
267
|
+
"sizeBytes": 89234
|
|
268
|
+
}
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
"metadata": {
|
|
272
|
+
"executionTimeMs": 125430,
|
|
273
|
+
"toolsUsed": ["stryker"],
|
|
274
|
+
"agentId": "qe-mutation-tester",
|
|
275
|
+
"modelUsed": "claude-sonnet-4-6",
|
|
276
|
+
"targetPath": "src/auth",
|
|
277
|
+
"testPath": "tests/auth",
|
|
278
|
+
"incremental": false,
|
|
279
|
+
"changedLinesOnly": false
|
|
280
|
+
},
|
|
281
|
+
"validation": {
|
|
282
|
+
"schemaValid": true,
|
|
283
|
+
"contentValid": true,
|
|
284
|
+
"confidence": 0.92,
|
|
285
|
+
"warnings": []
|
|
286
|
+
},
|
|
287
|
+
"learning": {
|
|
288
|
+
"patternsDetected": [
|
|
289
|
+
"boundary-value-weakness",
|
|
290
|
+
"logical-condition-gaps",
|
|
291
|
+
"high-arithmetic-coverage"
|
|
292
|
+
],
|
|
293
|
+
"reward": 0.85
|
|
294
|
+
}
|
|
295
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: performance-testing
|
|
3
|
-
description: "
|
|
3
|
+
description: "Profiles application performance under load using k6, Artillery, or JMeter to measure latency, throughput, and error rates. Use when planning load tests, stress tests, soak tests, benchmarking APIs, or identifying performance bottlenecks."
|
|
4
4
|
category: specialized-testing
|
|
5
5
|
priority: high
|
|
6
6
|
tokenEstimate: 1100
|
|
@@ -18,6 +18,18 @@ validation:
|
|
|
18
18
|
eval_path: evals/performance-testing.yaml
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
+
<!-- Vendored from https://github.com/proffesor-for-testing/agentic-qe at 0a6de058575cbe292afe220df105cc74120f7674 (MIT, Copyright (c) 2025 Agentic QE Contributors), 2026-10-24. Bundled references do not install aqe, MCP tools, pattern memory, or fleet runtime. See ../LICENSE.agentic-qe and ../README.md. -->
|
|
22
|
+
|
|
23
|
+
## Keysarium execution adapter
|
|
24
|
+
|
|
25
|
+
This pinned upstream body is methodology inside the bundled feature-ADR pipeline. In Reference Mode, the feature-ADR module that loaded this file owns orchestration and checkpoints. Use the reasoning and output shape below with the host's available tools. Do not treat upstream `aqe` CLI/MCP calls, named agent roles, browser tools, or example absolute paths as installed capabilities. Name a missing capability or evidence in the checkpoint instead of reporting that an upstream step ran. The schemas and eval files are bundled for explicit validation; bundling them does not run those checks automatically.
|
|
26
|
+
|
|
27
|
+
Relative paths such as `schemas/output.json`, `evals/...` and `steps/...` resolve from this skill directory under `references/agentic-qe/`. Direct Extended Mode still requires a separately installed `aqe` runtime; verify each required runtime capability before using it.
|
|
28
|
+
|
|
29
|
+
The upstream `run-history.json` is execution history, not a reference contract, and is intentionally omitted. Do not run an upstream example that reads or writes it unless an installed aqe runtime supplies its own history.
|
|
30
|
+
|
|
31
|
+
<!-- BEGIN AGENTIC-QE UPSTREAM BODY -->
|
|
32
|
+
|
|
21
33
|
# Performance Testing
|
|
22
34
|
|
|
23
35
|
<default_to_action>
|
|
@@ -313,3 +325,25 @@ const perfFleet = await FleetManager.coordinate({
|
|
|
313
325
|
**Trend over time:** Catch degradation early
|
|
314
326
|
|
|
315
327
|
**With Agents:** Agents automate load testing, analyze bottlenecks, and compare with production. Use agents to maintain performance at scale.
|
|
328
|
+
|
|
329
|
+
## Run History
|
|
330
|
+
|
|
331
|
+
After each performance test run, append results to `run-history.json` in this skill directory:
|
|
332
|
+
```bash
|
|
333
|
+
node -e "
|
|
334
|
+
const fs = require('fs');
|
|
335
|
+
const h = JSON.parse(fs.readFileSync('.claude/skills/performance-testing/run-history.json'));
|
|
336
|
+
h.runs.push({date: new Date().toISOString().split('T')[0], scenario: 'load', p95_ms: P95, throughput_rps: RPS, error_rate_pct: ERR});
|
|
337
|
+
fs.writeFileSync('.claude/skills/performance-testing/run-history.json', JSON.stringify(h, null, 2));
|
|
338
|
+
"
|
|
339
|
+
```
|
|
340
|
+
Read `run-history.json` before each run — compare with baselines. Alert if p95 increases >20% from baseline.
|
|
341
|
+
|
|
342
|
+
## Gotchas
|
|
343
|
+
|
|
344
|
+
- k6 scripts generated by agent often hardcode base URLs — use environment variables for portability
|
|
345
|
+
- Load tests in containers hit resource limits before app limits — ensure container has 2x the resources of target
|
|
346
|
+
- Agent forgets to include think time between requests — without it, load is unrealistically bursty
|
|
347
|
+
- P95 vs P99 matters — agent defaults to averages which hide tail latency problems
|
|
348
|
+
- Baseline comparison requires consistent environment — CI runner variance can cause 20%+ noise
|
|
349
|
+
<!-- END AGENTIC-QE UPSTREAM BODY -->
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./config-schema.json",
|
|
3
|
+
"_description": "Performance Testing configuration. Auto-created on first run. Edit to customize.",
|
|
4
|
+
"tool": null,
|
|
5
|
+
"baseline_file": null,
|
|
6
|
+
"thresholds": {
|
|
7
|
+
"p95_response_ms": 500,
|
|
8
|
+
"error_rate_percent": 1,
|
|
9
|
+
"throughput_rps": 100
|
|
10
|
+
},
|
|
11
|
+
"options": {
|
|
12
|
+
"duration": "30s",
|
|
13
|
+
"vus": 10,
|
|
14
|
+
"rampUp": "10s",
|
|
15
|
+
"thinkTime": "1s"
|
|
16
|
+
},
|
|
17
|
+
"_setupPrompt": "If tool is null, ask: 'Which load testing tool do you use? (k6/artillery/jmeter)'. If baseline_file is null, ask: 'Do you have an existing performance baseline file? (path or \"none\")'."
|
|
18
|
+
}
|