@dzhechkov/keysarium 1.7.18 → 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 (55) hide show
  1. package/.dz-manifest.json +172 -32
  2. package/README.md +3 -3
  3. package/package.json +1 -1
  4. package/sbom.json +391 -41
  5. package/src/commands/init.js +10 -0
  6. package/src/commands/update.js +30 -3
  7. package/src/utils.js +6 -0
  8. package/templates/.claude/agents/code-goal-planner.md +441 -3
  9. package/templates/.claude/skills/feature-adr/SKILL.md +9 -7
  10. package/templates/.claude/skills/feature-adr/modules/06-implementation-plan.md +1 -1
  11. package/templates/.claude/skills/feature-adr/modules/09-fleet-qe.md +1 -1
  12. package/templates/.claude/skills/feature-adr/references/agentic-qe/README.md +11 -9
  13. package/templates/.claude/skills/feature-adr/references/agentic-qe/UPSTREAM-MANIFEST.json +290 -70
  14. package/templates/.claude/skills/feature-adr/references/agentic-qe/{chaos-engineering-resilience.md → qe-ref-chaos-engineering-resilience/REFERENCE.md} +13 -0
  15. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +761 -0
  16. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/schemas/output.json +1205 -0
  17. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-chaos-engineering-resilience/scripts/validate-config.json +47 -0
  18. package/templates/.claude/skills/feature-adr/references/agentic-qe/{mutation-testing.md → qe-ref-mutation-testing/REFERENCE.md} +39 -1
  19. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/config.json +14 -0
  20. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/evals/mutation-testing.yaml +651 -0
  21. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/references/mutation-operators.md +38 -0
  22. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/schemas/output.json +707 -0
  23. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/scripts/validate-config.json +44 -0
  24. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-mutation-testing/test-data/sample-output.json +295 -0
  25. package/templates/.claude/skills/feature-adr/references/agentic-qe/{performance-testing.md → qe-ref-performance-testing/REFERENCE.md} +35 -1
  26. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/config.json +18 -0
  27. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/evals/performance-testing.yaml +771 -0
  28. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/references/k6-patterns.md +72 -0
  29. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/schemas/output.json +1184 -0
  30. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-performance-testing/scripts/validate-config.json +55 -0
  31. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/REFERENCE.md +222 -0
  32. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/evals/qcsd-production-swarm.yaml +246 -0
  33. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/schemas/output.json +505 -0
  34. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/scripts/validate-config.json +25 -0
  35. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/01-flag-detection.md +202 -0
  36. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/02-core-agents.md +428 -0
  37. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/03-batch1-results.md +101 -0
  38. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/04-conditional-agents.md +125 -0
  39. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/05-decision-synthesis.md +136 -0
  40. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/06-report-generation.md +181 -0
  41. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/07-learning-persistence.md +157 -0
  42. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/08-feedback-loop.md +122 -0
  43. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-qcsd-production-swarm/steps/09-final-output.md +140 -0
  44. package/templates/.claude/skills/feature-adr/references/agentic-qe/{security-testing.md → qe-ref-security-testing/REFERENCE.md} +44 -1
  45. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/config.json +13 -0
  46. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/evals/security-testing.yaml +789 -0
  47. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/references/compliance-agent-commands.md +131 -0
  48. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/references/owasp-top-10.md +66 -0
  49. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/schemas/output.json +879 -0
  50. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/scripts/validate-config.json +45 -0
  51. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-security-testing/templates/security-report.md +44 -0
  52. package/templates/.claude/skills/feature-adr/references/agentic-qe/{tdd-london-chicago.md → qe-ref-tdd-london-chicago/REFERENCE.md} +21 -1
  53. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-tdd-london-chicago/schemas/output.json +444 -0
  54. package/templates/.claude/skills/feature-adr/references/agentic-qe/qe-ref-tdd-london-chicago/scripts/validate-config.json +43 -0
  55. 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: "Test application performance, scalability, and resilience. Use when planning load testing, stress testing, or optimizing system performance."
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
+ }