agentic-qe 2.0.0 → 2.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.
- package/.claude/agents/qx-partner.md +17 -4
- package/.claude/skills/accessibility-testing/SKILL.md +144 -692
- package/.claude/skills/agentic-quality-engineering/SKILL.md +176 -529
- package/.claude/skills/api-testing-patterns/SKILL.md +180 -560
- package/.claude/skills/brutal-honesty-review/SKILL.md +113 -603
- package/.claude/skills/bug-reporting-excellence/SKILL.md +116 -517
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +127 -72
- package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +209 -404
- package/.claude/skills/code-review-quality/SKILL.md +158 -608
- package/.claude/skills/compatibility-testing/SKILL.md +148 -38
- package/.claude/skills/compliance-testing/SKILL.md +132 -63
- package/.claude/skills/consultancy-practices/SKILL.md +114 -446
- package/.claude/skills/context-driven-testing/SKILL.md +117 -381
- package/.claude/skills/contract-testing/SKILL.md +176 -141
- package/.claude/skills/database-testing/SKILL.md +137 -130
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +160 -629
- package/.claude/skills/holistic-testing-pact/SKILL.md +140 -188
- package/.claude/skills/localization-testing/SKILL.md +145 -33
- package/.claude/skills/mobile-testing/SKILL.md +132 -448
- package/.claude/skills/mutation-testing/SKILL.md +147 -41
- package/.claude/skills/performance-testing/SKILL.md +200 -546
- package/.claude/skills/quality-metrics/SKILL.md +164 -519
- package/.claude/skills/refactoring-patterns/SKILL.md +132 -699
- package/.claude/skills/regression-testing/SKILL.md +120 -926
- package/.claude/skills/risk-based-testing/SKILL.md +157 -660
- package/.claude/skills/security-testing/SKILL.md +199 -538
- package/.claude/skills/sherlock-review/SKILL.md +163 -699
- package/.claude/skills/shift-left-testing/SKILL.md +161 -465
- package/.claude/skills/shift-right-testing/SKILL.md +161 -519
- package/.claude/skills/six-thinking-hats/SKILL.md +175 -1110
- package/.claude/skills/skills-manifest.json +71 -20
- package/.claude/skills/tdd-london-chicago/SKILL.md +131 -448
- package/.claude/skills/technical-writing/SKILL.md +103 -154
- package/.claude/skills/test-automation-strategy/SKILL.md +166 -772
- package/.claude/skills/test-data-management/SKILL.md +126 -910
- package/.claude/skills/test-design-techniques/SKILL.md +179 -89
- package/.claude/skills/test-environment-management/SKILL.md +136 -91
- package/.claude/skills/test-reporting-analytics/SKILL.md +169 -92
- package/.claude/skills/testability-scoring/SKILL.md +172 -538
- package/.claude/skills/testability-scoring/scripts/generate-html-report.js +0 -0
- package/.claude/skills/visual-testing-advanced/SKILL.md +155 -78
- package/.claude/skills/xp-practices/SKILL.md +151 -587
- package/CHANGELOG.md +48 -0
- package/README.md +23 -16
- package/dist/agents/QXPartnerAgent.d.ts +8 -1
- package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
- package/dist/agents/QXPartnerAgent.js +1174 -112
- package/dist/agents/QXPartnerAgent.js.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +34 -31
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
- package/dist/cli/commands/init-claude-md-template.js +14 -0
- package/dist/cli/commands/init-claude-md-template.js.map +1 -1
- package/dist/core/SwarmCoordinator.d.ts +180 -0
- package/dist/core/SwarmCoordinator.d.ts.map +1 -0
- package/dist/core/SwarmCoordinator.js +473 -0
- package/dist/core/SwarmCoordinator.js.map +1 -0
- package/dist/core/metrics/MetricsAggregator.d.ts +228 -0
- package/dist/core/metrics/MetricsAggregator.d.ts.map +1 -0
- package/dist/core/metrics/MetricsAggregator.js +482 -0
- package/dist/core/metrics/MetricsAggregator.js.map +1 -0
- package/dist/core/metrics/index.d.ts +5 -0
- package/dist/core/metrics/index.d.ts.map +1 -0
- package/dist/core/metrics/index.js +11 -0
- package/dist/core/metrics/index.js.map +1 -0
- package/dist/core/optimization/SwarmOptimizer.d.ts +5 -0
- package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -1
- package/dist/core/optimization/SwarmOptimizer.js +17 -0
- package/dist/core/optimization/SwarmOptimizer.js.map +1 -1
- package/dist/core/orchestration/AdaptiveScheduler.d.ts +190 -0
- package/dist/core/orchestration/AdaptiveScheduler.d.ts.map +1 -0
- package/dist/core/orchestration/AdaptiveScheduler.js +460 -0
- package/dist/core/orchestration/AdaptiveScheduler.js.map +1 -0
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts +13 -0
- package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -1
- package/dist/core/orchestration/WorkflowOrchestrator.js +32 -0
- package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -1
- package/dist/core/recovery/CircuitBreaker.d.ts +176 -0
- package/dist/core/recovery/CircuitBreaker.d.ts.map +1 -0
- package/dist/core/recovery/CircuitBreaker.js +382 -0
- package/dist/core/recovery/CircuitBreaker.js.map +1 -0
- package/dist/core/recovery/RecoveryOrchestrator.d.ts +186 -0
- package/dist/core/recovery/RecoveryOrchestrator.d.ts.map +1 -0
- package/dist/core/recovery/RecoveryOrchestrator.js +476 -0
- package/dist/core/recovery/RecoveryOrchestrator.js.map +1 -0
- package/dist/core/recovery/RetryStrategy.d.ts +127 -0
- package/dist/core/recovery/RetryStrategy.d.ts.map +1 -0
- package/dist/core/recovery/RetryStrategy.js +314 -0
- package/dist/core/recovery/RetryStrategy.js.map +1 -0
- package/dist/core/recovery/index.d.ts +8 -0
- package/dist/core/recovery/index.d.ts.map +1 -0
- package/dist/core/recovery/index.js +27 -0
- package/dist/core/recovery/index.js.map +1 -0
- package/dist/core/skills/DependencyResolver.d.ts +99 -0
- package/dist/core/skills/DependencyResolver.d.ts.map +1 -0
- package/dist/core/skills/DependencyResolver.js +260 -0
- package/dist/core/skills/DependencyResolver.js.map +1 -0
- package/dist/core/skills/ManifestGenerator.d.ts +114 -0
- package/dist/core/skills/ManifestGenerator.d.ts.map +1 -0
- package/dist/core/skills/ManifestGenerator.js +449 -0
- package/dist/core/skills/ManifestGenerator.js.map +1 -0
- package/dist/core/skills/index.d.ts +9 -0
- package/dist/core/skills/index.d.ts.map +1 -0
- package/dist/core/skills/index.js +24 -0
- package/dist/core/skills/index.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -9
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +1 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/types/qx.d.ts +39 -7
- package/dist/types/qx.d.ts.map +1 -1
- package/dist/types/qx.js.map +1 -1
- package/dist/visualization/api/RestEndpoints.js +1 -1
- package/dist/visualization/api/RestEndpoints.js.map +1 -1
- package/package.json +13 -55
|
File without changes
|
|
@@ -1,142 +1,219 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: visual-testing-advanced
|
|
3
|
-
description: Advanced visual regression testing with pixel-perfect comparison, AI-powered diff analysis, responsive design validation, and cross-browser visual consistency. Use when detecting UI regressions, validating designs, or ensuring visual consistency.
|
|
3
|
+
description: "Advanced visual regression testing with pixel-perfect comparison, AI-powered diff analysis, responsive design validation, and cross-browser visual consistency. Use when detecting UI regressions, validating designs, or ensuring visual consistency."
|
|
4
|
+
category: specialized-testing
|
|
5
|
+
priority: high
|
|
6
|
+
tokenEstimate: 900
|
|
7
|
+
agents: [qe-visual-tester, qe-test-executor, qe-quality-gate]
|
|
8
|
+
implementation_status: optimized
|
|
9
|
+
optimization_version: 1.0
|
|
10
|
+
last_optimized: 2025-12-02
|
|
11
|
+
dependencies: []
|
|
12
|
+
quick_reference_card: true
|
|
13
|
+
tags: [visual, regression, screenshot, pixel-diff, percy, playwright, responsive]
|
|
4
14
|
---
|
|
5
15
|
|
|
6
16
|
# Advanced Visual Testing
|
|
7
17
|
|
|
8
|
-
|
|
18
|
+
<default_to_action>
|
|
19
|
+
When detecting visual regressions or validating UI:
|
|
20
|
+
1. CAPTURE baseline screenshots (first run establishes baseline)
|
|
21
|
+
2. COMPARE new screenshots against baseline (pixel-by-pixel or AI)
|
|
22
|
+
3. MASK dynamic content (timestamps, ads, user counts)
|
|
23
|
+
4. TEST across devices (desktop, tablet, mobile viewports)
|
|
24
|
+
5. REVIEW and approve intentional changes, fail on regressions
|
|
25
|
+
|
|
26
|
+
**Quick Visual Testing Steps:**
|
|
27
|
+
- Set up baseline on main branch
|
|
28
|
+
- Compare feature branch against baseline
|
|
29
|
+
- Mask dynamic elements (timestamps, avatars)
|
|
30
|
+
- Use AI-powered comparison to reduce false positives
|
|
31
|
+
- Integrate in CI/CD to block visual regressions
|
|
32
|
+
|
|
33
|
+
**Critical Success Factors:**
|
|
34
|
+
- Functional tests don't catch visual bugs
|
|
35
|
+
- AI-powered tools reduce false positives
|
|
36
|
+
- Review diffs, don't just auto-approve
|
|
37
|
+
</default_to_action>
|
|
38
|
+
|
|
39
|
+
## Quick Reference Card
|
|
40
|
+
|
|
41
|
+
### When to Use
|
|
42
|
+
- UI component changes
|
|
43
|
+
- CSS/styling modifications
|
|
44
|
+
- Responsive design validation
|
|
45
|
+
- Cross-browser consistency checks
|
|
46
|
+
|
|
47
|
+
### Visual Bug Types
|
|
48
|
+
| Bug Type | Description |
|
|
49
|
+
|----------|-------------|
|
|
50
|
+
| Layout shift | Elements moved position |
|
|
51
|
+
| Color change | Unintended color modification |
|
|
52
|
+
| Font rendering | Typography issues |
|
|
53
|
+
| Alignment | Spacing/alignment problems |
|
|
54
|
+
| Missing images | Broken image paths |
|
|
55
|
+
| Overflow | Content clipping |
|
|
56
|
+
|
|
57
|
+
### Comparison Algorithms
|
|
58
|
+
| Algorithm | Best For |
|
|
59
|
+
|-----------|----------|
|
|
60
|
+
| **Pixel diff** | Exact match requirement |
|
|
61
|
+
| **Structural similarity** | Handle anti-aliasing |
|
|
62
|
+
| **AI semantic** | Ignore insignificant changes |
|
|
9
63
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Visual testing catches UI regressions that functional tests miss: layout shifts, color changes, font rendering, alignment issues.
|
|
13
|
-
|
|
14
|
-
## Visual Regression Testing
|
|
64
|
+
---
|
|
15
65
|
|
|
16
|
-
|
|
17
|
-
1. Capture baseline screenshots
|
|
18
|
-
2. Make code changes
|
|
19
|
-
3. Capture new screenshots
|
|
20
|
-
4. Compare pixel-by-pixel
|
|
21
|
-
5. Flag differences for review
|
|
66
|
+
## Visual Regression with Playwright
|
|
22
67
|
|
|
23
|
-
**With Playwright:**
|
|
24
68
|
```javascript
|
|
25
69
|
import { test, expect } from '@playwright/test';
|
|
26
70
|
|
|
27
71
|
test('homepage visual regression', async ({ page }) => {
|
|
28
72
|
await page.goto('https://example.com');
|
|
29
73
|
|
|
30
|
-
// Capture screenshot
|
|
74
|
+
// Capture and compare screenshot
|
|
31
75
|
await expect(page).toHaveScreenshot('homepage.png');
|
|
32
76
|
// First run: saves baseline
|
|
33
77
|
// Subsequent runs: compares to baseline
|
|
34
78
|
});
|
|
35
79
|
|
|
36
|
-
test('responsive design
|
|
37
|
-
|
|
38
|
-
|
|
80
|
+
test('responsive design', async ({ page }) => {
|
|
81
|
+
// Mobile viewport
|
|
82
|
+
await page.setViewportSize({ width: 375, height: 667 });
|
|
39
83
|
await page.goto('https://example.com');
|
|
40
84
|
await expect(page).toHaveScreenshot('homepage-mobile.png');
|
|
85
|
+
|
|
86
|
+
// Tablet viewport
|
|
87
|
+
await page.setViewportSize({ width: 768, height: 1024 });
|
|
88
|
+
await expect(page).toHaveScreenshot('homepage-tablet.png');
|
|
41
89
|
});
|
|
42
90
|
```
|
|
43
91
|
|
|
44
|
-
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Handling Dynamic Content
|
|
95
|
+
|
|
45
96
|
```javascript
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
};
|
|
97
|
+
test('mask dynamic elements', async ({ page }) => {
|
|
98
|
+
await page.goto('https://example.com');
|
|
99
|
+
|
|
100
|
+
await expect(page).toHaveScreenshot({
|
|
101
|
+
mask: [
|
|
102
|
+
page.locator('.timestamp'), // Dynamic time
|
|
103
|
+
page.locator('.user-count'), // Live counter
|
|
104
|
+
page.locator('.advertisement'), // Ads
|
|
105
|
+
page.locator('.avatar') // User avatars
|
|
106
|
+
]
|
|
107
|
+
});
|
|
108
|
+
});
|
|
57
109
|
```
|
|
58
110
|
|
|
59
|
-
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## AI-Powered Visual Testing (Percy)
|
|
60
114
|
|
|
61
|
-
**Percy (BrowserStack):**
|
|
62
115
|
```javascript
|
|
63
116
|
import percySnapshot from '@percy/playwright';
|
|
64
117
|
|
|
65
|
-
test('
|
|
118
|
+
test('AI-powered visual test', async ({ page }) => {
|
|
66
119
|
await page.goto('https://example.com');
|
|
67
120
|
|
|
68
|
-
// AI
|
|
121
|
+
// Percy uses AI to ignore anti-aliasing, minor font differences
|
|
69
122
|
await percySnapshot(page, 'Homepage');
|
|
70
123
|
});
|
|
71
|
-
```
|
|
72
124
|
|
|
73
|
-
|
|
125
|
+
test('component visual test', async ({ page }) => {
|
|
126
|
+
await page.goto('https://example.com/components');
|
|
74
127
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
await chromePage.goto('https://example.com');
|
|
80
|
-
const chromeScreenshot = await chromePage.screenshot();
|
|
81
|
-
|
|
82
|
-
// Compare Chrome vs Firefox rendering
|
|
83
|
-
expect(chromeScreenshot).toMatchSnapshot('chrome-homepage.png');
|
|
128
|
+
// Snapshot specific component
|
|
129
|
+
const button = page.locator('.primary-button');
|
|
130
|
+
await percySnapshot(page, 'Primary Button', {
|
|
131
|
+
scope: button
|
|
84
132
|
});
|
|
85
133
|
});
|
|
86
134
|
```
|
|
87
135
|
|
|
88
|
-
|
|
136
|
+
---
|
|
89
137
|
|
|
90
|
-
|
|
91
|
-
```javascript
|
|
92
|
-
test('ignore dynamic content', async ({ page }) => {
|
|
93
|
-
await page.goto('https://example.com');
|
|
138
|
+
## Playwright Configuration
|
|
94
139
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
140
|
+
```javascript
|
|
141
|
+
// playwright.config.js
|
|
142
|
+
export default {
|
|
143
|
+
expect: {
|
|
144
|
+
toHaveScreenshot: {
|
|
145
|
+
maxDiffPixels: 100, // Allow 100 pixel difference
|
|
146
|
+
maxDiffPixelRatio: 0.01, // Or 1% of image
|
|
147
|
+
threshold: 0.2, // Color similarity threshold
|
|
148
|
+
animations: 'disabled', // Disable animations
|
|
149
|
+
caret: 'hide' // Hide cursor
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
};
|
|
103
153
|
```
|
|
104
154
|
|
|
105
|
-
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Agent-Driven Visual Testing
|
|
106
158
|
|
|
107
159
|
```typescript
|
|
108
|
-
//
|
|
109
|
-
|
|
160
|
+
// Comprehensive visual regression
|
|
161
|
+
await Task("Visual Regression Suite", {
|
|
110
162
|
baseline: 'main-branch',
|
|
111
163
|
current: 'feature-branch',
|
|
112
164
|
pages: ['homepage', 'product', 'checkout'],
|
|
113
165
|
devices: ['desktop', 'tablet', 'mobile'],
|
|
114
|
-
browsers: ['chrome', 'firefox', 'safari']
|
|
115
|
-
|
|
166
|
+
browsers: ['chrome', 'firefox', 'safari'],
|
|
167
|
+
threshold: 0.01
|
|
168
|
+
}, "qe-visual-tester");
|
|
116
169
|
|
|
117
170
|
// Returns:
|
|
118
171
|
// {
|
|
119
|
-
//
|
|
120
|
-
// totalDevices: 3,
|
|
121
|
-
// totalBrowsers: 3,
|
|
122
|
-
// comparisons: 27, // 3 × 3 × 3
|
|
172
|
+
// comparisons: 27, // 3 pages × 3 devices × 3 browsers
|
|
123
173
|
// differences: 2,
|
|
124
174
|
// report: 'visual-regression-report.html'
|
|
125
175
|
// }
|
|
126
176
|
```
|
|
127
177
|
|
|
128
|
-
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Agent Coordination Hints
|
|
181
|
+
|
|
182
|
+
### Memory Namespace
|
|
183
|
+
```
|
|
184
|
+
aqe/visual-testing/
|
|
185
|
+
├── baselines/* - Baseline screenshots
|
|
186
|
+
├── comparisons/* - Diff results
|
|
187
|
+
├── components/* - Component snapshots
|
|
188
|
+
└── reports/* - Visual regression reports
|
|
189
|
+
```
|
|
129
190
|
|
|
130
|
-
|
|
191
|
+
### Fleet Coordination
|
|
192
|
+
```typescript
|
|
193
|
+
const visualFleet = await FleetManager.coordinate({
|
|
194
|
+
strategy: 'visual-testing',
|
|
195
|
+
agents: [
|
|
196
|
+
'qe-visual-tester', // Screenshot comparison
|
|
197
|
+
'qe-test-executor', // Cross-browser execution
|
|
198
|
+
'qe-quality-gate' // Block on visual regressions
|
|
199
|
+
],
|
|
200
|
+
topology: 'parallel'
|
|
201
|
+
});
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Related Skills
|
|
207
|
+
- [accessibility-testing](../accessibility-testing/) - Visual a11y checks
|
|
208
|
+
- [compatibility-testing](../compatibility-testing/) - Cross-browser visuals
|
|
209
|
+
- [regression-testing](../regression-testing/) - Regression suite
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Remember
|
|
131
214
|
|
|
132
|
-
|
|
133
|
-
- Layout shifts
|
|
134
|
-
- Color changes
|
|
135
|
-
- Font rendering
|
|
136
|
-
- Alignment issues
|
|
137
|
-
- Missing images
|
|
138
|
-
- Broken CSS
|
|
215
|
+
**Functional tests don't catch visual bugs.** Layout shifts, color changes, font rendering, alignment issues - all invisible to functional tests but visible to users.
|
|
139
216
|
|
|
140
|
-
**AI-powered tools reduce false positives.**
|
|
217
|
+
**AI-powered tools reduce false positives.** Percy, Applitools use AI to ignore insignificant differences (anti-aliasing, minor font rendering).
|
|
141
218
|
|
|
142
|
-
**With Agents:** `qe-visual-tester` automates visual regression across browsers and devices, uses AI to
|
|
219
|
+
**With Agents:** `qe-visual-tester` automates visual regression across browsers and devices, uses AI to filter noise, and generates visual diff reports. Catches UI regressions before users see them.
|