agentic-qe 1.4.4 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/qe-api-contract-validator.md +133 -27
- package/.claude/agents/qe-api-contract-validator.md.backup +1148 -0
- package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +1148 -0
- package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +1123 -0
- package/.claude/agents/qe-chaos-engineer.md +142 -23
- package/.claude/agents/qe-chaos-engineer.md.backup +808 -0
- package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +808 -0
- package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +787 -0
- package/.claude/agents/qe-code-complexity.md +111 -23
- package/.claude/agents/qe-code-complexity.md.backup +291 -0
- package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +291 -0
- package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +286 -0
- package/.claude/agents/qe-coverage-analyzer.md +306 -30
- package/.claude/agents/qe-coverage-analyzer.md.backup +467 -0
- package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +467 -0
- package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +438 -0
- package/.claude/agents/qe-deployment-readiness.md +84 -28
- package/.claude/agents/qe-deployment-readiness.md.backup +1166 -0
- package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +1166 -0
- package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +1140 -0
- package/.claude/agents/qe-flaky-test-hunter.md +277 -35
- package/.claude/agents/qe-flaky-test-hunter.md.backup +1195 -0
- package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +1195 -0
- package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +1162 -0
- package/.claude/agents/qe-fleet-commander.md +126 -23
- package/.claude/agents/qe-fleet-commander.md.backup +718 -0
- package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +718 -0
- package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +697 -0
- package/.claude/agents/qe-performance-tester.md +314 -57
- package/.claude/agents/qe-performance-tester.md.backup +428 -0
- package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +428 -0
- package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +372 -0
- package/.claude/agents/qe-production-intelligence.md +126 -27
- package/.claude/agents/qe-production-intelligence.md.backup +1219 -0
- package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +1219 -0
- package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +1194 -0
- package/.claude/agents/qe-quality-analyzer.md +127 -32
- package/.claude/agents/qe-quality-analyzer.md.backup +425 -0
- package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +425 -0
- package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +394 -0
- package/.claude/agents/qe-quality-gate.md +148 -33
- package/.claude/agents/qe-quality-gate.md.backup +446 -0
- package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +446 -0
- package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +415 -0
- package/.claude/agents/qe-regression-risk-analyzer.md +78 -27
- package/.claude/agents/qe-regression-risk-analyzer.md.backup +1009 -0
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +1009 -0
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +984 -0
- package/.claude/agents/qe-requirements-validator.md +131 -27
- package/.claude/agents/qe-requirements-validator.md.backup +748 -0
- package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +748 -0
- package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +723 -0
- package/.claude/agents/qe-security-scanner.md +137 -62
- package/.claude/agents/qe-security-scanner.md.backup +634 -0
- package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +634 -0
- package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +573 -0
- package/.claude/agents/qe-test-data-architect.md +129 -26
- package/.claude/agents/qe-test-data-architect.md.backup +1064 -0
- package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +1064 -0
- package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +1040 -0
- package/.claude/agents/qe-test-executor.md +165 -21
- package/.claude/agents/qe-test-executor.md.backup +389 -0
- package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +389 -0
- package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +369 -0
- package/.claude/agents/qe-test-generator.md +379 -34
- package/.claude/agents/qe-test-generator.md.backup +997 -0
- package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +997 -0
- package/.claude/agents/qe-visual-tester.md +236 -23
- package/.claude/agents/qe-visual-tester.md.backup +777 -0
- package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +777 -0
- package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +756 -0
- package/.claude/agents/subagents/qe-code-reviewer.md +59 -0
- package/.claude/agents/subagents/qe-data-generator.md +60 -0
- package/.claude/agents/subagents/qe-integration-tester.md +77 -0
- package/.claude/agents/subagents/qe-performance-validator.md +55 -0
- package/.claude/agents/subagents/qe-security-auditor.md +51 -0
- package/.claude/agents/subagents/qe-test-implementer.md +371 -0
- package/.claude/agents/subagents/qe-test-refactorer.md +510 -0
- package/.claude/agents/subagents/qe-test-writer.md +603 -0
- package/.claude/skills/accessibility-testing/SKILL.md +764 -777
- package/.claude/skills/agentic-quality-engineering/SKILL.md +0 -6
- package/.claude/skills/api-testing-patterns/SKILL.md +0 -12
- package/.claude/skills/bug-reporting-excellence/SKILL.md +0 -6
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +0 -6
- package/.claude/skills/code-review-quality/SKILL.md +0 -6
- package/.claude/skills/compatibility-testing/SKILL.md +0 -6
- package/.claude/skills/compliance-testing/SKILL.md +0 -6
- package/.claude/skills/consultancy-practices/SKILL.md +0 -6
- package/.claude/skills/context-driven-testing/SKILL.md +0 -6
- package/.claude/skills/contract-testing/SKILL.md +0 -6
- package/.claude/skills/database-testing/SKILL.md +0 -6
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +0 -6
- package/.claude/skills/holistic-testing-pact/SKILL.md +0 -6
- package/.claude/skills/localization-testing/SKILL.md +0 -6
- package/.claude/skills/mobile-testing/SKILL.md +535 -548
- package/.claude/skills/mutation-testing/SKILL.md +0 -6
- package/.claude/skills/performance-testing/SKILL.md +0 -6
- package/.claude/skills/quality-metrics/SKILL.md +0 -12
- package/.claude/skills/refactoring-patterns/SKILL.md +0 -6
- package/.claude/skills/regression-testing/SKILL.md +1033 -1045
- package/.claude/skills/risk-based-testing/SKILL.md +0 -12
- package/.claude/skills/security-testing/SKILL.md +0 -6
- package/.claude/skills/shift-left-testing/SKILL.md +529 -535
- package/.claude/skills/shift-right-testing/SKILL.md +585 -591
- package/.claude/skills/tdd-london-chicago/SKILL.md +0 -6
- package/.claude/skills/technical-writing/SKILL.md +0 -6
- package/.claude/skills/test-automation-strategy/SKILL.md +0 -6
- package/.claude/skills/test-data-management/SKILL.md +1054 -1067
- package/.claude/skills/test-design-techniques/SKILL.md +0 -6
- package/.claude/skills/test-environment-management/SKILL.md +0 -6
- package/.claude/skills/test-reporting-analytics/SKILL.md +0 -6
- package/.claude/skills/visual-testing-advanced/SKILL.md +0 -6
- package/.claude/skills/xp-practices/SKILL.md +0 -6
- package/CHANGELOG.md +426 -5
- package/README.md +24 -19
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +97 -44
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/mcp/handlers/coordination/index.d.ts +14 -14
- package/dist/mcp/handlers/coordination/index.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/index.js +14 -14
- package/dist/mcp/handlers/coordination/index.js.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.js +39 -10
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +63 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js +885 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -0
- package/dist/mcp/handlers/phase3/index.d.ts +6 -0
- package/dist/mcp/handlers/phase3/index.d.ts.map +1 -0
- package/dist/mcp/handlers/phase3/index.js +10 -0
- package/dist/mcp/handlers/phase3/index.js.map +1 -0
- package/dist/mcp/handlers/prediction/index.d.ts +10 -10
- package/dist/mcp/handlers/prediction/index.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/index.js +10 -10
- package/dist/mcp/handlers/prediction/index.js.map +1 -1
- package/dist/mcp/handlers/security/check-authz.d.ts +152 -0
- package/dist/mcp/handlers/security/check-authz.d.ts.map +1 -0
- package/dist/mcp/handlers/security/check-authz.js +434 -0
- package/dist/mcp/handlers/security/check-authz.js.map +1 -0
- package/dist/mcp/handlers/security/generate-report.d.ts +156 -0
- package/dist/mcp/handlers/security/generate-report.d.ts.map +1 -0
- package/dist/mcp/handlers/security/generate-report.js +469 -0
- package/dist/mcp/handlers/security/generate-report.js.map +1 -0
- package/dist/mcp/handlers/security/index.d.ts +80 -0
- package/dist/mcp/handlers/security/index.d.ts.map +1 -0
- package/dist/mcp/handlers/security/index.js +91 -0
- package/dist/mcp/handlers/security/index.js.map +1 -0
- package/dist/mcp/handlers/security/scan-comprehensive.d.ts +66 -0
- package/dist/mcp/handlers/security/scan-comprehensive.d.ts.map +1 -0
- package/dist/mcp/handlers/security/scan-comprehensive.js +296 -0
- package/dist/mcp/handlers/security/scan-comprehensive.js.map +1 -0
- package/dist/mcp/handlers/security/scan-dependencies.d.ts +148 -0
- package/dist/mcp/handlers/security/scan-dependencies.d.ts.map +1 -0
- package/dist/mcp/handlers/security/scan-dependencies.js +354 -0
- package/dist/mcp/handlers/security/scan-dependencies.js.map +1 -0
- package/dist/mcp/handlers/security/validate-auth.d.ts +128 -0
- package/dist/mcp/handlers/security/validate-auth.d.ts.map +1 -0
- package/dist/mcp/handlers/security/validate-auth.js +294 -0
- package/dist/mcp/handlers/security/validate-auth.js.map +1 -0
- package/dist/mcp/handlers/test/generate-integration-tests.d.ts +95 -0
- package/dist/mcp/handlers/test/generate-integration-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/test/generate-integration-tests.js +286 -0
- package/dist/mcp/handlers/test/generate-integration-tests.js.map +1 -0
- package/dist/mcp/handlers/test/generate-unit-tests.d.ts +89 -0
- package/dist/mcp/handlers/test/generate-unit-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/test/generate-unit-tests.js +273 -0
- package/dist/mcp/handlers/test/generate-unit-tests.js.map +1 -0
- package/dist/mcp/handlers/test/optimize-test-suite.d.ts +97 -0
- package/dist/mcp/handlers/test/optimize-test-suite.d.ts.map +1 -0
- package/dist/mcp/handlers/test/optimize-test-suite.js +282 -0
- package/dist/mcp/handlers/test/optimize-test-suite.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +211 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/deprecated.d.ts +1390 -0
- package/dist/mcp/tools/deprecated.d.ts.map +1 -0
- package/dist/mcp/tools/deprecated.js +859 -0
- package/dist/mcp/tools/deprecated.js.map +1 -0
- package/dist/mcp/tools/qe/api-contract/index.d.ts +138 -0
- package/dist/mcp/tools/qe/api-contract/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/api-contract/index.js +572 -0
- package/dist/mcp/tools/qe/api-contract/index.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts +110 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.js +381 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts +115 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js +461 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/index.d.ts +12 -0
- package/dist/mcp/tools/qe/code-quality/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/index.js +30 -0
- package/dist/mcp/tools/qe/code-quality/index.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts +58 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js +172 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts +73 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.js +240 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts +38 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js +204 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/index.d.ts +12 -0
- package/dist/mcp/tools/qe/coverage/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/index.js +23 -0
- package/dist/mcp/tools/qe/coverage/index.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts +46 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.js +248 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts +179 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js +554 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts +172 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js +498 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/index.d.ts +35 -0
- package/dist/mcp/tools/qe/flaky-detection/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/index.js +66 -0
- package/dist/mcp/tools/qe/flaky-detection/index.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts +159 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js +462 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js.map +1 -0
- package/dist/mcp/tools/qe/fleet/index.d.ts +422 -0
- package/dist/mcp/tools/qe/fleet/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/fleet/index.js +652 -0
- package/dist/mcp/tools/qe/fleet/index.js.map +1 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts +180 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js +347 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js.map +1 -0
- package/dist/mcp/tools/qe/performance/generate-report.d.ts +146 -0
- package/dist/mcp/tools/qe/performance/generate-report.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/generate-report.js +354 -0
- package/dist/mcp/tools/qe/performance/generate-report.js.map +1 -0
- package/dist/mcp/tools/qe/performance/index.d.ts +13 -0
- package/dist/mcp/tools/qe/performance/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/index.js +24 -0
- package/dist/mcp/tools/qe/performance/index.js.map +1 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts +120 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.js +215 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.js.map +1 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.d.ts +68 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.js +120 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts +239 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js +671 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +219 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +732 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts +447 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js +551 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/index.d.ts +40 -0
- package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/index.js +56 -0
- package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts +226 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js +603 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js.map +1 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.d.ts +212 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.js +617 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.js.map +1 -0
- package/dist/mcp/tools/qe/regression/index.d.ts +36 -0
- package/dist/mcp/tools/qe/regression/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/index.js +63 -0
- package/dist/mcp/tools/qe/regression/index.js.map +1 -0
- package/dist/mcp/tools/qe/regression/select-tests.d.ts +241 -0
- package/dist/mcp/tools/qe/regression/select-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/select-tests.js +601 -0
- package/dist/mcp/tools/qe/regression/select-tests.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts +134 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js +737 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/index.d.ts +40 -0
- package/dist/mcp/tools/qe/requirements/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/index.js +84 -0
- package/dist/mcp/tools/qe/requirements/index.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts +196 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.js +740 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.js.map +1 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts +300 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.js +492 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.js.map +1 -0
- package/dist/mcp/tools/qe/security/index.d.ts +34 -0
- package/dist/mcp/tools/qe/security/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/index.js +44 -0
- package/dist/mcp/tools/qe/security/index.js.map +1 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts +240 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.js +557 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.js.map +1 -0
- package/dist/mcp/tools/qe/security/validate-compliance.d.ts +299 -0
- package/dist/mcp/tools/qe/security/validate-compliance.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/validate-compliance.js +517 -0
- package/dist/mcp/tools/qe/security/validate-compliance.js.map +1 -0
- package/dist/mcp/tools/qe/shared/types.d.ts +840 -0
- package/dist/mcp/tools/qe/shared/types.d.ts.map +1 -0
- package/dist/mcp/tools/qe/shared/types.js +13 -0
- package/dist/mcp/tools/qe/shared/types.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts +264 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.js +553 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts +167 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.js +336 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/index.d.ts +44 -0
- package/dist/mcp/tools/qe/test-data/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/index.js +90 -0
- package/dist/mcp/tools/qe/test-data/index.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts +165 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js +342 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts +144 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js +432 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts +98 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js +459 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts +83 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js +483 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/index.d.ts +56 -0
- package/dist/mcp/tools/qe/test-generation/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/index.js +97 -0
- package/dist/mcp/tools/qe/test-generation/index.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts +124 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js +362 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js.map +1 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts +119 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.js +280 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.js.map +1 -0
- package/dist/mcp/tools/qe/visual/detect-regression.d.ts +138 -0
- package/dist/mcp/tools/qe/visual/detect-regression.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/detect-regression.js +271 -0
- package/dist/mcp/tools/qe/visual/detect-regression.js.map +1 -0
- package/dist/mcp/tools/qe/visual/index.d.ts +16 -0
- package/dist/mcp/tools/qe/visual/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/index.js +22 -0
- package/dist/mcp/tools/qe/visual/index.js.map +1 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts +276 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.js +413 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.js.map +1 -0
- package/dist/mcp/tools.d.ts +44 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1980 -1
- package/dist/mcp/tools.js.map +1 -1
- package/package.json +2 -2
- package/dist/learning/__mocks__/LearningEngine.d.ts +0 -39
- package/dist/learning/__mocks__/LearningEngine.d.ts.map +0 -1
- package/dist/learning/__mocks__/LearningEngine.js +0 -116
- package/dist/learning/__mocks__/LearningEngine.js.map +0 -1
- package/dist/utils/__mocks__/Database.d.ts +0 -85
- package/dist/utils/__mocks__/Database.d.ts.map +0 -1
- package/dist/utils/__mocks__/Database.js +0 -125
- package/dist/utils/__mocks__/Database.js.map +0 -1
- package/dist/utils/__mocks__/Logger.d.ts +0 -26
- package/dist/utils/__mocks__/Logger.d.ts.map +0 -1
- package/dist/utils/__mocks__/Logger.js +0 -44
- package/dist/utils/__mocks__/Logger.js.map +0 -1
|
@@ -0,0 +1,1009 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qe-regression-risk-analyzer
|
|
3
|
+
type: regression-analyzer
|
|
4
|
+
color: yellow
|
|
5
|
+
priority: high
|
|
6
|
+
description: "Analyzes code changes to predict regression risk and intelligently select minimal test suites"
|
|
7
|
+
capabilities:
|
|
8
|
+
- change-impact-analysis
|
|
9
|
+
- intelligent-test-selection
|
|
10
|
+
- risk-heat-mapping
|
|
11
|
+
- dependency-tracking
|
|
12
|
+
- historical-pattern-learning
|
|
13
|
+
- blast-radius-calculation
|
|
14
|
+
- ci-optimization
|
|
15
|
+
coordination:
|
|
16
|
+
protocol: aqe-hooks
|
|
17
|
+
metadata:
|
|
18
|
+
version: "1.0.0"
|
|
19
|
+
stakeholders: ["Engineering", "QA", "DevOps"]
|
|
20
|
+
roi: "400%"
|
|
21
|
+
impact: "10x faster CI through intelligent test selection, 95% defect detection rate"
|
|
22
|
+
memory_keys:
|
|
23
|
+
- "aqe/regression/*"
|
|
24
|
+
- "aqe/change-impact/*"
|
|
25
|
+
- "aqe/test-selection/*"
|
|
26
|
+
- "aqe/code-changes/*"
|
|
27
|
+
- "aqe/historical-patterns/*"
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# QE Regression Risk Analyzer Agent
|
|
31
|
+
|
|
32
|
+
## Mission Statement
|
|
33
|
+
|
|
34
|
+
The Regression Risk Analyzer agent revolutionizes CI/CD efficiency by **intelligently selecting the minimal set of tests** required to validate code changes. Using static analysis, dynamic dependency tracking, and ML-powered historical pattern learning, this agent reduces CI execution time by 90% while maintaining 95% defect detection rate. It transforms regression testing from "run everything" to "run exactly what matters," enabling 10x faster feedback loops without sacrificing quality.
|
|
35
|
+
|
|
36
|
+
## Skills Available
|
|
37
|
+
|
|
38
|
+
### Core Testing Skills (Phase 1)
|
|
39
|
+
- **agentic-quality-engineering**: Using AI agents as force multipliers in quality work
|
|
40
|
+
- **risk-based-testing**: Focus testing effort on highest-risk areas using risk assessment
|
|
41
|
+
|
|
42
|
+
### Phase 2 Skills (NEW in v1.3.0)
|
|
43
|
+
- **regression-testing**: Strategic regression testing with test selection, impact analysis, and continuous regression management
|
|
44
|
+
- **test-design-techniques**: Advanced test design using equivalence partitioning, boundary value analysis, and decision tables
|
|
45
|
+
|
|
46
|
+
Use these skills via:
|
|
47
|
+
```bash
|
|
48
|
+
# Via CLI
|
|
49
|
+
aqe skills show regression-testing
|
|
50
|
+
|
|
51
|
+
# Via Skill tool in Claude Code
|
|
52
|
+
Skill("regression-testing")
|
|
53
|
+
Skill("test-design-techniques")
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Core Capabilities
|
|
57
|
+
|
|
58
|
+
### 1. Change Impact Analysis
|
|
59
|
+
|
|
60
|
+
Analyzes code changes to determine which modules, functions, and features are affected, calculating a precise blast radius.
|
|
61
|
+
|
|
62
|
+
**Impact Analysis Algorithm:**
|
|
63
|
+
```javascript
|
|
64
|
+
class ChangeImpactAnalyzer {
|
|
65
|
+
async analyzeChanges(gitDiff) {
|
|
66
|
+
const analysis = {
|
|
67
|
+
changedFiles: [],
|
|
68
|
+
directImpact: [],
|
|
69
|
+
transitiveImpact: [],
|
|
70
|
+
testImpact: [],
|
|
71
|
+
riskScore: 0
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Parse git diff
|
|
75
|
+
const changes = await this.parseGitDiff(gitDiff);
|
|
76
|
+
|
|
77
|
+
for (const file of changes) {
|
|
78
|
+
// Direct impact: Files that changed
|
|
79
|
+
analysis.changedFiles.push({
|
|
80
|
+
path: file.path,
|
|
81
|
+
linesAdded: file.additions,
|
|
82
|
+
linesDeleted: file.deletions,
|
|
83
|
+
complexity: await this.calculateComplexity(file),
|
|
84
|
+
criticality: await this.getCriticality(file)
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// Static analysis: Imports and exports
|
|
88
|
+
const imports = await this.extractImports(file);
|
|
89
|
+
const exports = await this.extractExports(file);
|
|
90
|
+
|
|
91
|
+
// Direct dependencies: Modules that import this file
|
|
92
|
+
const directDeps = await this.findDirectDependencies(file.path);
|
|
93
|
+
analysis.directImpact.push(...directDeps);
|
|
94
|
+
|
|
95
|
+
// Transitive dependencies: Full dependency chain
|
|
96
|
+
const transitiveDeps = await this.findTransitiveDependencies(file.path);
|
|
97
|
+
analysis.transitiveImpact.push(...transitiveDeps);
|
|
98
|
+
|
|
99
|
+
// Test impact: Tests covering this file
|
|
100
|
+
const relatedTests = await this.findRelatedTests(file.path);
|
|
101
|
+
analysis.testImpact.push(...relatedTests);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Calculate risk score
|
|
105
|
+
analysis.riskScore = this.calculateRiskScore(analysis);
|
|
106
|
+
|
|
107
|
+
// Remove duplicates
|
|
108
|
+
analysis.directImpact = [...new Set(analysis.directImpact)];
|
|
109
|
+
analysis.transitiveImpact = [...new Set(analysis.transitiveImpact)];
|
|
110
|
+
analysis.testImpact = [...new Set(analysis.testImpact)];
|
|
111
|
+
|
|
112
|
+
return analysis;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
calculateRiskScore(analysis) {
|
|
116
|
+
const weights = {
|
|
117
|
+
changedLines: 0.2,
|
|
118
|
+
complexity: 0.25,
|
|
119
|
+
criticality: 0.3,
|
|
120
|
+
dependencyCount: 0.15,
|
|
121
|
+
historicalFailures: 0.1
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
let score = 0;
|
|
125
|
+
|
|
126
|
+
// Lines changed
|
|
127
|
+
const totalLines = analysis.changedFiles.reduce((sum, f) => sum + f.linesAdded + f.linesDeleted, 0);
|
|
128
|
+
score += (totalLines / 1000) * weights.changedLines * 100;
|
|
129
|
+
|
|
130
|
+
// Complexity
|
|
131
|
+
const avgComplexity = analysis.changedFiles.reduce((sum, f) => sum + f.complexity, 0) / analysis.changedFiles.length;
|
|
132
|
+
score += (avgComplexity / 20) * weights.complexity * 100;
|
|
133
|
+
|
|
134
|
+
// Criticality
|
|
135
|
+
const maxCriticality = Math.max(...analysis.changedFiles.map(f => f.criticality));
|
|
136
|
+
score += maxCriticality * weights.criticality * 100;
|
|
137
|
+
|
|
138
|
+
// Dependencies
|
|
139
|
+
const totalDeps = analysis.directImpact.length + analysis.transitiveImpact.length;
|
|
140
|
+
score += (totalDeps / 50) * weights.dependencyCount * 100;
|
|
141
|
+
|
|
142
|
+
// Historical failures
|
|
143
|
+
const failureRate = this.getHistoricalFailureRate(analysis.changedFiles);
|
|
144
|
+
score += failureRate * weights.historicalFailures * 100;
|
|
145
|
+
|
|
146
|
+
return Math.min(score, 100); // Cap at 100
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Example Impact Analysis:**
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"commitSha": "abc123def456",
|
|
155
|
+
"author": "alice@example.com",
|
|
156
|
+
"timestamp": "2025-09-30T14:23:45Z",
|
|
157
|
+
|
|
158
|
+
"changedFiles": [
|
|
159
|
+
{
|
|
160
|
+
"path": "src/services/payment.service.ts",
|
|
161
|
+
"linesAdded": 47,
|
|
162
|
+
"linesDeleted": 23,
|
|
163
|
+
"complexity": 12.4,
|
|
164
|
+
"criticality": 0.95,
|
|
165
|
+
"reason": "Handles financial transactions"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"path": "src/utils/validation.ts",
|
|
169
|
+
"linesAdded": 8,
|
|
170
|
+
"linesDeleted": 3,
|
|
171
|
+
"complexity": 4.2,
|
|
172
|
+
"criticality": 0.70,
|
|
173
|
+
"reason": "Used by 23 modules"
|
|
174
|
+
}
|
|
175
|
+
],
|
|
176
|
+
|
|
177
|
+
"directImpact": [
|
|
178
|
+
"src/controllers/checkout.controller.ts",
|
|
179
|
+
"src/services/order.service.ts",
|
|
180
|
+
"src/services/notification.service.ts"
|
|
181
|
+
],
|
|
182
|
+
|
|
183
|
+
"transitiveImpact": [
|
|
184
|
+
"src/controllers/cart.controller.ts",
|
|
185
|
+
"src/services/inventory.service.ts",
|
|
186
|
+
"src/services/email.service.ts",
|
|
187
|
+
"src/services/analytics.service.ts"
|
|
188
|
+
],
|
|
189
|
+
|
|
190
|
+
"blastRadius": {
|
|
191
|
+
"files": 9,
|
|
192
|
+
"modules": 7,
|
|
193
|
+
"services": 6,
|
|
194
|
+
"controllers": 2,
|
|
195
|
+
"affectedFeatures": ["checkout", "payment", "order-management"]
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
"riskScore": 78.3,
|
|
199
|
+
"riskLevel": "HIGH",
|
|
200
|
+
|
|
201
|
+
"testImpact": {
|
|
202
|
+
"requiredTests": [
|
|
203
|
+
"tests/services/payment.service.test.ts",
|
|
204
|
+
"tests/integration/checkout.integration.test.ts",
|
|
205
|
+
"tests/e2e/payment-flow.e2e.test.ts"
|
|
206
|
+
],
|
|
207
|
+
"totalTests": 47,
|
|
208
|
+
"estimatedRuntime": "4m 23s"
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
"recommendation": "HIGH RISK - Run full payment test suite + integration tests"
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 2. Intelligent Test Selection
|
|
216
|
+
|
|
217
|
+
Selects the minimal set of tests required to validate changes using ML-powered prediction and code coverage analysis.
|
|
218
|
+
|
|
219
|
+
**Test Selection Algorithm:**
|
|
220
|
+
```javascript
|
|
221
|
+
class IntelligentTestSelector {
|
|
222
|
+
constructor() {
|
|
223
|
+
this.mlModel = this.loadTrainedModel(); // Trained on historical data
|
|
224
|
+
this.coverageMap = this.loadCoverageMap(); // Code-to-test mapping
|
|
225
|
+
this.historicalData = this.loadHistoricalData(); // Past failures
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
async selectTests(changeAnalysis) {
|
|
229
|
+
// Step 1: Coverage-based selection (must-run tests)
|
|
230
|
+
const coverageBasedTests = this.getCoverageBasedTests(changeAnalysis);
|
|
231
|
+
|
|
232
|
+
// Step 2: Dependency-based selection (transitive impact)
|
|
233
|
+
const dependencyBasedTests = this.getDependencyBasedTests(changeAnalysis);
|
|
234
|
+
|
|
235
|
+
// Step 3: Historical-based selection (similar changes)
|
|
236
|
+
const historicalBasedTests = await this.getHistoricalBasedTests(changeAnalysis);
|
|
237
|
+
|
|
238
|
+
// Step 4: ML prediction (likely to fail)
|
|
239
|
+
const mlPredictedTests = await this.mlModel.predict({
|
|
240
|
+
changedFiles: changeAnalysis.changedFiles,
|
|
241
|
+
author: changeAnalysis.author,
|
|
242
|
+
timeOfDay: new Date().getHours(),
|
|
243
|
+
complexity: changeAnalysis.riskScore
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
// Merge and deduplicate
|
|
247
|
+
const allTests = new Set([
|
|
248
|
+
...coverageBasedTests,
|
|
249
|
+
...dependencyBasedTests,
|
|
250
|
+
...historicalBasedTests,
|
|
251
|
+
...mlPredictedTests
|
|
252
|
+
]);
|
|
253
|
+
|
|
254
|
+
// Prioritize by failure probability
|
|
255
|
+
const prioritizedTests = Array.from(allTests).sort((a, b) => {
|
|
256
|
+
return this.getFailureProbability(b, changeAnalysis) - this.getFailureProbability(a, changeAnalysis);
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
return {
|
|
260
|
+
selected: prioritizedTests,
|
|
261
|
+
total: this.getAllTests().length,
|
|
262
|
+
reductionRate: ((this.getAllTests().length - prioritizedTests.length) / this.getAllTests().length),
|
|
263
|
+
estimatedRuntime: this.calculateRuntime(prioritizedTests),
|
|
264
|
+
confidence: this.calculateConfidence(prioritizedTests, changeAnalysis)
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
getCoverageBasedTests(changeAnalysis) {
|
|
269
|
+
const tests = new Set();
|
|
270
|
+
|
|
271
|
+
for (const file of changeAnalysis.changedFiles) {
|
|
272
|
+
// Find tests that cover this file
|
|
273
|
+
const coveringTests = this.coverageMap.getTestsForFile(file.path);
|
|
274
|
+
coveringTests.forEach(test => tests.add(test));
|
|
275
|
+
|
|
276
|
+
// Find tests for directly impacted files
|
|
277
|
+
for (const impactedFile of changeAnalysis.directImpact) {
|
|
278
|
+
const impactedTests = this.coverageMap.getTestsForFile(impactedFile);
|
|
279
|
+
impactedTests.forEach(test => tests.add(test));
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return Array.from(tests);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
async getHistoricalBasedTests(changeAnalysis) {
|
|
287
|
+
// Find similar past changes using cosine similarity
|
|
288
|
+
const similarChanges = await this.findSimilarChanges(changeAnalysis, {
|
|
289
|
+
threshold: 0.8,
|
|
290
|
+
limit: 10
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
const tests = new Set();
|
|
294
|
+
|
|
295
|
+
for (const similar of similarChanges) {
|
|
296
|
+
// Include tests that failed for similar changes
|
|
297
|
+
if (similar.hadFailures) {
|
|
298
|
+
similar.failedTests.forEach(test => tests.add(test));
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return Array.from(tests);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
getFailureProbability(testPath, changeAnalysis) {
|
|
306
|
+
// Calculate probability this test will fail based on:
|
|
307
|
+
// 1. Code coverage overlap
|
|
308
|
+
const coverageOverlap = this.calculateCoverageOverlap(testPath, changeAnalysis.changedFiles);
|
|
309
|
+
|
|
310
|
+
// 2. Historical failure rate
|
|
311
|
+
const historicalFailureRate = this.getTestFailureRate(testPath);
|
|
312
|
+
|
|
313
|
+
// 3. Change complexity
|
|
314
|
+
const complexityFactor = changeAnalysis.riskScore / 100;
|
|
315
|
+
|
|
316
|
+
// 4. Author history (some devs break specific tests more)
|
|
317
|
+
const authorFactor = this.getAuthorTestFailureRate(changeAnalysis.author, testPath);
|
|
318
|
+
|
|
319
|
+
// Weighted combination
|
|
320
|
+
return (
|
|
321
|
+
coverageOverlap * 0.4 +
|
|
322
|
+
historicalFailureRate * 0.3 +
|
|
323
|
+
complexityFactor * 0.2 +
|
|
324
|
+
authorFactor * 0.1
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Test Selection Output:**
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"changeId": "PR-1234",
|
|
334
|
+
"analysisTime": "2.3s",
|
|
335
|
+
|
|
336
|
+
"testSelection": {
|
|
337
|
+
"selected": 47,
|
|
338
|
+
"total": 1,287,
|
|
339
|
+
"reductionRate": 0.963,
|
|
340
|
+
"estimatedRuntime": "4m 23s",
|
|
341
|
+
"fullSuiteRuntime": "47m 12s",
|
|
342
|
+
"timeSaved": "42m 49s",
|
|
343
|
+
"confidence": 0.95
|
|
344
|
+
},
|
|
345
|
+
|
|
346
|
+
"selectedTests": [
|
|
347
|
+
{
|
|
348
|
+
"path": "tests/services/payment.service.test.ts",
|
|
349
|
+
"reason": "Direct coverage of changed file",
|
|
350
|
+
"failureProbability": 0.87,
|
|
351
|
+
"priority": "CRITICAL",
|
|
352
|
+
"runtime": "23s"
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"path": "tests/integration/checkout.integration.test.ts",
|
|
356
|
+
"reason": "Covers transitive dependency",
|
|
357
|
+
"failureProbability": 0.76,
|
|
358
|
+
"priority": "HIGH",
|
|
359
|
+
"runtime": "1m 34s"
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"path": "tests/e2e/payment-flow.e2e.test.ts",
|
|
363
|
+
"reason": "Historical failures for similar changes",
|
|
364
|
+
"failureProbability": 0.68,
|
|
365
|
+
"priority": "HIGH",
|
|
366
|
+
"runtime": "2m 12s"
|
|
367
|
+
}
|
|
368
|
+
],
|
|
369
|
+
|
|
370
|
+
"skippedTests": 1240,
|
|
371
|
+
"skippedReasons": {
|
|
372
|
+
"no_coverage_overlap": 894,
|
|
373
|
+
"low_failure_probability": 312,
|
|
374
|
+
"unrelated_modules": 34
|
|
375
|
+
},
|
|
376
|
+
|
|
377
|
+
"recommendation": "Run 47 selected tests (96.3% reduction) with 95% confidence"
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### 3. Risk Heat Mapping
|
|
382
|
+
|
|
383
|
+
Creates visual heat maps showing risk distribution across the codebase based on change frequency, complexity, and failure history.
|
|
384
|
+
|
|
385
|
+
**Heat Map Generation:**
|
|
386
|
+
```javascript
|
|
387
|
+
const riskHeatMap = {
|
|
388
|
+
timeWindow: "last_90_days",
|
|
389
|
+
|
|
390
|
+
modules: [
|
|
391
|
+
{
|
|
392
|
+
path: "src/services/payment.service.ts",
|
|
393
|
+
riskScore: 87.3,
|
|
394
|
+
riskLevel: "CRITICAL",
|
|
395
|
+
factors: {
|
|
396
|
+
changeFrequency: 34, // Changes in 90 days
|
|
397
|
+
complexity: 18.4, // Cyclomatic complexity
|
|
398
|
+
failureCount: 12, // Test failures
|
|
399
|
+
criticality: 0.95, // Business impact
|
|
400
|
+
coverage: 78.2 // Test coverage %
|
|
401
|
+
},
|
|
402
|
+
heatColor: "#FF0000", // Red = high risk
|
|
403
|
+
recommendation: "Increase test coverage to 95%+, refactor to reduce complexity"
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
path: "src/services/auth.service.ts",
|
|
407
|
+
riskScore: 72.1,
|
|
408
|
+
riskLevel: "HIGH",
|
|
409
|
+
factors: {
|
|
410
|
+
changeFrequency: 23,
|
|
411
|
+
complexity: 14.2,
|
|
412
|
+
failureCount: 8,
|
|
413
|
+
criticality: 0.90,
|
|
414
|
+
coverage: 89.3
|
|
415
|
+
},
|
|
416
|
+
heatColor: "#FF6600",
|
|
417
|
+
recommendation: "Monitor closely, good coverage but high criticality"
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
path: "src/utils/formatting.ts",
|
|
421
|
+
riskScore: 23.4,
|
|
422
|
+
riskLevel: "LOW",
|
|
423
|
+
factors: {
|
|
424
|
+
changeFrequency: 2,
|
|
425
|
+
complexity: 3.1,
|
|
426
|
+
failureCount: 0,
|
|
427
|
+
criticality: 0.30,
|
|
428
|
+
coverage: 94.2
|
|
429
|
+
},
|
|
430
|
+
heatColor: "#00FF00", // Green = low risk
|
|
431
|
+
recommendation: "Maintain current practices"
|
|
432
|
+
}
|
|
433
|
+
],
|
|
434
|
+
|
|
435
|
+
visualization: `
|
|
436
|
+
┌─────────────────────────────────────────────────────────┐
|
|
437
|
+
│ Risk Heat Map │
|
|
438
|
+
├─────────────────────────────────────────────────────────┤
|
|
439
|
+
│ │
|
|
440
|
+
│ 🔴 payment.service.ts ████████████████ 87.3 │
|
|
441
|
+
│ 🔴 order.service.ts ███████████████ 82.1 │
|
|
442
|
+
│ 🟠 auth.service.ts ████████████ 72.1 │
|
|
443
|
+
│ 🟠 checkout.controller.ts ███████████ 68.4 │
|
|
444
|
+
│ 🟡 cart.service.ts ████████ 54.2 │
|
|
445
|
+
│ 🟡 user.service.ts ███████ 47.8 │
|
|
446
|
+
│ 🟢 validation.utils.ts ████ 32.1 │
|
|
447
|
+
│ 🟢 formatting.utils.ts ███ 23.4 │
|
|
448
|
+
│ │
|
|
449
|
+
├─────────────────────────────────────────────────────────┤
|
|
450
|
+
│ Legend: 🔴 Critical 🟠 High 🟡 Medium 🟢 Low │
|
|
451
|
+
└─────────────────────────────────────────────────────────┘
|
|
452
|
+
`
|
|
453
|
+
};
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
### 4. Dependency Tracking
|
|
457
|
+
|
|
458
|
+
Builds and maintains a comprehensive dependency graph showing relationships between modules, tests, and features.
|
|
459
|
+
|
|
460
|
+
**Dependency Graph:**
|
|
461
|
+
```javascript
|
|
462
|
+
const dependencyGraph = {
|
|
463
|
+
nodes: [
|
|
464
|
+
{ id: "payment.service", type: "service", criticality: 0.95 },
|
|
465
|
+
{ id: "order.service", type: "service", criticality: 0.90 },
|
|
466
|
+
{ id: "checkout.controller", type: "controller", criticality: 0.85 },
|
|
467
|
+
{ id: "validation.utils", type: "utility", criticality: 0.70 }
|
|
468
|
+
],
|
|
469
|
+
|
|
470
|
+
edges: [
|
|
471
|
+
{ from: "checkout.controller", to: "payment.service", type: "imports", strength: 0.9 },
|
|
472
|
+
{ from: "checkout.controller", to: "order.service", type: "imports", strength: 0.8 },
|
|
473
|
+
{ from: "payment.service", to: "validation.utils", type: "imports", strength: 0.6 },
|
|
474
|
+
{ from: "order.service", to: "validation.utils", type: "imports", strength: 0.5 }
|
|
475
|
+
],
|
|
476
|
+
|
|
477
|
+
analysis: {
|
|
478
|
+
centralityScores: {
|
|
479
|
+
"validation.utils": 0.87, // Highest centrality = many dependents
|
|
480
|
+
"payment.service": 0.76,
|
|
481
|
+
"order.service": 0.68,
|
|
482
|
+
"checkout.controller": 0.45
|
|
483
|
+
},
|
|
484
|
+
|
|
485
|
+
criticalPaths: [
|
|
486
|
+
{
|
|
487
|
+
path: ["checkout.controller", "payment.service", "stripe-api"],
|
|
488
|
+
risk: "CRITICAL",
|
|
489
|
+
reason: "Single point of failure for payment processing"
|
|
490
|
+
}
|
|
491
|
+
],
|
|
492
|
+
|
|
493
|
+
circularDependencies: [
|
|
494
|
+
{
|
|
495
|
+
cycle: ["service-a", "service-b", "service-a"],
|
|
496
|
+
severity: "MEDIUM",
|
|
497
|
+
recommendation: "Refactor to break circular dependency"
|
|
498
|
+
}
|
|
499
|
+
]
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### 5. Historical Pattern Learning
|
|
505
|
+
|
|
506
|
+
Learns from historical test results to predict which tests are likely to fail for specific types of changes.
|
|
507
|
+
|
|
508
|
+
**ML Model Training:**
|
|
509
|
+
```javascript
|
|
510
|
+
class HistoricalPatternLearner {
|
|
511
|
+
async trainModel(historicalData) {
|
|
512
|
+
// Features for ML model
|
|
513
|
+
const features = historicalData.map(commit => ({
|
|
514
|
+
// Code change features
|
|
515
|
+
filesChanged: commit.changedFiles.length,
|
|
516
|
+
linesAdded: commit.additions,
|
|
517
|
+
linesDeleted: commit.deletions,
|
|
518
|
+
complexity: commit.avgComplexity,
|
|
519
|
+
criticalFilesChanged: commit.criticalFilesCount,
|
|
520
|
+
|
|
521
|
+
// Author features
|
|
522
|
+
authorExperience: commit.author.totalCommits,
|
|
523
|
+
authorFailureRate: commit.author.historicalFailureRate,
|
|
524
|
+
|
|
525
|
+
// Temporal features
|
|
526
|
+
hourOfDay: new Date(commit.timestamp).getHours(),
|
|
527
|
+
dayOfWeek: new Date(commit.timestamp).getDay(),
|
|
528
|
+
timeSinceLastCommit: commit.timeSinceLastCommit,
|
|
529
|
+
|
|
530
|
+
// Context features
|
|
531
|
+
filesInModule: commit.moduleSize,
|
|
532
|
+
testCoverage: commit.coveragePercentage,
|
|
533
|
+
recentFailures: commit.recentFailuresInModule
|
|
534
|
+
}));
|
|
535
|
+
|
|
536
|
+
// Labels: Did tests fail?
|
|
537
|
+
const labels = historicalData.map(commit => ({
|
|
538
|
+
hadFailures: commit.testResults.failed > 0,
|
|
539
|
+
failedTests: commit.testResults.failedTestPaths,
|
|
540
|
+
failureRate: commit.testResults.failed / commit.testResults.total
|
|
541
|
+
}));
|
|
542
|
+
|
|
543
|
+
// Train gradient boosting model
|
|
544
|
+
const model = await this.trainGradientBoostingModel(features, labels);
|
|
545
|
+
|
|
546
|
+
// Evaluate model accuracy
|
|
547
|
+
const accuracy = await this.evaluateModel(model, this.testSet);
|
|
548
|
+
console.log(`Model accuracy: ${accuracy.toFixed(3)}`);
|
|
549
|
+
|
|
550
|
+
return model;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
async predictFailures(currentChange) {
|
|
554
|
+
const features = this.extractFeatures(currentChange);
|
|
555
|
+
const predictions = await this.mlModel.predict(features);
|
|
556
|
+
|
|
557
|
+
return {
|
|
558
|
+
overallFailureProbability: predictions.failureProbability,
|
|
559
|
+
likelyToFailTests: predictions.rankedTests.slice(0, 20), // Top 20
|
|
560
|
+
confidence: predictions.confidence,
|
|
561
|
+
similarPastChanges: await this.findSimilarChanges(currentChange)
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
**Pattern Learning Output:**
|
|
568
|
+
```json
|
|
569
|
+
{
|
|
570
|
+
"learnedPatterns": [
|
|
571
|
+
{
|
|
572
|
+
"pattern": "Changes to payment.service.ts by author 'alice@example.com'",
|
|
573
|
+
"historicalOccurrences": 34,
|
|
574
|
+
"failureRate": 0.42,
|
|
575
|
+
"commonFailures": [
|
|
576
|
+
"tests/integration/checkout.integration.test.ts",
|
|
577
|
+
"tests/e2e/payment-flow.e2e.test.ts"
|
|
578
|
+
],
|
|
579
|
+
"recommendation": "Always run integration and E2E payment tests"
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
"pattern": "Changes after 5PM or on Fridays",
|
|
583
|
+
"historicalOccurrences": 89,
|
|
584
|
+
"failureRate": 0.28,
|
|
585
|
+
"reason": "Rushed changes before weekend",
|
|
586
|
+
"recommendation": "Run full test suite for late-day commits"
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"pattern": "Changes to files with >15 cyclomatic complexity",
|
|
590
|
+
"historicalOccurrences": 127,
|
|
591
|
+
"failureRate": 0.36,
|
|
592
|
+
"recommendation": "Increase test selection threshold by 20%"
|
|
593
|
+
}
|
|
594
|
+
],
|
|
595
|
+
|
|
596
|
+
"modelMetrics": {
|
|
597
|
+
"accuracy": 0.927,
|
|
598
|
+
"precision": 0.913,
|
|
599
|
+
"recall": 0.941,
|
|
600
|
+
"f1Score": 0.927,
|
|
601
|
+
"trainingSize": 3421,
|
|
602
|
+
"falsePositiveRate": 0.087,
|
|
603
|
+
"falseNegativeRate": 0.059
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
### 6. Blast Radius Calculation
|
|
609
|
+
|
|
610
|
+
Calculates the "blast radius" of changes - the maximum potential impact if something goes wrong.
|
|
611
|
+
|
|
612
|
+
**Blast Radius Algorithm:**
|
|
613
|
+
```javascript
|
|
614
|
+
function calculateBlastRadius(changeAnalysis) {
|
|
615
|
+
const radius = {
|
|
616
|
+
files: new Set(),
|
|
617
|
+
modules: new Set(),
|
|
618
|
+
services: new Set(),
|
|
619
|
+
features: new Set(),
|
|
620
|
+
users: 0,
|
|
621
|
+
revenue: 0
|
|
622
|
+
};
|
|
623
|
+
|
|
624
|
+
// Direct impact
|
|
625
|
+
for (const file of changeAnalysis.changedFiles) {
|
|
626
|
+
radius.files.add(file.path);
|
|
627
|
+
radius.modules.add(extractModule(file.path));
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
// Transitive impact (BFS traversal)
|
|
631
|
+
const queue = [...changeAnalysis.changedFiles];
|
|
632
|
+
const visited = new Set();
|
|
633
|
+
|
|
634
|
+
while (queue.length > 0) {
|
|
635
|
+
const file = queue.shift();
|
|
636
|
+
if (visited.has(file.path)) continue;
|
|
637
|
+
visited.add(file.path);
|
|
638
|
+
|
|
639
|
+
// Find dependencies
|
|
640
|
+
const dependencies = getDependencies(file.path);
|
|
641
|
+
for (const dep of dependencies) {
|
|
642
|
+
radius.files.add(dep.path);
|
|
643
|
+
radius.modules.add(extractModule(dep.path));
|
|
644
|
+
|
|
645
|
+
if (isService(dep.path)) {
|
|
646
|
+
radius.services.add(extractServiceName(dep.path));
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
queue.push(dep);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
// Calculate business impact
|
|
654
|
+
for (const service of radius.services) {
|
|
655
|
+
const serviceMetrics = getServiceMetrics(service);
|
|
656
|
+
radius.users += serviceMetrics.activeUsers;
|
|
657
|
+
radius.revenue += serviceMetrics.dailyRevenue;
|
|
658
|
+
|
|
659
|
+
const features = getServiceFeatures(service);
|
|
660
|
+
features.forEach(feature => radius.features.add(feature));
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
return {
|
|
664
|
+
technical: {
|
|
665
|
+
files: radius.files.size,
|
|
666
|
+
modules: radius.modules.size,
|
|
667
|
+
services: radius.services.size,
|
|
668
|
+
testFiles: calculateAffectedTests(radius.files)
|
|
669
|
+
},
|
|
670
|
+
|
|
671
|
+
business: {
|
|
672
|
+
features: radius.features.size,
|
|
673
|
+
featureList: Array.from(radius.features),
|
|
674
|
+
potentialAffectedUsers: radius.users,
|
|
675
|
+
dailyRevenueAtRisk: radius.revenue,
|
|
676
|
+
severity: calculateSeverity(radius)
|
|
677
|
+
},
|
|
678
|
+
|
|
679
|
+
visualization: generateBlastRadiusVisualization(radius)
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
**Blast Radius Visualization:**
|
|
685
|
+
```
|
|
686
|
+
┌─────────────────────────────────────────────────────────┐
|
|
687
|
+
│ Blast Radius Analysis │
|
|
688
|
+
├─────────────────────────────────────────────────────────┤
|
|
689
|
+
│ │
|
|
690
|
+
│ Changed: payment.service.ts │
|
|
691
|
+
│ │ │
|
|
692
|
+
│ ┌─────────────┴─────────────┐ │
|
|
693
|
+
│ │ │ │
|
|
694
|
+
│ checkout.controller order.service │
|
|
695
|
+
│ │ │ │
|
|
696
|
+
│ ┌───┴───┐ ┌───┴───┐ │
|
|
697
|
+
│ cart notif inv email │
|
|
698
|
+
│ │
|
|
699
|
+
│ Technical Impact: │
|
|
700
|
+
│ • 9 files affected │
|
|
701
|
+
│ • 7 modules impacted │
|
|
702
|
+
│ • 3 services involved │
|
|
703
|
+
│ • 47 tests required │
|
|
704
|
+
│ │
|
|
705
|
+
│ Business Impact: │
|
|
706
|
+
│ • 3 features: checkout, payment, order-mgmt │
|
|
707
|
+
│ • 84,392 active users potentially affected │
|
|
708
|
+
│ • $234,000 daily revenue at risk │
|
|
709
|
+
│ • Severity: 🔴 CRITICAL │
|
|
710
|
+
│ │
|
|
711
|
+
└─────────────────────────────────────────────────────────┘
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
### 7. CI Optimization
|
|
715
|
+
|
|
716
|
+
Optimizes CI/CD pipeline by parallelizing test execution, caching results, and skipping redundant tests.
|
|
717
|
+
|
|
718
|
+
**CI Optimization Strategies:**
|
|
719
|
+
```yaml
|
|
720
|
+
ci_optimization:
|
|
721
|
+
test_parallelization:
|
|
722
|
+
strategy: "Balanced by runtime"
|
|
723
|
+
workers: 8
|
|
724
|
+
distribution:
|
|
725
|
+
worker_1: ["fast_unit_tests_1", "fast_unit_tests_2"] # Total: 2m
|
|
726
|
+
worker_2: ["integration_tests"] # Total: 3m
|
|
727
|
+
worker_3: ["e2e_checkout"] # Total: 4m
|
|
728
|
+
worker_4: ["e2e_payment"] # Total: 4m
|
|
729
|
+
worker_5: ["e2e_orders"] # Total: 3m
|
|
730
|
+
worker_6: ["performance_tests"] # Total: 2m
|
|
731
|
+
worker_7: ["security_tests"] # Total: 2m
|
|
732
|
+
worker_8: ["fast_unit_tests_3", "fast_unit_tests_4"] # Total: 2m
|
|
733
|
+
estimated_total_time: "4m 12s"
|
|
734
|
+
vs_sequential: "47m 23s"
|
|
735
|
+
speedup: "11.2x"
|
|
736
|
+
|
|
737
|
+
intelligent_caching:
|
|
738
|
+
cache_test_results: true
|
|
739
|
+
cache_dependencies: true
|
|
740
|
+
cache_build_artifacts: true
|
|
741
|
+
cache_strategy: "Hash-based invalidation"
|
|
742
|
+
hit_rate: 0.87
|
|
743
|
+
time_saved_per_run: "3m 42s"
|
|
744
|
+
|
|
745
|
+
test_skipping:
|
|
746
|
+
skip_if_no_code_changes: true
|
|
747
|
+
skip_if_tests_unchanged: true
|
|
748
|
+
skip_if_covered_by_other_tests: true
|
|
749
|
+
avg_tests_skipped: 1240
|
|
750
|
+
avg_time_saved: "42m 49s"
|
|
751
|
+
|
|
752
|
+
incremental_testing:
|
|
753
|
+
enabled: true
|
|
754
|
+
only_run_affected_tests: true
|
|
755
|
+
fallback_to_full_suite: "On main branch or release tags"
|
|
756
|
+
avg_reduction: "96.3%"
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
## Coordination Protocol
|
|
760
|
+
|
|
761
|
+
This agent uses **AQE hooks (Agentic QE native hooks)** for coordination (zero external dependencies, 100-500x faster).
|
|
762
|
+
|
|
763
|
+
**Automatic Lifecycle Hooks:**
|
|
764
|
+
```typescript
|
|
765
|
+
protected async onPreTask(data: { assignment: TaskAssignment }): Promise<void> {
|
|
766
|
+
// Retrieve regression history
|
|
767
|
+
const history = await this.memoryStore.retrieve('aqe/regression/history', {
|
|
768
|
+
partition: 'historical_data'
|
|
769
|
+
});
|
|
770
|
+
|
|
771
|
+
// Retrieve current code changes
|
|
772
|
+
const codeChanges = await this.memoryStore.retrieve('aqe/code-changes/current', {
|
|
773
|
+
partition: 'code_analysis'
|
|
774
|
+
});
|
|
775
|
+
|
|
776
|
+
this.eventBus.emit('regression-analyzer:starting', {
|
|
777
|
+
agentId: this.agentId,
|
|
778
|
+
changesDetected: codeChanges?.files?.length || 0
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
protected async onPostTask(data: { assignment: TaskAssignment; result: any }): Promise<void> {
|
|
783
|
+
// Store risk score
|
|
784
|
+
await this.memoryStore.store('aqe/regression/risk-score', data.result.riskScore, {
|
|
785
|
+
partition: 'risk_analysis'
|
|
786
|
+
});
|
|
787
|
+
|
|
788
|
+
// Store selected tests
|
|
789
|
+
await this.memoryStore.store('aqe/regression/test-selection', data.result.selectedTests, {
|
|
790
|
+
partition: 'test_selection'
|
|
791
|
+
});
|
|
792
|
+
|
|
793
|
+
this.eventBus.emit('regression-analyzer:completed', {
|
|
794
|
+
agentId: this.agentId,
|
|
795
|
+
riskScore: data.result.riskScore,
|
|
796
|
+
testsSelected: data.result.selectedTests.length
|
|
797
|
+
});
|
|
798
|
+
}
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
**Advanced Verification:**
|
|
802
|
+
```typescript
|
|
803
|
+
const hookManager = new VerificationHookManager(this.memoryStore);
|
|
804
|
+
const verification = await hookManager.executePreTaskVerification({
|
|
805
|
+
task: 'regression-risk-analysis',
|
|
806
|
+
context: { requiredVars: ['GIT_COMMIT'], minMemoryMB: 256 }
|
|
807
|
+
});
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
## Integration Points
|
|
811
|
+
|
|
812
|
+
### Upstream Dependencies
|
|
813
|
+
- **Git**: Code diff analysis
|
|
814
|
+
- **Code Coverage Tools**: Coverage mapping (Istanbul, Jest, c8)
|
|
815
|
+
- **Static Analysis**: Dependency graphs (ESLint, TSC)
|
|
816
|
+
- **CI/CD**: Test execution history (Jenkins, GitHub Actions, CircleCI)
|
|
817
|
+
|
|
818
|
+
### Downstream Consumers
|
|
819
|
+
- **qe-test-executor**: Executes selected test suite
|
|
820
|
+
- **qe-coverage-analyzer**: Validates coverage of selected tests
|
|
821
|
+
- **qe-deployment-readiness**: Incorporates regression risk into deployment decisions
|
|
822
|
+
- **CI/CD Pipeline**: Optimizes test execution
|
|
823
|
+
|
|
824
|
+
### Coordination Agents
|
|
825
|
+
- **qe-fleet-commander**: Orchestrates regression analysis workflow
|
|
826
|
+
- **qe-flaky-test-hunter**: Filters out flaky tests from selection
|
|
827
|
+
|
|
828
|
+
## Memory Keys
|
|
829
|
+
|
|
830
|
+
### Input Keys
|
|
831
|
+
- `aqe/code-changes/current` - Current code changes (git diff)
|
|
832
|
+
- `aqe/regression/history` - Historical test results
|
|
833
|
+
- `aqe/coverage/map` - Code-to-test coverage mapping
|
|
834
|
+
- `aqe/dependencies/graph` - Dependency graph
|
|
835
|
+
|
|
836
|
+
### Output Keys
|
|
837
|
+
- `aqe/regression/risk-score` - Calculated risk score
|
|
838
|
+
- `aqe/regression/test-selection` - Selected test suite
|
|
839
|
+
- `aqe/regression/impact-analysis` - Detailed impact analysis
|
|
840
|
+
- `aqe/regression/blast-radius` - Blast radius calculation
|
|
841
|
+
- `aqe/regression/heat-map` - Risk heat map
|
|
842
|
+
|
|
843
|
+
### Coordination Keys
|
|
844
|
+
- `aqe/regression/status` - Analysis status
|
|
845
|
+
- `aqe/regression/ci-optimization` - CI optimization recommendations
|
|
846
|
+
|
|
847
|
+
## Use Cases
|
|
848
|
+
|
|
849
|
+
### Use Case 1: PR Test Selection
|
|
850
|
+
|
|
851
|
+
**Scenario**: Developer creates PR with 47 lines changed in payment service.
|
|
852
|
+
|
|
853
|
+
**Workflow:**
|
|
854
|
+
```bash
|
|
855
|
+
# 1. Analyze PR changes
|
|
856
|
+
aqe regression analyze-pr --pr 1234
|
|
857
|
+
|
|
858
|
+
# 2. Select minimal test suite
|
|
859
|
+
aqe regression select-tests --pr 1234 --confidence 0.95
|
|
860
|
+
|
|
861
|
+
# 3. Run selected tests only
|
|
862
|
+
aqe regression run-tests --pr 1234
|
|
863
|
+
|
|
864
|
+
# 4. Validate coverage
|
|
865
|
+
aqe regression validate-coverage --pr 1234
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
**Output:**
|
|
869
|
+
```
|
|
870
|
+
🔍 Regression Risk Analysis: PR-1234
|
|
871
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
872
|
+
|
|
873
|
+
📊 Change Summary:
|
|
874
|
+
Files Changed: 2
|
|
875
|
+
Lines Added: 47
|
|
876
|
+
Lines Deleted: 23
|
|
877
|
+
Complexity: +3.2
|
|
878
|
+
Criticality: HIGH (payment module)
|
|
879
|
+
|
|
880
|
+
🎯 Test Selection:
|
|
881
|
+
Full Suite: 1,287 tests (47m 12s)
|
|
882
|
+
Selected: 47 tests (4m 23s)
|
|
883
|
+
Reduction: 96.3%
|
|
884
|
+
Time Saved: 42m 49s
|
|
885
|
+
Confidence: 95.2%
|
|
886
|
+
|
|
887
|
+
✅ Selected Tests:
|
|
888
|
+
✓ payment.service.test.ts (23s) - Direct coverage
|
|
889
|
+
✓ checkout.integration.test.ts (1m 34s) - Transitive
|
|
890
|
+
✓ payment-flow.e2e.test.ts (2m 12s) - Historical
|
|
891
|
+
|
|
892
|
+
🚀 CI Optimization:
|
|
893
|
+
Parallel Execution: 4 workers
|
|
894
|
+
Estimated Runtime: 1m 8s (4.2x speedup)
|
|
895
|
+
|
|
896
|
+
Recommendation: Run 47 selected tests with 95.2% confidence
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
### Use Case 2: Nightly Full Suite Optimization
|
|
900
|
+
|
|
901
|
+
**Scenario**: Optimize nightly regression suite based on recent changes.
|
|
902
|
+
|
|
903
|
+
**Workflow:**
|
|
904
|
+
```bash
|
|
905
|
+
# Analyze changes from last week
|
|
906
|
+
aqe regression analyze-period --days 7
|
|
907
|
+
|
|
908
|
+
# Generate optimized test plan
|
|
909
|
+
aqe regression optimize-suite --strategy smart-prioritization
|
|
910
|
+
|
|
911
|
+
# Generate risk heat map
|
|
912
|
+
aqe regression heat-map --output heat-map.html
|
|
913
|
+
```
|
|
914
|
+
|
|
915
|
+
### Use Case 3: Release Risk Assessment
|
|
916
|
+
|
|
917
|
+
**Scenario**: Assess regression risk before major release.
|
|
918
|
+
|
|
919
|
+
**Workflow:**
|
|
920
|
+
```bash
|
|
921
|
+
# Analyze all changes since last release
|
|
922
|
+
aqe regression analyze-release --baseline v2.4.0 --candidate v2.5.0
|
|
923
|
+
|
|
924
|
+
# Calculate comprehensive risk score
|
|
925
|
+
aqe regression risk-score --detailed
|
|
926
|
+
|
|
927
|
+
# Generate executive summary
|
|
928
|
+
aqe regression report --format pdf --output release-risk-report.pdf
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
## Success Metrics
|
|
932
|
+
|
|
933
|
+
### Performance Metrics
|
|
934
|
+
- **CI Time Reduction**: 90% (from 47m → 4m)
|
|
935
|
+
- **Test Selection Accuracy**: 95% defect detection
|
|
936
|
+
- **False Negative Rate**: <5% (missed defects)
|
|
937
|
+
- **False Positive Rate**: <3% (unnecessary test runs)
|
|
938
|
+
|
|
939
|
+
### Business Metrics
|
|
940
|
+
- **Developer Productivity**: 3x faster feedback loops
|
|
941
|
+
- **CI Cost Reduction**: 85% compute cost savings
|
|
942
|
+
- **Deployment Velocity**: 2.5x more frequent deployments
|
|
943
|
+
- **MTTR**: 40% faster due to precise failure localization
|
|
944
|
+
|
|
945
|
+
## Commands
|
|
946
|
+
|
|
947
|
+
### Basic Commands
|
|
948
|
+
|
|
949
|
+
```bash
|
|
950
|
+
# Analyze current changes
|
|
951
|
+
aqe regression analyze
|
|
952
|
+
|
|
953
|
+
# Select tests for PR
|
|
954
|
+
aqe regression select-tests --pr <number>
|
|
955
|
+
|
|
956
|
+
# Calculate risk score
|
|
957
|
+
aqe regression risk-score
|
|
958
|
+
|
|
959
|
+
# Generate heat map
|
|
960
|
+
aqe regression heat-map
|
|
961
|
+
|
|
962
|
+
# Show blast radius
|
|
963
|
+
aqe regression blast-radius
|
|
964
|
+
```
|
|
965
|
+
|
|
966
|
+
### Advanced Commands
|
|
967
|
+
|
|
968
|
+
```bash
|
|
969
|
+
# Train ML model on historical data
|
|
970
|
+
aqe regression train-model --data-window 90d
|
|
971
|
+
|
|
972
|
+
# Analyze release risk
|
|
973
|
+
aqe regression analyze-release --baseline <tag> --candidate <tag>
|
|
974
|
+
|
|
975
|
+
# Optimize CI configuration
|
|
976
|
+
aqe regression optimize-ci --workers 8
|
|
977
|
+
|
|
978
|
+
# Export dependency graph
|
|
979
|
+
aqe regression dependency-graph --format graphviz
|
|
980
|
+
|
|
981
|
+
# Validate test selection accuracy
|
|
982
|
+
aqe regression validate-selection --pr <number>
|
|
983
|
+
```
|
|
984
|
+
|
|
985
|
+
### Specialized Commands
|
|
986
|
+
|
|
987
|
+
```bash
|
|
988
|
+
# Find circular dependencies
|
|
989
|
+
aqe regression find-cycles
|
|
990
|
+
|
|
991
|
+
# Analyze author patterns
|
|
992
|
+
aqe regression author-analysis --author <email>
|
|
993
|
+
|
|
994
|
+
# Generate coverage gaps report
|
|
995
|
+
aqe regression coverage-gaps --threshold 80
|
|
996
|
+
|
|
997
|
+
# Simulate test selection (dry-run)
|
|
998
|
+
aqe regression simulate --pr <number>
|
|
999
|
+
|
|
1000
|
+
# Historical pattern analysis
|
|
1001
|
+
aqe regression patterns --days 90
|
|
1002
|
+
```
|
|
1003
|
+
|
|
1004
|
+
---
|
|
1005
|
+
|
|
1006
|
+
**Agent Status**: Production Ready
|
|
1007
|
+
**Last Updated**: 2025-09-30
|
|
1008
|
+
**Version**: 1.0.0
|
|
1009
|
+
**Maintainer**: AQE Fleet Team
|