agentic-qe 1.4.3 → 1.5.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 (410) hide show
  1. package/.claude/agents/qe-api-contract-validator.md +133 -27
  2. package/.claude/agents/qe-api-contract-validator.md.backup +1148 -0
  3. package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +1148 -0
  4. package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +1123 -0
  5. package/.claude/agents/qe-chaos-engineer.md +142 -23
  6. package/.claude/agents/qe-chaos-engineer.md.backup +808 -0
  7. package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +808 -0
  8. package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +787 -0
  9. package/.claude/agents/qe-code-complexity.md +111 -23
  10. package/.claude/agents/qe-code-complexity.md.backup +291 -0
  11. package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +291 -0
  12. package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +286 -0
  13. package/.claude/agents/qe-coverage-analyzer.md +306 -30
  14. package/.claude/agents/qe-coverage-analyzer.md.backup +467 -0
  15. package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +467 -0
  16. package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +438 -0
  17. package/.claude/agents/qe-deployment-readiness.md +84 -28
  18. package/.claude/agents/qe-deployment-readiness.md.backup +1166 -0
  19. package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +1166 -0
  20. package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +1140 -0
  21. package/.claude/agents/qe-flaky-test-hunter.md +277 -35
  22. package/.claude/agents/qe-flaky-test-hunter.md.backup +1195 -0
  23. package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +1195 -0
  24. package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +1162 -0
  25. package/.claude/agents/qe-fleet-commander.md +126 -23
  26. package/.claude/agents/qe-fleet-commander.md.backup +718 -0
  27. package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +718 -0
  28. package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +697 -0
  29. package/.claude/agents/qe-performance-tester.md +314 -57
  30. package/.claude/agents/qe-performance-tester.md.backup +428 -0
  31. package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +428 -0
  32. package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +372 -0
  33. package/.claude/agents/qe-production-intelligence.md +126 -27
  34. package/.claude/agents/qe-production-intelligence.md.backup +1219 -0
  35. package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +1219 -0
  36. package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +1194 -0
  37. package/.claude/agents/qe-quality-analyzer.md +127 -32
  38. package/.claude/agents/qe-quality-analyzer.md.backup +425 -0
  39. package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +425 -0
  40. package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +394 -0
  41. package/.claude/agents/qe-quality-gate.md +148 -33
  42. package/.claude/agents/qe-quality-gate.md.backup +446 -0
  43. package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +446 -0
  44. package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +415 -0
  45. package/.claude/agents/qe-regression-risk-analyzer.md +78 -27
  46. package/.claude/agents/qe-regression-risk-analyzer.md.backup +1009 -0
  47. package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +1009 -0
  48. package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +984 -0
  49. package/.claude/agents/qe-requirements-validator.md +131 -27
  50. package/.claude/agents/qe-requirements-validator.md.backup +748 -0
  51. package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +748 -0
  52. package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +723 -0
  53. package/.claude/agents/qe-security-scanner.md +137 -62
  54. package/.claude/agents/qe-security-scanner.md.backup +634 -0
  55. package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +634 -0
  56. package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +573 -0
  57. package/.claude/agents/qe-test-data-architect.md +129 -26
  58. package/.claude/agents/qe-test-data-architect.md.backup +1064 -0
  59. package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +1064 -0
  60. package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +1040 -0
  61. package/.claude/agents/qe-test-executor.md +165 -21
  62. package/.claude/agents/qe-test-executor.md.backup +389 -0
  63. package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +389 -0
  64. package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +369 -0
  65. package/.claude/agents/qe-test-generator.md +379 -34
  66. package/.claude/agents/qe-test-generator.md.backup +997 -0
  67. package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +997 -0
  68. package/.claude/agents/qe-visual-tester.md +236 -23
  69. package/.claude/agents/qe-visual-tester.md.backup +777 -0
  70. package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +777 -0
  71. package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +756 -0
  72. package/.claude/agents/subagents/qe-code-reviewer.md +59 -0
  73. package/.claude/agents/subagents/qe-data-generator.md +60 -0
  74. package/.claude/agents/subagents/qe-integration-tester.md +77 -0
  75. package/.claude/agents/subagents/qe-performance-validator.md +55 -0
  76. package/.claude/agents/subagents/qe-security-auditor.md +51 -0
  77. package/.claude/agents/subagents/qe-test-implementer.md +371 -0
  78. package/.claude/agents/subagents/qe-test-refactorer.md +510 -0
  79. package/.claude/agents/subagents/qe-test-writer.md +603 -0
  80. package/.claude/skills/accessibility-testing/SKILL.md +764 -777
  81. package/.claude/skills/agentic-quality-engineering/SKILL.md +0 -6
  82. package/.claude/skills/api-testing-patterns/SKILL.md +0 -12
  83. package/.claude/skills/bug-reporting-excellence/SKILL.md +0 -6
  84. package/.claude/skills/chaos-engineering-resilience/SKILL.md +0 -6
  85. package/.claude/skills/code-review-quality/SKILL.md +0 -6
  86. package/.claude/skills/compatibility-testing/SKILL.md +0 -6
  87. package/.claude/skills/compliance-testing/SKILL.md +0 -6
  88. package/.claude/skills/consultancy-practices/SKILL.md +0 -6
  89. package/.claude/skills/context-driven-testing/SKILL.md +0 -6
  90. package/.claude/skills/contract-testing/SKILL.md +0 -6
  91. package/.claude/skills/database-testing/SKILL.md +0 -6
  92. package/.claude/skills/exploratory-testing-advanced/SKILL.md +0 -6
  93. package/.claude/skills/holistic-testing-pact/SKILL.md +0 -6
  94. package/.claude/skills/localization-testing/SKILL.md +0 -6
  95. package/.claude/skills/mobile-testing/SKILL.md +535 -548
  96. package/.claude/skills/mutation-testing/SKILL.md +0 -6
  97. package/.claude/skills/performance-testing/SKILL.md +0 -6
  98. package/.claude/skills/quality-metrics/SKILL.md +0 -12
  99. package/.claude/skills/refactoring-patterns/SKILL.md +0 -6
  100. package/.claude/skills/regression-testing/SKILL.md +1033 -1045
  101. package/.claude/skills/risk-based-testing/SKILL.md +0 -12
  102. package/.claude/skills/security-testing/SKILL.md +0 -6
  103. package/.claude/skills/shift-left-testing/SKILL.md +529 -535
  104. package/.claude/skills/shift-right-testing/SKILL.md +585 -591
  105. package/.claude/skills/tdd-london-chicago/SKILL.md +0 -6
  106. package/.claude/skills/technical-writing/SKILL.md +0 -6
  107. package/.claude/skills/test-automation-strategy/SKILL.md +0 -6
  108. package/.claude/skills/test-data-management/SKILL.md +1054 -1067
  109. package/.claude/skills/test-design-techniques/SKILL.md +0 -6
  110. package/.claude/skills/test-environment-management/SKILL.md +0 -6
  111. package/.claude/skills/test-reporting-analytics/SKILL.md +0 -6
  112. package/.claude/skills/visual-testing-advanced/SKILL.md +0 -6
  113. package/.claude/skills/xp-practices/SKILL.md +0 -6
  114. package/CHANGELOG.md +504 -0
  115. package/README.md +24 -16
  116. package/dist/cli/commands/init.d.ts +4 -0
  117. package/dist/cli/commands/init.d.ts.map +1 -1
  118. package/dist/cli/commands/init.js +97 -44
  119. package/dist/cli/commands/init.js.map +1 -1
  120. package/dist/core/FleetManager.d.ts.map +1 -1
  121. package/dist/core/FleetManager.js +17 -5
  122. package/dist/core/FleetManager.js.map +1 -1
  123. package/dist/core/MemoryManager.d.ts +27 -0
  124. package/dist/core/MemoryManager.d.ts.map +1 -1
  125. package/dist/core/MemoryManager.js +69 -4
  126. package/dist/core/MemoryManager.js.map +1 -1
  127. package/dist/core/PatternDatabaseAdapter.d.ts.map +1 -1
  128. package/dist/core/PatternDatabaseAdapter.js +14 -4
  129. package/dist/core/PatternDatabaseAdapter.js.map +1 -1
  130. package/dist/learning/LearningEngine.d.ts.map +1 -1
  131. package/dist/learning/LearningEngine.js +18 -4
  132. package/dist/learning/LearningEngine.js.map +1 -1
  133. package/dist/mcp/handlers/coordination/index.d.ts +14 -14
  134. package/dist/mcp/handlers/coordination/index.d.ts.map +1 -1
  135. package/dist/mcp/handlers/coordination/index.js +14 -14
  136. package/dist/mcp/handlers/coordination/index.js.map +1 -1
  137. package/dist/mcp/handlers/coordination/task-status.d.ts.map +1 -1
  138. package/dist/mcp/handlers/coordination/task-status.js +3 -5
  139. package/dist/mcp/handlers/coordination/task-status.js.map +1 -1
  140. package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
  141. package/dist/mcp/handlers/phase2/Phase2Tools.js +39 -10
  142. package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
  143. package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +63 -0
  144. package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -0
  145. package/dist/mcp/handlers/phase3/Phase3DomainTools.js +885 -0
  146. package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -0
  147. package/dist/mcp/handlers/phase3/index.d.ts +6 -0
  148. package/dist/mcp/handlers/phase3/index.d.ts.map +1 -0
  149. package/dist/mcp/handlers/phase3/index.js +10 -0
  150. package/dist/mcp/handlers/phase3/index.js.map +1 -0
  151. package/dist/mcp/handlers/prediction/index.d.ts +10 -10
  152. package/dist/mcp/handlers/prediction/index.d.ts.map +1 -1
  153. package/dist/mcp/handlers/prediction/index.js +10 -10
  154. package/dist/mcp/handlers/prediction/index.js.map +1 -1
  155. package/dist/mcp/handlers/security/check-authz.d.ts +152 -0
  156. package/dist/mcp/handlers/security/check-authz.d.ts.map +1 -0
  157. package/dist/mcp/handlers/security/check-authz.js +434 -0
  158. package/dist/mcp/handlers/security/check-authz.js.map +1 -0
  159. package/dist/mcp/handlers/security/generate-report.d.ts +156 -0
  160. package/dist/mcp/handlers/security/generate-report.d.ts.map +1 -0
  161. package/dist/mcp/handlers/security/generate-report.js +469 -0
  162. package/dist/mcp/handlers/security/generate-report.js.map +1 -0
  163. package/dist/mcp/handlers/security/index.d.ts +80 -0
  164. package/dist/mcp/handlers/security/index.d.ts.map +1 -0
  165. package/dist/mcp/handlers/security/index.js +91 -0
  166. package/dist/mcp/handlers/security/index.js.map +1 -0
  167. package/dist/mcp/handlers/security/scan-comprehensive.d.ts +66 -0
  168. package/dist/mcp/handlers/security/scan-comprehensive.d.ts.map +1 -0
  169. package/dist/mcp/handlers/security/scan-comprehensive.js +296 -0
  170. package/dist/mcp/handlers/security/scan-comprehensive.js.map +1 -0
  171. package/dist/mcp/handlers/security/scan-dependencies.d.ts +148 -0
  172. package/dist/mcp/handlers/security/scan-dependencies.d.ts.map +1 -0
  173. package/dist/mcp/handlers/security/scan-dependencies.js +354 -0
  174. package/dist/mcp/handlers/security/scan-dependencies.js.map +1 -0
  175. package/dist/mcp/handlers/security/validate-auth.d.ts +128 -0
  176. package/dist/mcp/handlers/security/validate-auth.d.ts.map +1 -0
  177. package/dist/mcp/handlers/security/validate-auth.js +294 -0
  178. package/dist/mcp/handlers/security/validate-auth.js.map +1 -0
  179. package/dist/mcp/handlers/task-orchestrate.d.ts +21 -1
  180. package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
  181. package/dist/mcp/handlers/task-orchestrate.js +32 -2
  182. package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
  183. package/dist/mcp/handlers/test/generate-integration-tests.d.ts +95 -0
  184. package/dist/mcp/handlers/test/generate-integration-tests.d.ts.map +1 -0
  185. package/dist/mcp/handlers/test/generate-integration-tests.js +286 -0
  186. package/dist/mcp/handlers/test/generate-integration-tests.js.map +1 -0
  187. package/dist/mcp/handlers/test/generate-unit-tests.d.ts +89 -0
  188. package/dist/mcp/handlers/test/generate-unit-tests.d.ts.map +1 -0
  189. package/dist/mcp/handlers/test/generate-unit-tests.js +273 -0
  190. package/dist/mcp/handlers/test/generate-unit-tests.js.map +1 -0
  191. package/dist/mcp/handlers/test/optimize-test-suite.d.ts +97 -0
  192. package/dist/mcp/handlers/test/optimize-test-suite.d.ts.map +1 -0
  193. package/dist/mcp/handlers/test/optimize-test-suite.js +282 -0
  194. package/dist/mcp/handlers/test/optimize-test-suite.js.map +1 -0
  195. package/dist/mcp/server.d.ts.map +1 -1
  196. package/dist/mcp/server.js +212 -1
  197. package/dist/mcp/server.js.map +1 -1
  198. package/dist/mcp/tools/deprecated.d.ts +1390 -0
  199. package/dist/mcp/tools/deprecated.d.ts.map +1 -0
  200. package/dist/mcp/tools/deprecated.js +859 -0
  201. package/dist/mcp/tools/deprecated.js.map +1 -0
  202. package/dist/mcp/tools/qe/api-contract/index.d.ts +138 -0
  203. package/dist/mcp/tools/qe/api-contract/index.d.ts.map +1 -0
  204. package/dist/mcp/tools/qe/api-contract/index.js +572 -0
  205. package/dist/mcp/tools/qe/api-contract/index.js.map +1 -0
  206. package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts +110 -0
  207. package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts.map +1 -0
  208. package/dist/mcp/tools/qe/code-quality/analyze-complexity.js +381 -0
  209. package/dist/mcp/tools/qe/code-quality/analyze-complexity.js.map +1 -0
  210. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts +115 -0
  211. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts.map +1 -0
  212. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js +461 -0
  213. package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js.map +1 -0
  214. package/dist/mcp/tools/qe/code-quality/index.d.ts +12 -0
  215. package/dist/mcp/tools/qe/code-quality/index.d.ts.map +1 -0
  216. package/dist/mcp/tools/qe/code-quality/index.js +30 -0
  217. package/dist/mcp/tools/qe/code-quality/index.js.map +1 -0
  218. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts +58 -0
  219. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts.map +1 -0
  220. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js +172 -0
  221. package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js.map +1 -0
  222. package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts +73 -0
  223. package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts.map +1 -0
  224. package/dist/mcp/tools/qe/coverage/calculate-trends.js +240 -0
  225. package/dist/mcp/tools/qe/coverage/calculate-trends.js.map +1 -0
  226. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts +38 -0
  227. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts.map +1 -0
  228. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js +204 -0
  229. package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js.map +1 -0
  230. package/dist/mcp/tools/qe/coverage/index.d.ts +12 -0
  231. package/dist/mcp/tools/qe/coverage/index.d.ts.map +1 -0
  232. package/dist/mcp/tools/qe/coverage/index.js +23 -0
  233. package/dist/mcp/tools/qe/coverage/index.js.map +1 -0
  234. package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts +46 -0
  235. package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts.map +1 -0
  236. package/dist/mcp/tools/qe/coverage/recommend-tests.js +248 -0
  237. package/dist/mcp/tools/qe/coverage/recommend-tests.js.map +1 -0
  238. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts +179 -0
  239. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts.map +1 -0
  240. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js +554 -0
  241. package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js.map +1 -0
  242. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts +172 -0
  243. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts.map +1 -0
  244. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js +498 -0
  245. package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js.map +1 -0
  246. package/dist/mcp/tools/qe/flaky-detection/index.d.ts +35 -0
  247. package/dist/mcp/tools/qe/flaky-detection/index.d.ts.map +1 -0
  248. package/dist/mcp/tools/qe/flaky-detection/index.js +66 -0
  249. package/dist/mcp/tools/qe/flaky-detection/index.js.map +1 -0
  250. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts +159 -0
  251. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts.map +1 -0
  252. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js +462 -0
  253. package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js.map +1 -0
  254. package/dist/mcp/tools/qe/fleet/index.d.ts +422 -0
  255. package/dist/mcp/tools/qe/fleet/index.d.ts.map +1 -0
  256. package/dist/mcp/tools/qe/fleet/index.js +652 -0
  257. package/dist/mcp/tools/qe/fleet/index.js.map +1 -0
  258. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts +180 -0
  259. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts.map +1 -0
  260. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js +347 -0
  261. package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js.map +1 -0
  262. package/dist/mcp/tools/qe/performance/generate-report.d.ts +146 -0
  263. package/dist/mcp/tools/qe/performance/generate-report.d.ts.map +1 -0
  264. package/dist/mcp/tools/qe/performance/generate-report.js +354 -0
  265. package/dist/mcp/tools/qe/performance/generate-report.js.map +1 -0
  266. package/dist/mcp/tools/qe/performance/index.d.ts +13 -0
  267. package/dist/mcp/tools/qe/performance/index.d.ts.map +1 -0
  268. package/dist/mcp/tools/qe/performance/index.js +24 -0
  269. package/dist/mcp/tools/qe/performance/index.js.map +1 -0
  270. package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts +120 -0
  271. package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts.map +1 -0
  272. package/dist/mcp/tools/qe/performance/monitor-realtime.js +215 -0
  273. package/dist/mcp/tools/qe/performance/monitor-realtime.js.map +1 -0
  274. package/dist/mcp/tools/qe/performance/run-benchmark.d.ts +68 -0
  275. package/dist/mcp/tools/qe/performance/run-benchmark.d.ts.map +1 -0
  276. package/dist/mcp/tools/qe/performance/run-benchmark.js +120 -0
  277. package/dist/mcp/tools/qe/performance/run-benchmark.js.map +1 -0
  278. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts +239 -0
  279. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts.map +1 -0
  280. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js +671 -0
  281. package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js.map +1 -0
  282. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +219 -0
  283. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -0
  284. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +732 -0
  285. package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -0
  286. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts +447 -0
  287. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts.map +1 -0
  288. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js +551 -0
  289. package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js.map +1 -0
  290. package/dist/mcp/tools/qe/quality-gates/index.d.ts +40 -0
  291. package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -0
  292. package/dist/mcp/tools/qe/quality-gates/index.js +56 -0
  293. package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -0
  294. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts +226 -0
  295. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts.map +1 -0
  296. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js +603 -0
  297. package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js.map +1 -0
  298. package/dist/mcp/tools/qe/regression/analyze-risk.d.ts +212 -0
  299. package/dist/mcp/tools/qe/regression/analyze-risk.d.ts.map +1 -0
  300. package/dist/mcp/tools/qe/regression/analyze-risk.js +617 -0
  301. package/dist/mcp/tools/qe/regression/analyze-risk.js.map +1 -0
  302. package/dist/mcp/tools/qe/regression/index.d.ts +36 -0
  303. package/dist/mcp/tools/qe/regression/index.d.ts.map +1 -0
  304. package/dist/mcp/tools/qe/regression/index.js +63 -0
  305. package/dist/mcp/tools/qe/regression/index.js.map +1 -0
  306. package/dist/mcp/tools/qe/regression/select-tests.d.ts +241 -0
  307. package/dist/mcp/tools/qe/regression/select-tests.d.ts.map +1 -0
  308. package/dist/mcp/tools/qe/regression/select-tests.js +601 -0
  309. package/dist/mcp/tools/qe/regression/select-tests.js.map +1 -0
  310. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts +134 -0
  311. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts.map +1 -0
  312. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js +737 -0
  313. package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js.map +1 -0
  314. package/dist/mcp/tools/qe/requirements/index.d.ts +40 -0
  315. package/dist/mcp/tools/qe/requirements/index.d.ts.map +1 -0
  316. package/dist/mcp/tools/qe/requirements/index.js +84 -0
  317. package/dist/mcp/tools/qe/requirements/index.js.map +1 -0
  318. package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts +196 -0
  319. package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts.map +1 -0
  320. package/dist/mcp/tools/qe/requirements/validate-requirements.js +740 -0
  321. package/dist/mcp/tools/qe/requirements/validate-requirements.js.map +1 -0
  322. package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts +300 -0
  323. package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts.map +1 -0
  324. package/dist/mcp/tools/qe/security/detect-vulnerabilities.js +492 -0
  325. package/dist/mcp/tools/qe/security/detect-vulnerabilities.js.map +1 -0
  326. package/dist/mcp/tools/qe/security/index.d.ts +34 -0
  327. package/dist/mcp/tools/qe/security/index.d.ts.map +1 -0
  328. package/dist/mcp/tools/qe/security/index.js +44 -0
  329. package/dist/mcp/tools/qe/security/index.js.map +1 -0
  330. package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts +240 -0
  331. package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts.map +1 -0
  332. package/dist/mcp/tools/qe/security/scan-comprehensive.js +535 -0
  333. package/dist/mcp/tools/qe/security/scan-comprehensive.js.map +1 -0
  334. package/dist/mcp/tools/qe/security/validate-compliance.d.ts +299 -0
  335. package/dist/mcp/tools/qe/security/validate-compliance.d.ts.map +1 -0
  336. package/dist/mcp/tools/qe/security/validate-compliance.js +517 -0
  337. package/dist/mcp/tools/qe/security/validate-compliance.js.map +1 -0
  338. package/dist/mcp/tools/qe/shared/types.d.ts +840 -0
  339. package/dist/mcp/tools/qe/shared/types.d.ts.map +1 -0
  340. package/dist/mcp/tools/qe/shared/types.js +13 -0
  341. package/dist/mcp/tools/qe/shared/types.js.map +1 -0
  342. package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts +264 -0
  343. package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts.map +1 -0
  344. package/dist/mcp/tools/qe/test-data/analyze-schema.js +553 -0
  345. package/dist/mcp/tools/qe/test-data/analyze-schema.js.map +1 -0
  346. package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts +167 -0
  347. package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts.map +1 -0
  348. package/dist/mcp/tools/qe/test-data/generate-test-data.js +336 -0
  349. package/dist/mcp/tools/qe/test-data/generate-test-data.js.map +1 -0
  350. package/dist/mcp/tools/qe/test-data/index.d.ts +44 -0
  351. package/dist/mcp/tools/qe/test-data/index.d.ts.map +1 -0
  352. package/dist/mcp/tools/qe/test-data/index.js +90 -0
  353. package/dist/mcp/tools/qe/test-data/index.js.map +1 -0
  354. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts +165 -0
  355. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts.map +1 -0
  356. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js +342 -0
  357. package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js.map +1 -0
  358. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts +144 -0
  359. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts.map +1 -0
  360. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js +432 -0
  361. package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js.map +1 -0
  362. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts +98 -0
  363. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts.map +1 -0
  364. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js +459 -0
  365. package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js.map +1 -0
  366. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts +83 -0
  367. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts.map +1 -0
  368. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js +483 -0
  369. package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js.map +1 -0
  370. package/dist/mcp/tools/qe/test-generation/index.d.ts +56 -0
  371. package/dist/mcp/tools/qe/test-generation/index.d.ts.map +1 -0
  372. package/dist/mcp/tools/qe/test-generation/index.js +97 -0
  373. package/dist/mcp/tools/qe/test-generation/index.js.map +1 -0
  374. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts +124 -0
  375. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts.map +1 -0
  376. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js +362 -0
  377. package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js.map +1 -0
  378. package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts +119 -0
  379. package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts.map +1 -0
  380. package/dist/mcp/tools/qe/visual/compare-screenshots.js +280 -0
  381. package/dist/mcp/tools/qe/visual/compare-screenshots.js.map +1 -0
  382. package/dist/mcp/tools/qe/visual/detect-regression.d.ts +138 -0
  383. package/dist/mcp/tools/qe/visual/detect-regression.d.ts.map +1 -0
  384. package/dist/mcp/tools/qe/visual/detect-regression.js +271 -0
  385. package/dist/mcp/tools/qe/visual/detect-regression.js.map +1 -0
  386. package/dist/mcp/tools/qe/visual/index.d.ts +16 -0
  387. package/dist/mcp/tools/qe/visual/index.d.ts.map +1 -0
  388. package/dist/mcp/tools/qe/visual/index.js +22 -0
  389. package/dist/mcp/tools/qe/visual/index.js.map +1 -0
  390. package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts +276 -0
  391. package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts.map +1 -0
  392. package/dist/mcp/tools/qe/visual/validate-accessibility.js +413 -0
  393. package/dist/mcp/tools/qe/visual/validate-accessibility.js.map +1 -0
  394. package/dist/mcp/tools.d.ts +44 -0
  395. package/dist/mcp/tools.d.ts.map +1 -1
  396. package/dist/mcp/tools.js +1980 -1
  397. package/dist/mcp/tools.js.map +1 -1
  398. package/package.json +2 -2
  399. package/dist/learning/__mocks__/LearningEngine.d.ts +0 -39
  400. package/dist/learning/__mocks__/LearningEngine.d.ts.map +0 -1
  401. package/dist/learning/__mocks__/LearningEngine.js +0 -116
  402. package/dist/learning/__mocks__/LearningEngine.js.map +0 -1
  403. package/dist/utils/__mocks__/Database.d.ts +0 -85
  404. package/dist/utils/__mocks__/Database.d.ts.map +0 -1
  405. package/dist/utils/__mocks__/Database.js +0 -125
  406. package/dist/utils/__mocks__/Database.js.map +0 -1
  407. package/dist/utils/__mocks__/Logger.d.ts +0 -26
  408. package/dist/utils/__mocks__/Logger.d.ts.map +0 -1
  409. package/dist/utils/__mocks__/Logger.js +0 -44
  410. package/dist/utils/__mocks__/Logger.js.map +0 -1
@@ -1,591 +1,585 @@
1
- ---
2
- name: shift-right-testing
3
- description: Testing in production with feature flags, canary deployments, synthetic monitoring, and chaos engineering. Use when validating real-world behavior, implementing safe deployments, or ensuring production resilience.
4
- version: 1.0.0
5
- category: testing-methodologies
6
- tags: [shift-right, testing-in-production, feature-flags, canary-deployment, synthetic-monitoring, chaos-engineering, production-testing]
7
- difficulty: advanced
8
- estimated_time: 75 minutes
9
- author: agentic-qe
10
- ---
11
-
12
- # Shift-Right Testing
13
-
14
- ## Core Principle
15
-
16
- **Production is different. Test where it matters most.**
17
-
18
- Shift-right testing moves testing activities into production environments to validate real-world behavior, user experience, and system resilience under actual conditions.
19
-
20
- ## What is Shift-Right Testing?
21
-
22
- **Shift-Right:** Moving testing activities later (right on timeline) into production environments.
23
-
24
- **Why Test in Production?**
25
-
26
- Pre-production testing can't replicate:
27
- - Real user traffic patterns
28
- - Actual data volumes and variety
29
- - Production dependencies and integrations
30
- - Real network conditions and latency
31
- - Unpredictable load and edge cases
32
- - Geographic distribution
33
- - Third-party service behavior
34
-
35
- **Shift-Right solves this by:**
36
- - Validating deployments safely
37
- - Detecting regressions immediately
38
- - Monitoring real user experience
39
- - Testing with production data (safely)
40
- - Validating system resilience
41
-
42
- **Timeline:**
43
- ```
44
- Requirements → Design → Code → Deploy → Monitor
45
- ↓ ↓
46
- Test Test (production)
47
- ```
48
-
49
- ---
50
-
51
- ## Shift-Right Techniques
52
-
53
- ### 1. Feature Flags (Progressive Rollout)
54
-
55
- **Concept:** Deploy code to production but control who sees it.
56
-
57
- ```javascript
58
- import { FeatureFlags } from './feature-flags';
59
-
60
- // New feature behind flag
61
- if (FeatureFlags.isEnabled('new-checkout-flow', user)) {
62
- return <NewCheckout />; // New code (for selected users)
63
- } else {
64
- return <OldCheckout />; // Existing code (fallback)
65
- }
66
- ```
67
-
68
- **Rollout Strategy:**
69
- ```
70
- 1% → Monitor metrics for 1 hour
71
- ↓ (if healthy)
72
- 10% → A/B test performance vs old version
73
- ↓ (if successful)
74
- 50% Validate at scale, monitor errors
75
- (if stable)
76
- 100% Full rollout complete
77
- ```
78
-
79
- **Benefits:**
80
- - Test in production safely
81
- - Instant rollback (disable flag)
82
- - A/B testing built-in
83
- - Gradual risk exposure
84
- - Dark launches (test without users seeing)
85
-
86
- **Implementation with LaunchDarkly:**
87
- ```javascript
88
- import * as ld from 'launchdarkly-node-server-sdk';
89
-
90
- const client = ld.init(process.env.LD_SDK_KEY);
91
-
92
- // Check if feature enabled for user
93
- const showNewFeature = await client.variation(
94
- 'new-checkout-flow',
95
- { key: user.id, email: user.email },
96
- false // default value
97
- );
98
-
99
- if (showNewFeature) {
100
- // New code path
101
- } else {
102
- // Old code path
103
- }
104
- ```
105
-
106
- **Targeting Rules:**
107
- ```yaml
108
- feature: new-checkout-flow
109
- variations:
110
- - on: true
111
- - off: false
112
- targeting:
113
- - rule: Internal employees
114
- serve: on
115
- match: email ends with "@company.com"
116
-
117
- - rule: Beta testers
118
- serve: on
119
- match: user in segment "beta-users"
120
-
121
- - rule: Percentage rollout
122
- serve: on
123
- match: 10% of users (by user ID hash)
124
-
125
- default: off
126
- ```
127
-
128
- ---
129
-
130
- ### 2. Canary Deployments
131
-
132
- **Concept:** Deploy new version to small percentage of infrastructure, monitor, then gradually increase.
133
-
134
- **Manual Canary with Kubernetes:**
135
- ```bash
136
- # Deploy new version to 5% of pods
137
- kubectl set image deployment/api api=v2.0 --record
138
-
139
- # Monitor for 10 minutes
140
- ./monitor-metrics.sh --deployment=api --duration=10m \
141
- --metrics="error_rate,latency_p95,cpu_usage"
142
-
143
- # If healthy, scale up gradually
144
- kubectl scale deployment/api-v2 --replicas=20 # 10%
145
- ./monitor-metrics.sh --duration=10m
146
-
147
- kubectl scale deployment/api-v2 --replicas=100 # 50%
148
- ./monitor-metrics.sh --duration=10m
149
-
150
- kubectl scale deployment/api-v2 --replicas=200 # 100%
151
- kubectl scale deployment/api-v1 --replicas=0 # Remove old
152
- ```
153
-
154
- **Automated Canary with Flagger:**
155
- ```yaml
156
- apiVersion: flagger.app/v1beta1
157
- kind: Canary
158
- metadata:
159
- name: api-canary
160
- spec:
161
- targetRef:
162
- apiVersion: apps/v1
163
- kind: Deployment
164
- name: api
165
-
166
- # Canary analysis configuration
167
- analysis:
168
- interval: 1m # Check every minute
169
- threshold: 10 # Fail after 10 failed checks
170
- maxWeight: 50 # Max 50% canary traffic
171
- stepWeight: 10 # Increase by 10% each step
172
-
173
- # Success metrics (must pass)
174
- metrics:
175
- - name: request-success-rate
176
- thresholdRange:
177
- min: 99 # 99%+ success rate required
178
-
179
- - name: request-duration-p95
180
- thresholdRange:
181
- max: 500 # p95 latency < 500ms
182
-
183
- - name: error-rate
184
- thresholdRange:
185
- max: 1 # < 1% errors
186
-
187
- # Webhook notifications
188
- webhooks:
189
- - name: slack-notification
190
- url: https://hooks.slack.com/services/YOUR/WEBHOOK
191
- type: post-rollout
192
- ```
193
-
194
- **Automated Process:**
195
- 1. Deploy v2 to 10% of traffic
196
- 2. Monitor success rate, latency, errors
197
- 3. If metrics healthy → increase to 20%
198
- 4. Continue until 100% or failure detected
199
- 5. On failure automatic rollback to v1
200
-
201
- **Benefits:**
202
- - Real production validation
203
- - Gradual risk mitigation
204
- - Automatic rollback on failures
205
- - Minimal blast radius (5-10% impact)
206
-
207
- ---
208
-
209
- ### 3. Synthetic Monitoring (Active Testing)
210
-
211
- **Concept:** Continuously run automated tests against production to detect issues before users do.
212
-
213
- **Playwright Synthetic Monitor:**
214
- ```javascript
215
- // synthetic-monitor.js
216
- import { chromium } from 'playwright';
217
-
218
- async function runCheckoutFlowMonitor() {
219
- const browser = await chromium.launch();
220
- const page = await browser.newPage();
221
- const start = Date.now();
222
-
223
- try {
224
- // Critical user journey: Add to cart → Checkout
225
- await page.goto('https://example.com');
226
- await page.click('[data-test=add-to-cart]');
227
- await page.click('[data-test=checkout]');
228
- await page.fill('[data-test=email]', 'synthetic@monitor.test');
229
- await page.fill('[data-test=card]', '4242424242424242'); // Test mode
230
-
231
- // Don't actually complete purchase (test mode stops here)
232
-
233
- const duration = Date.now() - start;
234
-
235
- // Report success metric
236
- await reportMetric('checkout-flow', {
237
- success: true,
238
- duration,
239
- timestamp: new Date()
240
- });
241
-
242
- console.log(`✅ Checkout flow healthy (${duration}ms)`);
243
-
244
- } catch (error) {
245
- // Alert on failure
246
- await reportMetric('checkout-flow', {
247
- success: false,
248
- error: error.message,
249
- timestamp: new Date()
250
- });
251
-
252
- await alertOncall({
253
- severity: 'critical',
254
- message: 'Checkout flow failed in production',
255
- error: error.message
256
- });
257
-
258
- console.error(`❌ Checkout flow failed: ${error.message}`);
259
- } finally {
260
- await browser.close();
261
- }
262
- }
263
-
264
- // Run every 5 minutes
265
- setInterval(runCheckoutFlowMonitor, 5 * 60 * 1000);
266
- ```
267
-
268
- **Datadog Synthetic Monitoring:**
269
- ```yaml
270
- # synthetics.yaml
271
- tests:
272
- - name: "API Health Check"
273
- type: api
274
- request:
275
- url: "https://api.example.com/health"
276
- method: GET
277
- assertions:
278
- - type: statusCode
279
- operator: is
280
- target: 200
281
- - type: responseTime
282
- operator: lessThan
283
- target: 500
284
- locations: ["us-east-1", "eu-west-1", "ap-southeast-1"]
285
- frequency: 300 # 5 minutes
286
-
287
- - name: "Checkout Flow E2E"
288
- type: browser
289
- steps:
290
- - type: navigateTo
291
- url: "https://example.com"
292
- - type: click
293
- selector: "[data-test=add-to-cart]"
294
- - type: click
295
- selector: "[data-test=checkout]"
296
- assertions:
297
- - type: element
298
- selector: "[data-test=checkout-success]"
299
- operator: isVisible
300
- frequency: 600 # 10 minutes
301
- ```
302
-
303
- **Benefits:**
304
- - Proactive issue detection
305
- - User experience validation
306
- - SLA monitoring
307
- - Geographic validation (test from multiple regions)
308
-
309
- ---
310
-
311
- ### 4. Chaos Engineering (Resilience Testing)
312
-
313
- **Concept:** Intentionally introduce failures in production to validate system resilience.
314
-
315
- **Principles (Netflix Chaos Monkey):**
316
- 1. Define steady state (normal system behavior)
317
- 2. Hypothesize steady state continues during chaos
318
- 3. Introduce real-world failures
319
- 4. Try to disprove hypothesis
320
- 5. Minimize blast radius
321
-
322
- **Example: Instance Failure Test**
323
- ```javascript
324
- import { ChaosMonkey } from './chaos';
325
-
326
- async function testInstanceResilience() {
327
- // 1. Baseline: Record normal behavior
328
- const baseline = await collectMetrics('api', '5m');
329
- console.log(`Baseline: ${baseline.successRate}% success, ${baseline.latencyP95}ms p95`);
330
-
331
- // 2. Hypothesis: System handles 1 instance failure gracefully
332
- console.log('Hypothesis: Killing 1 instance won\'t impact users');
333
-
334
- // 3. Introduce chaos (kill random instance)
335
- await ChaosMonkey.killRandomInstance({
336
- service: 'api',
337
- count: 1, // Kill 1 instance
338
- duration: '5m'
339
- });
340
-
341
- // 4. Measure impact
342
- const chaosMetrics = await collectMetrics('api', '5m');
343
- console.log(`During chaos: ${chaosMetrics.successRate}% success, ${chaosMetrics.latencyP95}ms p95`);
344
-
345
- // 5. Verify hypothesis
346
- const successRateDrop = baseline.successRate - chaosMetrics.successRate;
347
- const latencyIncrease = chaosMetrics.latencyP95 - baseline.latencyP95;
348
-
349
- if (successRateDrop < 0.1 && latencyIncrease < 50) {
350
- console.log('✅ System is resilient to instance failures');
351
- } else {
352
- console.log('❌ System not resilient. Add redundancy!');
353
- }
354
- }
355
-
356
- // Run weekly during low traffic
357
- schedule.weekly('Sunday 3am', testInstanceResilience);
358
- ```
359
-
360
- **Common Chaos Experiments:**
361
-
362
- **a) Instance Failures**
363
- ```javascript
364
- // Kill random instances (10% of fleet)
365
- await ChaosMonkey.killRandomInstance({
366
- service: 'api',
367
- percentage: 10,
368
- duration: '10m'
369
- });
370
- ```
371
-
372
- **b) Network Latency**
373
- ```javascript
374
- // Inject 500ms latency to database calls
375
- await ChaosMonkey.injectLatency({
376
- service: 'database',
377
- latency: '500ms',
378
- percentage: 20 // 20% of requests
379
- });
380
- ```
381
-
382
- **c) Dependency Failures**
383
- ```javascript
384
- // Simulate payment gateway outage
385
- await ChaosMonkey.blockService({
386
- service: 'payment-gateway',
387
- duration: '5m'
388
- });
389
-
390
- // Verify: Graceful degradation? Retry logic working?
391
- ```
392
-
393
- **d) Resource Exhaustion**
394
- ```javascript
395
- // Stress test: High CPU load
396
- await ChaosMonkey.stressCPU({
397
- service: 'api',
398
- percentage: 80, // 80% CPU usage
399
- duration: '10m'
400
- });
401
- ```
402
-
403
- **Chaos Testing Tools:**
404
- - Chaos Monkey (Netflix) - Random instance termination
405
- - Chaos Toolkit - Programmable chaos experiments
406
- - Gremlin - Chaos engineering platform
407
- - Litmus Chaos - Kubernetes chaos engineering
408
-
409
- ---
410
-
411
- ### 5. A/B Testing (Hypothesis Validation)
412
-
413
- **Concept:** Test two versions in production to determine which performs better.
414
-
415
- ```javascript
416
- import { ABTest } from './ab-testing';
417
-
418
- // Define A/B test
419
- const checkoutTest = ABTest.create({
420
- name: 'checkout-redesign',
421
- hypothesis: 'New checkout flow increases conversion by 10%',
422
-
423
- variants: {
424
- control: {
425
- weight: 50, // 50% of traffic
426
- implementation: () => <OldCheckout />
427
- },
428
- treatment: {
429
- weight: 50, // 50% of traffic
430
- implementation: () => <NewCheckout />
431
- }
432
- },
433
-
434
- metrics: {
435
- primary: 'conversion_rate', // Primary success metric
436
- secondary: ['cart_abandonment', 'time_to_purchase']
437
- },
438
-
439
- sample_size: 10000, // Users needed for statistical significance
440
- confidence: 0.95 // 95% confidence level
441
- });
442
-
443
- // Render based on variant
444
- function CheckoutPage({ user }) {
445
- const variant = checkoutTest.getVariant(user.id);
446
- const Checkout = variant.implementation;
447
-
448
- // Track metrics
449
- useEffect(() => {
450
- checkoutTest.trackImpression(user.id, variant.name);
451
- }, []);
452
-
453
- return <Checkout onComplete={() => {
454
- checkoutTest.trackConversion(user.id, variant.name);
455
- }} />;
456
- }
457
-
458
- // Analyze results after sufficient data
459
- async function analyzeTest() {
460
- const results = await checkoutTest.analyze();
461
-
462
- console.log(`Control conversion: ${results.control.conversionRate}%`);
463
- console.log(`Treatment conversion: ${results.treatment.conversionRate}%`);
464
- console.log(`Lift: ${results.lift}%`);
465
- console.log(`P-value: ${results.pValue}`);
466
- console.log(`Statistical significance: ${results.significant ? 'YES' : 'NO'}`);
467
-
468
- if (results.significant && results.lift > 0) {
469
- console.log('✅ Treatment wins! Rolling out to 100%');
470
- await rolloutToProduction('treatment');
471
- } else {
472
- console.log('❌ No significant improvement. Keeping control.');
473
- }
474
- }
475
- ```
476
-
477
- ---
478
-
479
- ## Shift-Right Best Practices
480
-
481
- ### 1. Minimize Blast Radius
482
-
483
- **Always limit exposure:**
484
- - Feature flags: 1% → 10% → 50% → 100%
485
- - Canary: 5% → 10% → 25% → 50% → 100%
486
- - Geographic: 1 region 2 regions → All regions
487
-
488
- ### 2. Automate Rollback
489
-
490
- **Never rely on manual rollback:**
491
- ```javascript
492
- // Automatic rollback on error rate spike
493
- if (errorRate > 1% || latencyP95 > 500) {
494
- await rollback();
495
- await alert('Automatic rollback triggered');
496
- }
497
- ```
498
-
499
- ### 3. Monitor Everything
500
-
501
- **Key Metrics:**
502
- - Success/error rates
503
- - Latency (p50, p95, p99)
504
- - CPU/memory usage
505
- - User-facing metrics (conversion, engagement)
506
-
507
- ### 4. Test During Low Traffic
508
-
509
- **Chaos engineering schedule:**
510
- - Weekday mornings: Low traffic
511
- - Sunday 3am: Minimal users
512
- - Avoid holidays, sales events
513
-
514
- ### 5. Have a Kill Switch
515
-
516
- **Emergency stop for everything:**
517
- ```javascript
518
- // Global kill switch (stops all experiments)
519
- if (FeatureFlags.isEnabled('global-kill-switch')) {
520
- return <SafeMode />; // Fallback to known-good state
521
- }
522
- ```
523
-
524
- ---
525
-
526
- ## Shift-Right Metrics
527
-
528
- **1. Mean Time to Detect (MTTD)**
529
- ```
530
- Time from issue occurrence to detection
531
-
532
- Target: < 5 minutes (synthetic monitoring)
533
- ```
534
-
535
- **2. Mean Time to Recover (MTTR)**
536
- ```
537
- Time from detection to resolution
538
-
539
- Target: < 15 minutes (with automatic rollback)
540
- ```
541
-
542
- **3. Blast Radius**
543
- ```
544
- Percentage of users impacted by failure
545
-
546
- Target: < 10% (canary deployment)
547
- ```
548
-
549
- **4. False Positive Rate**
550
- ```
551
- Alerts that weren't real issues
552
-
553
- Target: < 5%
554
- ```
555
-
556
- ---
557
-
558
- ## Related Skills
559
-
560
- **Testing Methodologies:**
561
- - [shift-left-testing](../shift-left-testing/) - Testing BEFORE production (complement)
562
- - [chaos-engineering-resilience](../chaos-engineering-resilience/) - Detailed chaos testing
563
- - [regression-testing](../regression-testing/)
564
-
565
- **Infrastructure:**
566
- - [test-environment-management](../test-environment-management/)
567
- - [performance-testing](../performance-testing/)
568
-
569
- **Monitoring:**
570
- - [test-reporting-analytics](../test-reporting-analytics/)
571
- - [production-intelligence](../production-intelligence/) (agent)
572
-
573
- ---
574
-
575
- ## Remember
576
-
577
- **Production is the ultimate test environment.**
578
-
579
- **Shift-Right complements Shift-Left:**
580
- - **Shift-Left**: Catch bugs early (cheap)
581
- - **Shift-Right**: Validate real-world behavior (accurate)
582
-
583
- **Best Practices:**
584
- 1. Use feature flags for safe deployments
585
- 2. Canary deploy with automatic rollback
586
- 3. Synthetic monitoring for proactive detection
587
- 4. Chaos engineering for resilience
588
- 5. Always minimize blast radius
589
- 6. Monitor everything, alert intelligently
590
-
591
- **With Agents:** `qe-production-intelligence` monitors production metrics and converts real usage patterns into tests. `qe-chaos-engineer` orchestrates safe chaos experiments with automatic rollback. Together, they enable comprehensive shift-right testing with minimal risk.
1
+ ---
2
+ name: shift-right-testing
3
+ description: Testing in production with feature flags, canary deployments, synthetic monitoring, and chaos engineering. Use when validating real-world behavior, implementing safe deployments, or ensuring production resilience.
4
+ ---
5
+
6
+ # Shift-Right Testing
7
+
8
+ ## Core Principle
9
+
10
+ **Production is different. Test where it matters most.**
11
+
12
+ Shift-right testing moves testing activities into production environments to validate real-world behavior, user experience, and system resilience under actual conditions.
13
+
14
+ ## What is Shift-Right Testing?
15
+
16
+ **Shift-Right:** Moving testing activities later (right on timeline) into production environments.
17
+
18
+ **Why Test in Production?**
19
+
20
+ Pre-production testing can't replicate:
21
+ - Real user traffic patterns
22
+ - Actual data volumes and variety
23
+ - Production dependencies and integrations
24
+ - Real network conditions and latency
25
+ - Unpredictable load and edge cases
26
+ - Geographic distribution
27
+ - Third-party service behavior
28
+
29
+ **Shift-Right solves this by:**
30
+ - Validating deployments safely
31
+ - Detecting regressions immediately
32
+ - Monitoring real user experience
33
+ - Testing with production data (safely)
34
+ - Validating system resilience
35
+
36
+ **Timeline:**
37
+ ```
38
+ Requirements Design Code → Deploy → Monitor
39
+ ↓ ↓
40
+ Test Test (production)
41
+ ```
42
+
43
+ ---
44
+
45
+ ## Shift-Right Techniques
46
+
47
+ ### 1. Feature Flags (Progressive Rollout)
48
+
49
+ **Concept:** Deploy code to production but control who sees it.
50
+
51
+ ```javascript
52
+ import { FeatureFlags } from './feature-flags';
53
+
54
+ // New feature behind flag
55
+ if (FeatureFlags.isEnabled('new-checkout-flow', user)) {
56
+ return <NewCheckout />; // New code (for selected users)
57
+ } else {
58
+ return <OldCheckout />; // Existing code (fallback)
59
+ }
60
+ ```
61
+
62
+ **Rollout Strategy:**
63
+ ```
64
+ 1% Monitor metrics for 1 hour
65
+ ↓ (if healthy)
66
+ 10% → A/B test performance vs old version
67
+ ↓ (if successful)
68
+ 50% → Validate at scale, monitor errors
69
+ ↓ (if stable)
70
+ 100% → Full rollout complete
71
+ ```
72
+
73
+ **Benefits:**
74
+ - Test in production safely
75
+ - Instant rollback (disable flag)
76
+ - A/B testing built-in
77
+ - Gradual risk exposure
78
+ - Dark launches (test without users seeing)
79
+
80
+ **Implementation with LaunchDarkly:**
81
+ ```javascript
82
+ import * as ld from 'launchdarkly-node-server-sdk';
83
+
84
+ const client = ld.init(process.env.LD_SDK_KEY);
85
+
86
+ // Check if feature enabled for user
87
+ const showNewFeature = await client.variation(
88
+ 'new-checkout-flow',
89
+ { key: user.id, email: user.email },
90
+ false // default value
91
+ );
92
+
93
+ if (showNewFeature) {
94
+ // New code path
95
+ } else {
96
+ // Old code path
97
+ }
98
+ ```
99
+
100
+ **Targeting Rules:**
101
+ ```yaml
102
+ feature: new-checkout-flow
103
+ variations:
104
+ - on: true
105
+ - off: false
106
+ targeting:
107
+ - rule: Internal employees
108
+ serve: on
109
+ match: email ends with "@company.com"
110
+
111
+ - rule: Beta testers
112
+ serve: on
113
+ match: user in segment "beta-users"
114
+
115
+ - rule: Percentage rollout
116
+ serve: on
117
+ match: 10% of users (by user ID hash)
118
+
119
+ default: off
120
+ ```
121
+
122
+ ---
123
+
124
+ ### 2. Canary Deployments
125
+
126
+ **Concept:** Deploy new version to small percentage of infrastructure, monitor, then gradually increase.
127
+
128
+ **Manual Canary with Kubernetes:**
129
+ ```bash
130
+ # Deploy new version to 5% of pods
131
+ kubectl set image deployment/api api=v2.0 --record
132
+
133
+ # Monitor for 10 minutes
134
+ ./monitor-metrics.sh --deployment=api --duration=10m \
135
+ --metrics="error_rate,latency_p95,cpu_usage"
136
+
137
+ # If healthy, scale up gradually
138
+ kubectl scale deployment/api-v2 --replicas=20 # 10%
139
+ ./monitor-metrics.sh --duration=10m
140
+
141
+ kubectl scale deployment/api-v2 --replicas=100 # 50%
142
+ ./monitor-metrics.sh --duration=10m
143
+
144
+ kubectl scale deployment/api-v2 --replicas=200 # 100%
145
+ kubectl scale deployment/api-v1 --replicas=0 # Remove old
146
+ ```
147
+
148
+ **Automated Canary with Flagger:**
149
+ ```yaml
150
+ apiVersion: flagger.app/v1beta1
151
+ kind: Canary
152
+ metadata:
153
+ name: api-canary
154
+ spec:
155
+ targetRef:
156
+ apiVersion: apps/v1
157
+ kind: Deployment
158
+ name: api
159
+
160
+ # Canary analysis configuration
161
+ analysis:
162
+ interval: 1m # Check every minute
163
+ threshold: 10 # Fail after 10 failed checks
164
+ maxWeight: 50 # Max 50% canary traffic
165
+ stepWeight: 10 # Increase by 10% each step
166
+
167
+ # Success metrics (must pass)
168
+ metrics:
169
+ - name: request-success-rate
170
+ thresholdRange:
171
+ min: 99 # 99%+ success rate required
172
+
173
+ - name: request-duration-p95
174
+ thresholdRange:
175
+ max: 500 # p95 latency < 500ms
176
+
177
+ - name: error-rate
178
+ thresholdRange:
179
+ max: 1 # < 1% errors
180
+
181
+ # Webhook notifications
182
+ webhooks:
183
+ - name: slack-notification
184
+ url: https://hooks.slack.com/services/YOUR/WEBHOOK
185
+ type: post-rollout
186
+ ```
187
+
188
+ **Automated Process:**
189
+ 1. Deploy v2 to 10% of traffic
190
+ 2. Monitor success rate, latency, errors
191
+ 3. If metrics healthy → increase to 20%
192
+ 4. Continue until 100% or failure detected
193
+ 5. On failure → automatic rollback to v1
194
+
195
+ **Benefits:**
196
+ - Real production validation
197
+ - Gradual risk mitigation
198
+ - Automatic rollback on failures
199
+ - Minimal blast radius (5-10% impact)
200
+
201
+ ---
202
+
203
+ ### 3. Synthetic Monitoring (Active Testing)
204
+
205
+ **Concept:** Continuously run automated tests against production to detect issues before users do.
206
+
207
+ **Playwright Synthetic Monitor:**
208
+ ```javascript
209
+ // synthetic-monitor.js
210
+ import { chromium } from 'playwright';
211
+
212
+ async function runCheckoutFlowMonitor() {
213
+ const browser = await chromium.launch();
214
+ const page = await browser.newPage();
215
+ const start = Date.now();
216
+
217
+ try {
218
+ // Critical user journey: Add to cart → Checkout
219
+ await page.goto('https://example.com');
220
+ await page.click('[data-test=add-to-cart]');
221
+ await page.click('[data-test=checkout]');
222
+ await page.fill('[data-test=email]', 'synthetic@monitor.test');
223
+ await page.fill('[data-test=card]', '4242424242424242'); // Test mode
224
+
225
+ // Don't actually complete purchase (test mode stops here)
226
+
227
+ const duration = Date.now() - start;
228
+
229
+ // Report success metric
230
+ await reportMetric('checkout-flow', {
231
+ success: true,
232
+ duration,
233
+ timestamp: new Date()
234
+ });
235
+
236
+ console.log(`✅ Checkout flow healthy (${duration}ms)`);
237
+
238
+ } catch (error) {
239
+ // Alert on failure
240
+ await reportMetric('checkout-flow', {
241
+ success: false,
242
+ error: error.message,
243
+ timestamp: new Date()
244
+ });
245
+
246
+ await alertOncall({
247
+ severity: 'critical',
248
+ message: 'Checkout flow failed in production',
249
+ error: error.message
250
+ });
251
+
252
+ console.error(`❌ Checkout flow failed: ${error.message}`);
253
+ } finally {
254
+ await browser.close();
255
+ }
256
+ }
257
+
258
+ // Run every 5 minutes
259
+ setInterval(runCheckoutFlowMonitor, 5 * 60 * 1000);
260
+ ```
261
+
262
+ **Datadog Synthetic Monitoring:**
263
+ ```yaml
264
+ # synthetics.yaml
265
+ tests:
266
+ - name: "API Health Check"
267
+ type: api
268
+ request:
269
+ url: "https://api.example.com/health"
270
+ method: GET
271
+ assertions:
272
+ - type: statusCode
273
+ operator: is
274
+ target: 200
275
+ - type: responseTime
276
+ operator: lessThan
277
+ target: 500
278
+ locations: ["us-east-1", "eu-west-1", "ap-southeast-1"]
279
+ frequency: 300 # 5 minutes
280
+
281
+ - name: "Checkout Flow E2E"
282
+ type: browser
283
+ steps:
284
+ - type: navigateTo
285
+ url: "https://example.com"
286
+ - type: click
287
+ selector: "[data-test=add-to-cart]"
288
+ - type: click
289
+ selector: "[data-test=checkout]"
290
+ assertions:
291
+ - type: element
292
+ selector: "[data-test=checkout-success]"
293
+ operator: isVisible
294
+ frequency: 600 # 10 minutes
295
+ ```
296
+
297
+ **Benefits:**
298
+ - Proactive issue detection
299
+ - User experience validation
300
+ - SLA monitoring
301
+ - Geographic validation (test from multiple regions)
302
+
303
+ ---
304
+
305
+ ### 4. Chaos Engineering (Resilience Testing)
306
+
307
+ **Concept:** Intentionally introduce failures in production to validate system resilience.
308
+
309
+ **Principles (Netflix Chaos Monkey):**
310
+ 1. Define steady state (normal system behavior)
311
+ 2. Hypothesize steady state continues during chaos
312
+ 3. Introduce real-world failures
313
+ 4. Try to disprove hypothesis
314
+ 5. Minimize blast radius
315
+
316
+ **Example: Instance Failure Test**
317
+ ```javascript
318
+ import { ChaosMonkey } from './chaos';
319
+
320
+ async function testInstanceResilience() {
321
+ // 1. Baseline: Record normal behavior
322
+ const baseline = await collectMetrics('api', '5m');
323
+ console.log(`Baseline: ${baseline.successRate}% success, ${baseline.latencyP95}ms p95`);
324
+
325
+ // 2. Hypothesis: System handles 1 instance failure gracefully
326
+ console.log('Hypothesis: Killing 1 instance won\'t impact users');
327
+
328
+ // 3. Introduce chaos (kill random instance)
329
+ await ChaosMonkey.killRandomInstance({
330
+ service: 'api',
331
+ count: 1, // Kill 1 instance
332
+ duration: '5m'
333
+ });
334
+
335
+ // 4. Measure impact
336
+ const chaosMetrics = await collectMetrics('api', '5m');
337
+ console.log(`During chaos: ${chaosMetrics.successRate}% success, ${chaosMetrics.latencyP95}ms p95`);
338
+
339
+ // 5. Verify hypothesis
340
+ const successRateDrop = baseline.successRate - chaosMetrics.successRate;
341
+ const latencyIncrease = chaosMetrics.latencyP95 - baseline.latencyP95;
342
+
343
+ if (successRateDrop < 0.1 && latencyIncrease < 50) {
344
+ console.log('✅ System is resilient to instance failures');
345
+ } else {
346
+ console.log('❌ System not resilient. Add redundancy!');
347
+ }
348
+ }
349
+
350
+ // Run weekly during low traffic
351
+ schedule.weekly('Sunday 3am', testInstanceResilience);
352
+ ```
353
+
354
+ **Common Chaos Experiments:**
355
+
356
+ **a) Instance Failures**
357
+ ```javascript
358
+ // Kill random instances (10% of fleet)
359
+ await ChaosMonkey.killRandomInstance({
360
+ service: 'api',
361
+ percentage: 10,
362
+ duration: '10m'
363
+ });
364
+ ```
365
+
366
+ **b) Network Latency**
367
+ ```javascript
368
+ // Inject 500ms latency to database calls
369
+ await ChaosMonkey.injectLatency({
370
+ service: 'database',
371
+ latency: '500ms',
372
+ percentage: 20 // 20% of requests
373
+ });
374
+ ```
375
+
376
+ **c) Dependency Failures**
377
+ ```javascript
378
+ // Simulate payment gateway outage
379
+ await ChaosMonkey.blockService({
380
+ service: 'payment-gateway',
381
+ duration: '5m'
382
+ });
383
+
384
+ // Verify: Graceful degradation? Retry logic working?
385
+ ```
386
+
387
+ **d) Resource Exhaustion**
388
+ ```javascript
389
+ // Stress test: High CPU load
390
+ await ChaosMonkey.stressCPU({
391
+ service: 'api',
392
+ percentage: 80, // 80% CPU usage
393
+ duration: '10m'
394
+ });
395
+ ```
396
+
397
+ **Chaos Testing Tools:**
398
+ - Chaos Monkey (Netflix) - Random instance termination
399
+ - Chaos Toolkit - Programmable chaos experiments
400
+ - Gremlin - Chaos engineering platform
401
+ - Litmus Chaos - Kubernetes chaos engineering
402
+
403
+ ---
404
+
405
+ ### 5. A/B Testing (Hypothesis Validation)
406
+
407
+ **Concept:** Test two versions in production to determine which performs better.
408
+
409
+ ```javascript
410
+ import { ABTest } from './ab-testing';
411
+
412
+ // Define A/B test
413
+ const checkoutTest = ABTest.create({
414
+ name: 'checkout-redesign',
415
+ hypothesis: 'New checkout flow increases conversion by 10%',
416
+
417
+ variants: {
418
+ control: {
419
+ weight: 50, // 50% of traffic
420
+ implementation: () => <OldCheckout />
421
+ },
422
+ treatment: {
423
+ weight: 50, // 50% of traffic
424
+ implementation: () => <NewCheckout />
425
+ }
426
+ },
427
+
428
+ metrics: {
429
+ primary: 'conversion_rate', // Primary success metric
430
+ secondary: ['cart_abandonment', 'time_to_purchase']
431
+ },
432
+
433
+ sample_size: 10000, // Users needed for statistical significance
434
+ confidence: 0.95 // 95% confidence level
435
+ });
436
+
437
+ // Render based on variant
438
+ function CheckoutPage({ user }) {
439
+ const variant = checkoutTest.getVariant(user.id);
440
+ const Checkout = variant.implementation;
441
+
442
+ // Track metrics
443
+ useEffect(() => {
444
+ checkoutTest.trackImpression(user.id, variant.name);
445
+ }, []);
446
+
447
+ return <Checkout onComplete={() => {
448
+ checkoutTest.trackConversion(user.id, variant.name);
449
+ }} />;
450
+ }
451
+
452
+ // Analyze results after sufficient data
453
+ async function analyzeTest() {
454
+ const results = await checkoutTest.analyze();
455
+
456
+ console.log(`Control conversion: ${results.control.conversionRate}%`);
457
+ console.log(`Treatment conversion: ${results.treatment.conversionRate}%`);
458
+ console.log(`Lift: ${results.lift}%`);
459
+ console.log(`P-value: ${results.pValue}`);
460
+ console.log(`Statistical significance: ${results.significant ? 'YES' : 'NO'}`);
461
+
462
+ if (results.significant && results.lift > 0) {
463
+ console.log('✅ Treatment wins! Rolling out to 100%');
464
+ await rolloutToProduction('treatment');
465
+ } else {
466
+ console.log('❌ No significant improvement. Keeping control.');
467
+ }
468
+ }
469
+ ```
470
+
471
+ ---
472
+
473
+ ## Shift-Right Best Practices
474
+
475
+ ### 1. Minimize Blast Radius
476
+
477
+ **Always limit exposure:**
478
+ - Feature flags: 1% → 10% → 50% → 100%
479
+ - Canary: 5% → 10% → 25% → 50% → 100%
480
+ - Geographic: 1 region → 2 regions → All regions
481
+
482
+ ### 2. Automate Rollback
483
+
484
+ **Never rely on manual rollback:**
485
+ ```javascript
486
+ // Automatic rollback on error rate spike
487
+ if (errorRate > 1% || latencyP95 > 500) {
488
+ await rollback();
489
+ await alert('Automatic rollback triggered');
490
+ }
491
+ ```
492
+
493
+ ### 3. Monitor Everything
494
+
495
+ **Key Metrics:**
496
+ - Success/error rates
497
+ - Latency (p50, p95, p99)
498
+ - CPU/memory usage
499
+ - User-facing metrics (conversion, engagement)
500
+
501
+ ### 4. Test During Low Traffic
502
+
503
+ **Chaos engineering schedule:**
504
+ - Weekday mornings: Low traffic
505
+ - Sunday 3am: Minimal users
506
+ - Avoid holidays, sales events
507
+
508
+ ### 5. Have a Kill Switch
509
+
510
+ **Emergency stop for everything:**
511
+ ```javascript
512
+ // Global kill switch (stops all experiments)
513
+ if (FeatureFlags.isEnabled('global-kill-switch')) {
514
+ return <SafeMode />; // Fallback to known-good state
515
+ }
516
+ ```
517
+
518
+ ---
519
+
520
+ ## Shift-Right Metrics
521
+
522
+ **1. Mean Time to Detect (MTTD)**
523
+ ```
524
+ Time from issue occurrence to detection
525
+
526
+ Target: < 5 minutes (synthetic monitoring)
527
+ ```
528
+
529
+ **2. Mean Time to Recover (MTTR)**
530
+ ```
531
+ Time from detection to resolution
532
+
533
+ Target: < 15 minutes (with automatic rollback)
534
+ ```
535
+
536
+ **3. Blast Radius**
537
+ ```
538
+ Percentage of users impacted by failure
539
+
540
+ Target: < 10% (canary deployment)
541
+ ```
542
+
543
+ **4. False Positive Rate**
544
+ ```
545
+ Alerts that weren't real issues
546
+
547
+ Target: < 5%
548
+ ```
549
+
550
+ ---
551
+
552
+ ## Related Skills
553
+
554
+ **Testing Methodologies:**
555
+ - [shift-left-testing](../shift-left-testing/) - Testing BEFORE production (complement)
556
+ - [chaos-engineering-resilience](../chaos-engineering-resilience/) - Detailed chaos testing
557
+ - [regression-testing](../regression-testing/)
558
+
559
+ **Infrastructure:**
560
+ - [test-environment-management](../test-environment-management/)
561
+ - [performance-testing](../performance-testing/)
562
+
563
+ **Monitoring:**
564
+ - [test-reporting-analytics](../test-reporting-analytics/)
565
+ - [production-intelligence](../production-intelligence/) (agent)
566
+
567
+ ---
568
+
569
+ ## Remember
570
+
571
+ **Production is the ultimate test environment.**
572
+
573
+ **Shift-Right complements Shift-Left:**
574
+ - **Shift-Left**: Catch bugs early (cheap)
575
+ - **Shift-Right**: Validate real-world behavior (accurate)
576
+
577
+ **Best Practices:**
578
+ 1. Use feature flags for safe deployments
579
+ 2. Canary deploy with automatic rollback
580
+ 3. Synthetic monitoring for proactive detection
581
+ 4. Chaos engineering for resilience
582
+ 5. Always minimize blast radius
583
+ 6. Monitor everything, alert intelligently
584
+
585
+ **With Agents:** `qe-production-intelligence` monitors production metrics and converts real usage patterns into tests. `qe-chaos-engineer` orchestrates safe chaos experiments with automatic rollback. Together, they enable comprehensive shift-right testing with minimal risk.