agentic-qe 1.9.4 → 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.
Files changed (262) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +95 -1336
  2. package/.claude/agents/qe-chaos-engineer.md +152 -1211
  3. package/.claude/agents/qe-code-complexity.md +144 -707
  4. package/.claude/agents/qe-coverage-analyzer.md +147 -743
  5. package/.claude/agents/qe-deployment-readiness.md +143 -1496
  6. package/.claude/agents/qe-flaky-test-hunter.md +132 -1529
  7. package/.claude/agents/qe-fleet-commander.md +12 -12
  8. package/.claude/agents/qe-performance-tester.md +150 -886
  9. package/.claude/agents/qe-production-intelligence.md +155 -1396
  10. package/.claude/agents/qe-quality-analyzer.md +6 -6
  11. package/.claude/agents/qe-quality-gate.md +151 -648
  12. package/.claude/agents/qe-regression-risk-analyzer.md +132 -1150
  13. package/.claude/agents/qe-requirements-validator.md +149 -932
  14. package/.claude/agents/qe-security-scanner.md +157 -797
  15. package/.claude/agents/qe-test-data-architect.md +96 -1365
  16. package/.claude/agents/qe-test-executor.md +8 -8
  17. package/.claude/agents/qe-test-generator.md +145 -1540
  18. package/.claude/agents/qe-visual-tester.md +153 -1257
  19. package/.claude/agents/qx-partner.md +248 -0
  20. package/.claude/agents/subagents/qe-code-reviewer.md +40 -136
  21. package/.claude/agents/subagents/qe-coverage-gap-analyzer.md +40 -480
  22. package/.claude/agents/subagents/qe-data-generator.md +41 -125
  23. package/.claude/agents/subagents/qe-flaky-investigator.md +55 -411
  24. package/.claude/agents/subagents/qe-integration-tester.md +53 -141
  25. package/.claude/agents/subagents/qe-performance-validator.md +54 -130
  26. package/.claude/agents/subagents/qe-security-auditor.md +56 -114
  27. package/.claude/agents/subagents/qe-test-data-architect-sub.md +57 -548
  28. package/.claude/agents/subagents/qe-test-implementer.md +58 -551
  29. package/.claude/agents/subagents/qe-test-refactorer.md +65 -722
  30. package/.claude/agents/subagents/qe-test-writer.md +63 -726
  31. package/.claude/skills/accessibility-testing/SKILL.md +144 -692
  32. package/.claude/skills/agentic-quality-engineering/SKILL.md +176 -529
  33. package/.claude/skills/api-testing-patterns/SKILL.md +180 -560
  34. package/.claude/skills/brutal-honesty-review/SKILL.md +113 -603
  35. package/.claude/skills/bug-reporting-excellence/SKILL.md +116 -517
  36. package/.claude/skills/chaos-engineering-resilience/SKILL.md +127 -72
  37. package/.claude/skills/cicd-pipeline-qe-orchestrator/SKILL.md +209 -404
  38. package/.claude/skills/code-review-quality/SKILL.md +158 -608
  39. package/.claude/skills/compatibility-testing/SKILL.md +148 -38
  40. package/.claude/skills/compliance-testing/SKILL.md +132 -63
  41. package/.claude/skills/consultancy-practices/SKILL.md +114 -446
  42. package/.claude/skills/context-driven-testing/SKILL.md +117 -381
  43. package/.claude/skills/contract-testing/SKILL.md +176 -141
  44. package/.claude/skills/database-testing/SKILL.md +137 -130
  45. package/.claude/skills/exploratory-testing-advanced/SKILL.md +160 -629
  46. package/.claude/skills/holistic-testing-pact/SKILL.md +140 -188
  47. package/.claude/skills/localization-testing/SKILL.md +145 -33
  48. package/.claude/skills/mobile-testing/SKILL.md +132 -448
  49. package/.claude/skills/mutation-testing/SKILL.md +147 -41
  50. package/.claude/skills/performance-testing/SKILL.md +200 -546
  51. package/.claude/skills/quality-metrics/SKILL.md +164 -519
  52. package/.claude/skills/refactoring-patterns/SKILL.md +132 -699
  53. package/.claude/skills/regression-testing/SKILL.md +120 -926
  54. package/.claude/skills/risk-based-testing/SKILL.md +157 -660
  55. package/.claude/skills/security-testing/SKILL.md +199 -538
  56. package/.claude/skills/sherlock-review/SKILL.md +163 -699
  57. package/.claude/skills/shift-left-testing/SKILL.md +161 -465
  58. package/.claude/skills/shift-right-testing/SKILL.md +161 -519
  59. package/.claude/skills/six-thinking-hats/SKILL.md +175 -1110
  60. package/.claude/skills/skills-manifest.json +683 -0
  61. package/.claude/skills/tdd-london-chicago/SKILL.md +131 -448
  62. package/.claude/skills/technical-writing/SKILL.md +103 -154
  63. package/.claude/skills/test-automation-strategy/SKILL.md +166 -772
  64. package/.claude/skills/test-data-management/SKILL.md +126 -910
  65. package/.claude/skills/test-design-techniques/SKILL.md +179 -89
  66. package/.claude/skills/test-environment-management/SKILL.md +136 -91
  67. package/.claude/skills/test-reporting-analytics/SKILL.md +169 -92
  68. package/.claude/skills/testability-scoring/README.md +71 -0
  69. package/.claude/skills/testability-scoring/SKILL.md +245 -0
  70. package/.claude/skills/testability-scoring/resources/templates/config.template.js +84 -0
  71. package/.claude/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
  72. package/.claude/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
  73. package/.claude/skills/testability-scoring/scripts/run-assessment.sh +70 -0
  74. package/.claude/skills/visual-testing-advanced/SKILL.md +155 -78
  75. package/.claude/skills/xp-practices/SKILL.md +151 -587
  76. package/CHANGELOG.md +110 -0
  77. package/README.md +55 -21
  78. package/dist/agents/QXPartnerAgent.d.ts +146 -0
  79. package/dist/agents/QXPartnerAgent.d.ts.map +1 -0
  80. package/dist/agents/QXPartnerAgent.js +1831 -0
  81. package/dist/agents/QXPartnerAgent.js.map +1 -0
  82. package/dist/agents/index.d.ts +1 -0
  83. package/dist/agents/index.d.ts.map +1 -1
  84. package/dist/agents/index.js +82 -2
  85. package/dist/agents/index.js.map +1 -1
  86. package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
  87. package/dist/agents/lifecycle/AgentLifecycleManager.js +34 -31
  88. package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
  89. package/dist/cli/commands/debug/agent.d.ts.map +1 -1
  90. package/dist/cli/commands/debug/agent.js +19 -6
  91. package/dist/cli/commands/debug/agent.js.map +1 -1
  92. package/dist/cli/commands/debug/health-check.js +20 -7
  93. package/dist/cli/commands/debug/health-check.js.map +1 -1
  94. package/dist/cli/commands/init-claude-md-template.d.ts +1 -0
  95. package/dist/cli/commands/init-claude-md-template.d.ts.map +1 -1
  96. package/dist/cli/commands/init-claude-md-template.js +18 -3
  97. package/dist/cli/commands/init-claude-md-template.js.map +1 -1
  98. package/dist/cli/commands/workflow/cancel.d.ts.map +1 -1
  99. package/dist/cli/commands/workflow/cancel.js +4 -3
  100. package/dist/cli/commands/workflow/cancel.js.map +1 -1
  101. package/dist/cli/commands/workflow/list.d.ts.map +1 -1
  102. package/dist/cli/commands/workflow/list.js +4 -3
  103. package/dist/cli/commands/workflow/list.js.map +1 -1
  104. package/dist/cli/commands/workflow/pause.d.ts.map +1 -1
  105. package/dist/cli/commands/workflow/pause.js +4 -3
  106. package/dist/cli/commands/workflow/pause.js.map +1 -1
  107. package/dist/cli/init/claude-config.d.ts.map +1 -1
  108. package/dist/cli/init/claude-config.js +3 -8
  109. package/dist/cli/init/claude-config.js.map +1 -1
  110. package/dist/cli/init/claude-md.d.ts.map +1 -1
  111. package/dist/cli/init/claude-md.js +44 -2
  112. package/dist/cli/init/claude-md.js.map +1 -1
  113. package/dist/cli/init/database-init.js +1 -1
  114. package/dist/cli/init/index.d.ts.map +1 -1
  115. package/dist/cli/init/index.js +13 -6
  116. package/dist/cli/init/index.js.map +1 -1
  117. package/dist/cli/init/skills.d.ts.map +1 -1
  118. package/dist/cli/init/skills.js +2 -1
  119. package/dist/cli/init/skills.js.map +1 -1
  120. package/dist/core/SwarmCoordinator.d.ts +180 -0
  121. package/dist/core/SwarmCoordinator.d.ts.map +1 -0
  122. package/dist/core/SwarmCoordinator.js +473 -0
  123. package/dist/core/SwarmCoordinator.js.map +1 -0
  124. package/dist/core/memory/AgentDBIntegration.d.ts +24 -6
  125. package/dist/core/memory/AgentDBIntegration.d.ts.map +1 -1
  126. package/dist/core/memory/AgentDBIntegration.js +66 -10
  127. package/dist/core/memory/AgentDBIntegration.js.map +1 -1
  128. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts +341 -0
  129. package/dist/core/memory/UnifiedMemoryCoordinator.d.ts.map +1 -0
  130. package/dist/core/memory/UnifiedMemoryCoordinator.js +986 -0
  131. package/dist/core/memory/UnifiedMemoryCoordinator.js.map +1 -0
  132. package/dist/core/memory/index.d.ts +5 -0
  133. package/dist/core/memory/index.d.ts.map +1 -1
  134. package/dist/core/memory/index.js +23 -1
  135. package/dist/core/memory/index.js.map +1 -1
  136. package/dist/core/metrics/MetricsAggregator.d.ts +228 -0
  137. package/dist/core/metrics/MetricsAggregator.d.ts.map +1 -0
  138. package/dist/core/metrics/MetricsAggregator.js +482 -0
  139. package/dist/core/metrics/MetricsAggregator.js.map +1 -0
  140. package/dist/core/metrics/index.d.ts +5 -0
  141. package/dist/core/metrics/index.d.ts.map +1 -0
  142. package/dist/core/metrics/index.js +11 -0
  143. package/dist/core/metrics/index.js.map +1 -0
  144. package/dist/core/optimization/SwarmOptimizer.d.ts +190 -0
  145. package/dist/core/optimization/SwarmOptimizer.d.ts.map +1 -0
  146. package/dist/core/optimization/SwarmOptimizer.js +648 -0
  147. package/dist/core/optimization/SwarmOptimizer.js.map +1 -0
  148. package/dist/core/optimization/index.d.ts +9 -0
  149. package/dist/core/optimization/index.d.ts.map +1 -0
  150. package/dist/core/optimization/index.js +25 -0
  151. package/dist/core/optimization/index.js.map +1 -0
  152. package/dist/core/optimization/types.d.ts +53 -0
  153. package/dist/core/optimization/types.d.ts.map +1 -0
  154. package/dist/core/optimization/types.js +6 -0
  155. package/dist/core/optimization/types.js.map +1 -0
  156. package/dist/core/orchestration/AdaptiveScheduler.d.ts +190 -0
  157. package/dist/core/orchestration/AdaptiveScheduler.d.ts.map +1 -0
  158. package/dist/core/orchestration/AdaptiveScheduler.js +460 -0
  159. package/dist/core/orchestration/AdaptiveScheduler.js.map +1 -0
  160. package/dist/core/orchestration/PriorityQueue.d.ts +54 -0
  161. package/dist/core/orchestration/PriorityQueue.d.ts.map +1 -0
  162. package/dist/core/orchestration/PriorityQueue.js +122 -0
  163. package/dist/core/orchestration/PriorityQueue.js.map +1 -0
  164. package/dist/core/orchestration/WorkflowOrchestrator.d.ts +189 -0
  165. package/dist/core/orchestration/WorkflowOrchestrator.d.ts.map +1 -0
  166. package/dist/core/orchestration/WorkflowOrchestrator.js +845 -0
  167. package/dist/core/orchestration/WorkflowOrchestrator.js.map +1 -0
  168. package/dist/core/orchestration/index.d.ts +7 -0
  169. package/dist/core/orchestration/index.d.ts.map +1 -0
  170. package/dist/core/orchestration/index.js +11 -0
  171. package/dist/core/orchestration/index.js.map +1 -0
  172. package/dist/core/orchestration/types.d.ts +96 -0
  173. package/dist/core/orchestration/types.d.ts.map +1 -0
  174. package/dist/core/orchestration/types.js +6 -0
  175. package/dist/core/orchestration/types.js.map +1 -0
  176. package/dist/core/recovery/CircuitBreaker.d.ts +176 -0
  177. package/dist/core/recovery/CircuitBreaker.d.ts.map +1 -0
  178. package/dist/core/recovery/CircuitBreaker.js +382 -0
  179. package/dist/core/recovery/CircuitBreaker.js.map +1 -0
  180. package/dist/core/recovery/RecoveryOrchestrator.d.ts +186 -0
  181. package/dist/core/recovery/RecoveryOrchestrator.d.ts.map +1 -0
  182. package/dist/core/recovery/RecoveryOrchestrator.js +476 -0
  183. package/dist/core/recovery/RecoveryOrchestrator.js.map +1 -0
  184. package/dist/core/recovery/RetryStrategy.d.ts +127 -0
  185. package/dist/core/recovery/RetryStrategy.d.ts.map +1 -0
  186. package/dist/core/recovery/RetryStrategy.js +314 -0
  187. package/dist/core/recovery/RetryStrategy.js.map +1 -0
  188. package/dist/core/recovery/index.d.ts +8 -0
  189. package/dist/core/recovery/index.d.ts.map +1 -0
  190. package/dist/core/recovery/index.js +27 -0
  191. package/dist/core/recovery/index.js.map +1 -0
  192. package/dist/core/skills/DependencyResolver.d.ts +99 -0
  193. package/dist/core/skills/DependencyResolver.d.ts.map +1 -0
  194. package/dist/core/skills/DependencyResolver.js +260 -0
  195. package/dist/core/skills/DependencyResolver.js.map +1 -0
  196. package/dist/core/skills/DynamicSkillLoader.d.ts +96 -0
  197. package/dist/core/skills/DynamicSkillLoader.d.ts.map +1 -0
  198. package/dist/core/skills/DynamicSkillLoader.js +353 -0
  199. package/dist/core/skills/DynamicSkillLoader.js.map +1 -0
  200. package/dist/core/skills/ManifestGenerator.d.ts +114 -0
  201. package/dist/core/skills/ManifestGenerator.d.ts.map +1 -0
  202. package/dist/core/skills/ManifestGenerator.js +449 -0
  203. package/dist/core/skills/ManifestGenerator.js.map +1 -0
  204. package/dist/core/skills/index.d.ts +9 -0
  205. package/dist/core/skills/index.d.ts.map +1 -0
  206. package/dist/core/skills/index.js +24 -0
  207. package/dist/core/skills/index.js.map +1 -0
  208. package/dist/core/skills/types.d.ts +118 -0
  209. package/dist/core/skills/types.d.ts.map +1 -0
  210. package/dist/core/skills/types.js +7 -0
  211. package/dist/core/skills/types.js.map +1 -0
  212. package/dist/core/transport/QUICTransport.d.ts +320 -0
  213. package/dist/core/transport/QUICTransport.d.ts.map +1 -0
  214. package/dist/core/transport/QUICTransport.js +711 -0
  215. package/dist/core/transport/QUICTransport.js.map +1 -0
  216. package/dist/core/transport/index.d.ts +40 -0
  217. package/dist/core/transport/index.d.ts.map +1 -0
  218. package/dist/core/transport/index.js +46 -0
  219. package/dist/core/transport/index.js.map +1 -0
  220. package/dist/core/transport/quic-loader.d.ts +123 -0
  221. package/dist/core/transport/quic-loader.d.ts.map +1 -0
  222. package/dist/core/transport/quic-loader.js +293 -0
  223. package/dist/core/transport/quic-loader.js.map +1 -0
  224. package/dist/core/transport/quic.d.ts +154 -0
  225. package/dist/core/transport/quic.d.ts.map +1 -0
  226. package/dist/core/transport/quic.js +214 -0
  227. package/dist/core/transport/quic.js.map +1 -0
  228. package/dist/mcp/server.d.ts +9 -9
  229. package/dist/mcp/server.d.ts.map +1 -1
  230. package/dist/mcp/server.js +1 -2
  231. package/dist/mcp/server.js.map +1 -1
  232. package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
  233. package/dist/mcp/services/AgentRegistry.js +4 -1
  234. package/dist/mcp/services/AgentRegistry.js.map +1 -1
  235. package/dist/types/index.d.ts +2 -1
  236. package/dist/types/index.d.ts.map +1 -1
  237. package/dist/types/index.js +2 -0
  238. package/dist/types/index.js.map +1 -1
  239. package/dist/types/qx.d.ts +429 -0
  240. package/dist/types/qx.d.ts.map +1 -0
  241. package/dist/types/qx.js +71 -0
  242. package/dist/types/qx.js.map +1 -0
  243. package/dist/visualization/api/RestEndpoints.js +2 -2
  244. package/dist/visualization/api/RestEndpoints.js.map +1 -1
  245. package/dist/visualization/api/WebSocketServer.d.ts +44 -0
  246. package/dist/visualization/api/WebSocketServer.d.ts.map +1 -1
  247. package/dist/visualization/api/WebSocketServer.js +144 -23
  248. package/dist/visualization/api/WebSocketServer.js.map +1 -1
  249. package/dist/visualization/core/DataTransformer.d.ts +10 -0
  250. package/dist/visualization/core/DataTransformer.d.ts.map +1 -1
  251. package/dist/visualization/core/DataTransformer.js +60 -5
  252. package/dist/visualization/core/DataTransformer.js.map +1 -1
  253. package/dist/visualization/emit-event.d.ts +75 -0
  254. package/dist/visualization/emit-event.d.ts.map +1 -0
  255. package/dist/visualization/emit-event.js +213 -0
  256. package/dist/visualization/emit-event.js.map +1 -0
  257. package/dist/visualization/index.d.ts +1 -0
  258. package/dist/visualization/index.d.ts.map +1 -1
  259. package/dist/visualization/index.js +7 -1
  260. package/dist/visualization/index.js.map +1 -1
  261. package/docs/reference/skills.md +63 -1
  262. package/package.json +16 -58
@@ -0,0 +1,70 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # Testability Scoring Assessment Runner
5
+ # Usage: ./run-assessment.sh <URL> [browser]
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../../.." && pwd)"
9
+ TEST_FILE="$PROJECT_ROOT/tests/testability-scoring/testability-scoring.spec.js"
10
+
11
+ # Colors
12
+ GREEN='\033[0;32m'
13
+ BLUE='\033[0;34m'
14
+ YELLOW='\033[1;33m'
15
+ RED='\033[0;31m'
16
+ NC='\033[0m' # No Color
17
+
18
+ # Check if URL provided
19
+ if [ -z "$1" ]; then
20
+ echo -e "${RED}Error: URL required${NC}"
21
+ echo "Usage: $0 <URL> [browser]"
22
+ echo "Example: $0 https://example.com chromium"
23
+ exit 1
24
+ fi
25
+
26
+ TARGET_URL="$1"
27
+ BROWSER="${2:-chromium}"
28
+
29
+ echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
30
+ echo -e "${GREEN}🎯 Testability Assessment${NC}"
31
+ echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
32
+ echo ""
33
+ echo -e " ${YELLOW}URL:${NC} $TARGET_URL"
34
+ echo -e " ${YELLOW}Browser:${NC} $BROWSER"
35
+ echo ""
36
+ echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
37
+ echo ""
38
+
39
+ # Change to project root
40
+ cd "$PROJECT_ROOT"
41
+
42
+ # Run Playwright tests with TEST_URL environment variable
43
+ echo -e "${YELLOW}⏳ Running assessment...${NC}\n"
44
+
45
+ TEST_URL="$TARGET_URL" npx playwright test "$TEST_FILE" --project="$BROWSER" --workers=1
46
+
47
+ # Check if tests passed
48
+ if [ $? -eq 0 ]; then
49
+ echo ""
50
+ echo -e "${GREEN}✅ Assessment completed successfully!${NC}"
51
+
52
+ # Find the latest JSON report
53
+ LATEST_JSON=$(ls -t "$PROJECT_ROOT/tests/reports/testability-results-"*.json 2>/dev/null | head -1)
54
+
55
+ if [ -n "$LATEST_JSON" ]; then
56
+ # Generate HTML report
57
+ echo -e "\n${YELLOW}📊 Generating HTML report...${NC}\n"
58
+ node "$SCRIPT_DIR/generate-html-report.js" "$LATEST_JSON"
59
+
60
+ echo ""
61
+ echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
62
+ echo -e "${GREEN}✓ Complete! Check your browser for the report.${NC}"
63
+ echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
64
+ else
65
+ echo -e "${YELLOW}⚠️ JSON report not found${NC}"
66
+ fi
67
+ else
68
+ echo -e "\n${RED}❌ Assessment failed${NC}"
69
+ exit 1
70
+ fi
@@ -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
- ## Core Principle
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
- **Visual bugs are bugs. Test what users see.**
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
- **Process:**
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 on mobile', async ({ page }) => {
37
- await page.setViewportSize({ width: 375, height: 667 }); // iPhone
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
- **Configuration:**
92
+ ---
93
+
94
+ ## Handling Dynamic Content
95
+
45
96
  ```javascript
46
- // playwright.config.js
47
- export default {
48
- expect: {
49
- toHaveScreenshot: {
50
- maxDiffPixels: 100, // Allow 100 pixel difference
51
- threshold: 0.2, // 20% similarity threshold
52
- animations: 'disabled', // Disable animations
53
- caret: 'hide' // Hide cursor
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
- ## AI-Powered Visual Testing
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('homepage visual test', async ({ page }) => {
118
+ test('AI-powered visual test', async ({ page }) => {
66
119
  await page.goto('https://example.com');
67
120
 
68
- // AI-powered comparison (ignores minor anti-aliasing differences)
121
+ // Percy uses AI to ignore anti-aliasing, minor font differences
69
122
  await percySnapshot(page, 'Homepage');
70
123
  });
71
- ```
72
124
 
73
- ## Cross-Browser Visual Testing
125
+ test('component visual test', async ({ page }) => {
126
+ await page.goto('https://example.com/components');
74
127
 
75
- ```javascript
76
- test.describe('cross-browser visual consistency', () => {
77
- test('Chrome vs Firefox', async ({ browser }) => {
78
- const chromePage = await browser.newPage();
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
- ## Dynamic Content Handling
136
+ ---
89
137
 
90
- **Mask dynamic elements:**
91
- ```javascript
92
- test('ignore dynamic content', async ({ page }) => {
93
- await page.goto('https://example.com');
138
+ ## Playwright Configuration
94
139
 
95
- await expect(page).toHaveScreenshot({
96
- mask: [
97
- page.locator('.timestamp'), // Mask timestamps
98
- page.locator('.user-count'), // Mask dynamic counters
99
- page.locator('.advertisement') // Mask ads
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
- ## With qe-visual-tester Agent
155
+ ---
156
+
157
+ ## Agent-Driven Visual Testing
106
158
 
107
159
  ```typescript
108
- // Agent performs comprehensive visual testing
109
- const results = await agent.visualRegressionTest({
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
- // totalPages: 3,
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
- ## Remember
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
- **Functional tests don't catch visual bugs.**
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
- Visual regressions include:
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 ignore insignificant differences, and generates visual diff reports.
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.