@agentic-qe/v3 3.0.0-alpha.6 → 3.0.0-alpha.7
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/assets/agents/v3/subagents/v3-qe-code-reviewer.md +339 -0
- package/assets/agents/v3/subagents/v3-qe-integration-reviewer.md +344 -0
- package/assets/agents/v3/subagents/v3-qe-performance-reviewer.md +351 -0
- package/assets/agents/v3/subagents/v3-qe-security-reviewer.md +374 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-green.md +334 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-red.md +329 -0
- package/assets/agents/v3/subagents/v3-qe-tdd-refactor.md +361 -0
- package/assets/agents/v3/v3-qe-accessibility-auditor.md +266 -0
- package/assets/agents/v3/v3-qe-bdd-generator.md +279 -0
- package/assets/agents/v3/v3-qe-chaos-engineer.md +265 -0
- package/assets/agents/v3/v3-qe-code-complexity.md +298 -0
- package/assets/agents/v3/v3-qe-code-intelligence.md +262 -0
- package/assets/agents/v3/v3-qe-contract-validator.md +267 -0
- package/assets/agents/v3/v3-qe-coverage-specialist.md +227 -0
- package/assets/agents/v3/v3-qe-defect-predictor.md +251 -0
- package/assets/agents/v3/v3-qe-dependency-mapper.md +277 -0
- package/assets/agents/v3/v3-qe-deployment-advisor.md +275 -0
- package/assets/agents/v3/v3-qe-flaky-hunter.md +248 -0
- package/assets/agents/v3/v3-qe-fleet-commander.md +293 -0
- package/assets/agents/v3/v3-qe-gap-detector.md +260 -0
- package/assets/agents/v3/v3-qe-graphql-tester.md +308 -0
- package/assets/agents/v3/v3-qe-impact-analyzer.md +299 -0
- package/assets/agents/v3/v3-qe-integration-tester.md +238 -0
- package/assets/agents/v3/v3-qe-kg-builder.md +273 -0
- package/assets/agents/v3/v3-qe-learning-coordinator.md +226 -0
- package/assets/agents/v3/v3-qe-load-tester.md +280 -0
- package/assets/agents/v3/v3-qe-metrics-optimizer.md +300 -0
- package/assets/agents/v3/v3-qe-mutation-tester.md +301 -0
- package/assets/agents/v3/v3-qe-parallel-executor.md +240 -0
- package/assets/agents/v3/v3-qe-pattern-learner.md +271 -0
- package/assets/agents/v3/v3-qe-performance-tester.md +262 -0
- package/assets/agents/v3/v3-qe-property-tester.md +247 -0
- package/assets/agents/v3/v3-qe-quality-gate.md +218 -0
- package/assets/agents/v3/v3-qe-queen-coordinator.md +214 -0
- package/assets/agents/v3/v3-qe-qx-partner.md +313 -0
- package/assets/agents/v3/v3-qe-regression-analyzer.md +322 -0
- package/assets/agents/v3/v3-qe-requirements-validator.md +360 -0
- package/assets/agents/v3/v3-qe-responsive-tester.md +311 -0
- package/assets/agents/v3/v3-qe-retry-handler.md +256 -0
- package/assets/agents/v3/v3-qe-risk-assessor.md +273 -0
- package/assets/agents/v3/v3-qe-root-cause-analyzer.md +286 -0
- package/assets/agents/v3/v3-qe-security-auditor.md +299 -0
- package/assets/agents/v3/v3-qe-security-scanner.md +235 -0
- package/assets/agents/v3/v3-qe-tdd-specialist.md +239 -0
- package/assets/agents/v3/v3-qe-test-architect.md +233 -0
- package/assets/agents/v3/v3-qe-transfer-specialist.md +295 -0
- package/assets/agents/v3/v3-qe-visual-tester.md +232 -0
- package/assets/skills/accessibility-testing/SKILL.md +216 -0
- package/assets/skills/agentdb-advanced/SKILL.md +550 -0
- package/assets/skills/agentdb-learning/SKILL.md +545 -0
- package/assets/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/assets/skills/agentdb-optimization/SKILL.md +509 -0
- package/assets/skills/agentdb-vector-search/SKILL.md +339 -0
- package/assets/skills/agentic-jujutsu/SKILL.md +645 -0
- package/assets/skills/agentic-quality-engineering/SKILL.md +335 -0
- package/assets/skills/api-testing-patterns/SKILL.md +294 -0
- package/assets/skills/aqe-v2-v3-migration/skill.md +322 -0
- package/assets/skills/brutal-honesty-review/README.md +218 -0
- package/assets/skills/brutal-honesty-review/SKILL.md +235 -0
- package/assets/skills/brutal-honesty-review/resources/assessment-rubrics.md +295 -0
- package/assets/skills/brutal-honesty-review/resources/review-template.md +102 -0
- package/assets/skills/brutal-honesty-review/scripts/assess-code.sh +179 -0
- package/assets/skills/brutal-honesty-review/scripts/assess-tests.sh +223 -0
- package/assets/skills/bug-reporting-excellence/SKILL.md +225 -0
- package/assets/skills/chaos-engineering-resilience/SKILL.md +158 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/README.md +304 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/SKILL.md +315 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/microservice-pipeline.md +239 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/mobile-pipeline.md +375 -0
- package/assets/skills/cicd-pipeline-qe-orchestrator/resources/workflows/monolith-pipeline.md +268 -0
- package/assets/skills/code-review-quality/SKILL.md +227 -0
- package/assets/skills/compatibility-testing/SKILL.md +205 -0
- package/assets/skills/compliance-testing/SKILL.md +225 -0
- package/assets/skills/consultancy-practices/SKILL.md +202 -0
- package/assets/skills/context-driven-testing/SKILL.md +196 -0
- package/assets/skills/contract-testing/SKILL.md +222 -0
- package/assets/skills/database-testing/SKILL.md +244 -0
- package/assets/skills/exploratory-testing-advanced/SKILL.md +201 -0
- package/assets/skills/flow-nexus-neural/SKILL.md +738 -0
- package/assets/skills/flow-nexus-platform/SKILL.md +1157 -0
- package/assets/skills/flow-nexus-swarm/SKILL.md +610 -0
- package/assets/skills/github-code-review/SKILL.md +1140 -0
- package/assets/skills/github-multi-repo/SKILL.md +874 -0
- package/assets/skills/github-project-management/SKILL.md +1277 -0
- package/assets/skills/github-release-management/SKILL.md +1081 -0
- package/assets/skills/github-workflow-automation/SKILL.md +1065 -0
- package/assets/skills/hive-mind-advanced/SKILL.md +712 -0
- package/assets/skills/holistic-testing-pact/SKILL.md +171 -0
- package/assets/skills/hooks-automation/SKILL.md +1201 -0
- package/assets/skills/localization-testing/SKILL.md +221 -0
- package/assets/skills/mobile-testing/SKILL.md +219 -0
- package/assets/skills/mutation-testing/SKILL.md +229 -0
- package/assets/skills/n8n-expression-testing/SKILL.md +434 -0
- package/assets/skills/n8n-integration-testing-patterns/SKILL.md +540 -0
- package/assets/skills/n8n-security-testing/SKILL.md +599 -0
- package/assets/skills/n8n-trigger-testing-strategies/SKILL.md +541 -0
- package/assets/skills/n8n-workflow-testing-fundamentals/SKILL.md +447 -0
- package/assets/skills/pair-programming/SKILL.md +1202 -0
- package/assets/skills/performance-analysis/SKILL.md +563 -0
- package/assets/skills/performance-testing/SKILL.md +310 -0
- package/assets/skills/quality-metrics/SKILL.md +225 -0
- package/assets/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/assets/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/assets/skills/refactoring-patterns/SKILL.md +205 -0
- package/assets/skills/regression-testing/SKILL.md +227 -0
- package/assets/skills/risk-based-testing/SKILL.md +206 -0
- package/assets/skills/security-testing/SKILL.md +306 -0
- package/assets/skills/sherlock-review/SKILL.md +250 -0
- package/assets/skills/shift-left-testing/SKILL.md +225 -0
- package/assets/skills/shift-right-testing/SKILL.md +227 -0
- package/assets/skills/six-thinking-hats/README.md +190 -0
- package/assets/skills/six-thinking-hats/SKILL.md +280 -0
- package/assets/skills/six-thinking-hats/resources/examples/api-testing-example.md +345 -0
- package/assets/skills/six-thinking-hats/resources/templates/solo-session-template.md +167 -0
- package/assets/skills/six-thinking-hats/resources/templates/team-session-template.md +336 -0
- package/assets/skills/skill-builder/SKILL.md +910 -0
- package/assets/skills/sparc-methodology/SKILL.md +1115 -0
- package/assets/skills/stream-chain/SKILL.md +563 -0
- package/assets/skills/swarm-advanced/SKILL.md +973 -0
- package/assets/skills/swarm-orchestration/SKILL.md +179 -0
- package/assets/skills/tdd-london-chicago/SKILL.md +244 -0
- package/assets/skills/technical-writing/SKILL.md +178 -0
- package/assets/skills/test-automation-strategy/SKILL.md +230 -0
- package/assets/skills/test-data-management/SKILL.md +270 -0
- package/assets/skills/test-design-techniques/SKILL.md +244 -0
- package/assets/skills/test-environment-management/SKILL.md +243 -0
- package/assets/skills/test-reporting-analytics/SKILL.md +214 -0
- package/assets/skills/testability-scoring/README.md +71 -0
- package/assets/skills/testability-scoring/SKILL.md +346 -0
- package/assets/skills/testability-scoring/resources/templates/config.template.js +84 -0
- package/assets/skills/testability-scoring/resources/templates/testability-scoring.spec.template.js +532 -0
- package/assets/skills/testability-scoring/scripts/generate-html-report.js +1007 -0
- package/assets/skills/testability-scoring/scripts/run-assessment.sh +70 -0
- package/assets/skills/v3-qe-chaos-resilience/SKILL.md +238 -0
- package/assets/skills/v3-qe-code-intelligence/SKILL.md +209 -0
- package/assets/skills/v3-qe-contract-testing/SKILL.md +218 -0
- package/assets/skills/v3-qe-coverage-analysis/SKILL.md +187 -0
- package/assets/skills/v3-qe-defect-intelligence/SKILL.md +205 -0
- package/assets/skills/v3-qe-learning-optimization/SKILL.md +238 -0
- package/assets/skills/v3-qe-quality-assessment/SKILL.md +213 -0
- package/assets/skills/v3-qe-requirements-validation/SKILL.md +248 -0
- package/assets/skills/v3-qe-test-execution/SKILL.md +182 -0
- package/assets/skills/v3-qe-test-generation/SKILL.md +141 -0
- package/assets/skills/v3-qe-visual-accessibility/SKILL.md +242 -0
- package/assets/skills/verification-quality/SKILL.md +649 -0
- package/assets/skills/visual-testing-advanced/SKILL.md +219 -0
- package/assets/skills/xp-practices/SKILL.md +229 -0
- package/dist/cli/bundle.js +8 -8
- package/dist/init/agents-installer.js +4 -4
- package/dist/init/agents-installer.js.map +1 -1
- package/dist/init/skills-installer.js +4 -4
- package/dist/init/skills-installer.js.map +1 -1
- package/package.json +7 -1
- package/docs/analysis/V3-INIT-REQUIREMENTS-ANALYSIS.md +0 -352
- package/implementation/README.md +0 -90
- package/implementation/adrs/ADR-030-coherence-gated-quality-gates.md +0 -312
- package/implementation/adrs/ADR-031-strange-loop-self-awareness.md +0 -484
- package/implementation/adrs/ADR-032-time-crystal-scheduling.md +0 -530
- package/implementation/adrs/ADR-033-early-exit-testing.md +0 -634
- package/implementation/adrs/ADR-034-neural-topology-optimizer.md +0 -589
- package/implementation/adrs/ADR-035-causal-discovery.md +0 -610
- package/implementation/adrs/ADR-036-result-persistence.md +0 -326
- package/implementation/adrs/ADR-037-v3-qe-agent-naming.md +0 -105
- package/implementation/adrs/ADR-038-v3-qe-memory-unification.md +0 -154
- package/implementation/adrs/ADR-039-v3-qe-mcp-optimization.md +0 -179
- package/implementation/adrs/ADR-040-v3-qe-agentic-flow-integration.md +0 -240
- package/implementation/adrs/ADR-041-v3-qe-cli-enhancement.md +0 -296
- package/implementation/adrs/ADR-042-v3-qe-token-tracking-integration.md +0 -517
- package/implementation/adrs/v3-adrs.md +0 -2783
- package/implementation/planning/AQE-V3-MASTER-PLAN.md +0 -815
- package/security-scan-report-2026-01-11.md +0 -410
- package/security-verification-report-2026-01-11.md +0 -278
- package/src/benchmarks/performance-benchmarks.ts +0 -646
- package/src/benchmarks/run-benchmarks.ts +0 -324
- package/src/causal-discovery/causal-graph.ts +0 -450
- package/src/causal-discovery/discovery-engine.ts +0 -438
- package/src/causal-discovery/index.ts +0 -117
- package/src/causal-discovery/types.ts +0 -456
- package/src/causal-discovery/weight-matrix.ts +0 -453
- package/src/cli/commands/qe-tools.ts +0 -634
- package/src/cli/index.ts +0 -1976
- package/src/compatibility/agent-mapper.ts +0 -291
- package/src/compatibility/cli-adapter.ts +0 -277
- package/src/compatibility/config-migrator.ts +0 -334
- package/src/compatibility/index.ts +0 -112
- package/src/compatibility/mcp-adapter.ts +0 -248
- package/src/compatibility/types.ts +0 -156
- package/src/coordination/claims/claim-repository.ts +0 -636
- package/src/coordination/claims/claim-service.ts +0 -675
- package/src/coordination/claims/handoff-manager.ts +0 -535
- package/src/coordination/claims/index.ts +0 -276
- package/src/coordination/claims/interfaces.ts +0 -687
- package/src/coordination/claims/work-stealing.ts +0 -436
- package/src/coordination/cross-domain-router.ts +0 -492
- package/src/coordination/index.ts +0 -127
- package/src/coordination/interfaces.ts +0 -691
- package/src/coordination/protocol-executor.ts +0 -760
- package/src/coordination/protocols/code-intelligence-index.ts +0 -855
- package/src/coordination/protocols/defect-investigation.ts +0 -1184
- package/src/coordination/protocols/index.ts +0 -11
- package/src/coordination/protocols/learning-consolidation.ts +0 -1181
- package/src/coordination/protocols/morning-sync.ts +0 -1055
- package/src/coordination/protocols/quality-gate.ts +0 -1566
- package/src/coordination/protocols/security-audit.ts +0 -1587
- package/src/coordination/queen-coordinator.ts +0 -1176
- package/src/coordination/result-saver.ts +0 -780
- package/src/coordination/task-executor.ts +0 -1146
- package/src/coordination/workflow-orchestrator.ts +0 -1917
- package/src/domains/chaos-resilience/coordinator.ts +0 -1032
- package/src/domains/chaos-resilience/index.ts +0 -143
- package/src/domains/chaos-resilience/interfaces.ts +0 -659
- package/src/domains/chaos-resilience/plugin.ts +0 -691
- package/src/domains/chaos-resilience/services/chaos-engineer.ts +0 -1097
- package/src/domains/chaos-resilience/services/index.ts +0 -19
- package/src/domains/chaos-resilience/services/load-tester.ts +0 -799
- package/src/domains/chaos-resilience/services/performance-profiler.ts +0 -792
- package/src/domains/code-intelligence/coordinator.ts +0 -631
- package/src/domains/code-intelligence/index.ts +0 -86
- package/src/domains/code-intelligence/interfaces.ts +0 -162
- package/src/domains/code-intelligence/plugin.ts +0 -451
- package/src/domains/code-intelligence/services/impact-analyzer.ts +0 -567
- package/src/domains/code-intelligence/services/index.ts +0 -26
- package/src/domains/code-intelligence/services/knowledge-graph.ts +0 -1067
- package/src/domains/code-intelligence/services/semantic-analyzer.ts +0 -901
- package/src/domains/contract-testing/coordinator.ts +0 -1038
- package/src/domains/contract-testing/index.ts +0 -122
- package/src/domains/contract-testing/interfaces.ts +0 -458
- package/src/domains/contract-testing/plugin.ts +0 -746
- package/src/domains/contract-testing/services/api-compatibility.ts +0 -748
- package/src/domains/contract-testing/services/contract-validator.ts +0 -1700
- package/src/domains/contract-testing/services/index.ts +0 -19
- package/src/domains/contract-testing/services/schema-validator.ts +0 -1102
- package/src/domains/coverage-analysis/coordinator.ts +0 -485
- package/src/domains/coverage-analysis/index.ts +0 -114
- package/src/domains/coverage-analysis/interfaces.ts +0 -142
- package/src/domains/coverage-analysis/plugin.ts +0 -172
- package/src/domains/coverage-analysis/services/coverage-analyzer.ts +0 -449
- package/src/domains/coverage-analysis/services/coverage-embedder.ts +0 -733
- package/src/domains/coverage-analysis/services/coverage-parser.ts +0 -753
- package/src/domains/coverage-analysis/services/gap-detector.ts +0 -592
- package/src/domains/coverage-analysis/services/hnsw-index.ts +0 -728
- package/src/domains/coverage-analysis/services/index.ts +0 -61
- package/src/domains/coverage-analysis/services/risk-scorer.ts +0 -540
- package/src/domains/coverage-analysis/services/sublinear-analyzer.ts +0 -747
- package/src/domains/defect-intelligence/coordinator.ts +0 -635
- package/src/domains/defect-intelligence/index.ts +0 -83
- package/src/domains/defect-intelligence/interfaces.ts +0 -152
- package/src/domains/defect-intelligence/plugin.ts +0 -483
- package/src/domains/defect-intelligence/services/causal-root-cause-analyzer.ts +0 -494
- package/src/domains/defect-intelligence/services/defect-predictor.ts +0 -852
- package/src/domains/defect-intelligence/services/index.ts +0 -37
- package/src/domains/defect-intelligence/services/pattern-learner.ts +0 -738
- package/src/domains/defect-intelligence/services/root-cause-analyzer.ts +0 -637
- package/src/domains/domain-interface.ts +0 -77
- package/src/domains/index.ts +0 -23
- package/src/domains/learning-optimization/coordinator.ts +0 -1215
- package/src/domains/learning-optimization/index.ts +0 -127
- package/src/domains/learning-optimization/interfaces.ts +0 -570
- package/src/domains/learning-optimization/plugin.ts +0 -851
- package/src/domains/learning-optimization/services/index.ts +0 -29
- package/src/domains/learning-optimization/services/learning-coordinator.ts +0 -972
- package/src/domains/learning-optimization/services/metrics-optimizer.ts +0 -915
- package/src/domains/learning-optimization/services/production-intel.ts +0 -971
- package/src/domains/learning-optimization/services/transfer-specialist.ts +0 -723
- package/src/domains/quality-assessment/coherence/gate-controller.ts +0 -549
- package/src/domains/quality-assessment/coherence/index.ts +0 -211
- package/src/domains/quality-assessment/coherence/lambda-calculator.ts +0 -384
- package/src/domains/quality-assessment/coherence/partition-detector.ts +0 -469
- package/src/domains/quality-assessment/coherence/types.ts +0 -384
- package/src/domains/quality-assessment/coordinator.ts +0 -605
- package/src/domains/quality-assessment/index.ts +0 -97
- package/src/domains/quality-assessment/interfaces.ts +0 -152
- package/src/domains/quality-assessment/plugin.ts +0 -496
- package/src/domains/quality-assessment/services/coherence-gate.ts +0 -358
- package/src/domains/quality-assessment/services/deployment-advisor.ts +0 -571
- package/src/domains/quality-assessment/services/index.ts +0 -34
- package/src/domains/quality-assessment/services/quality-analyzer.ts +0 -670
- package/src/domains/quality-assessment/services/quality-gate.ts +0 -384
- package/src/domains/requirements-validation/coordinator.ts +0 -812
- package/src/domains/requirements-validation/index.ts +0 -92
- package/src/domains/requirements-validation/interfaces.ts +0 -303
- package/src/domains/requirements-validation/plugin.ts +0 -576
- package/src/domains/requirements-validation/services/bdd-scenario-writer.ts +0 -676
- package/src/domains/requirements-validation/services/index.ts +0 -20
- package/src/domains/requirements-validation/services/requirements-validator.ts +0 -559
- package/src/domains/requirements-validation/services/testability-scorer.ts +0 -639
- package/src/domains/security-compliance/coordinator.ts +0 -757
- package/src/domains/security-compliance/index.ts +0 -120
- package/src/domains/security-compliance/interfaces.ts +0 -434
- package/src/domains/security-compliance/plugin.ts +0 -509
- package/src/domains/security-compliance/services/compliance-validator.ts +0 -1226
- package/src/domains/security-compliance/services/index.ts +0 -31
- package/src/domains/security-compliance/services/security-auditor.ts +0 -2227
- package/src/domains/security-compliance/services/security-scanner.ts +0 -2354
- package/src/domains/security-compliance/services/semgrep-integration.ts +0 -289
- package/src/domains/test-execution/coordinator.ts +0 -426
- package/src/domains/test-execution/index.ts +0 -76
- package/src/domains/test-execution/interfaces.ts +0 -119
- package/src/domains/test-execution/plugin.ts +0 -208
- package/src/domains/test-execution/services/flaky-detector.ts +0 -1240
- package/src/domains/test-execution/services/index.ts +0 -8
- package/src/domains/test-execution/services/retry-handler.ts +0 -820
- package/src/domains/test-execution/services/test-executor.ts +0 -885
- package/src/domains/test-generation/coordinator.ts +0 -656
- package/src/domains/test-generation/index.ts +0 -77
- package/src/domains/test-generation/interfaces.ts +0 -118
- package/src/domains/test-generation/plugin.ts +0 -397
- package/src/domains/test-generation/services/index.ts +0 -23
- package/src/domains/test-generation/services/pattern-matcher.ts +0 -1725
- package/src/domains/test-generation/services/test-generator.ts +0 -2750
- package/src/domains/visual-accessibility/coordinator.ts +0 -860
- package/src/domains/visual-accessibility/index.ts +0 -116
- package/src/domains/visual-accessibility/interfaces.ts +0 -435
- package/src/domains/visual-accessibility/plugin.ts +0 -568
- package/src/domains/visual-accessibility/services/accessibility-tester.ts +0 -982
- package/src/domains/visual-accessibility/services/axe-core-audit.ts +0 -630
- package/src/domains/visual-accessibility/services/index.ts +0 -28
- package/src/domains/visual-accessibility/services/responsive-tester.ts +0 -934
- package/src/domains/visual-accessibility/services/visual-tester.ts +0 -458
- package/src/early-exit/early-exit-controller.ts +0 -490
- package/src/early-exit/early-exit-decision.ts +0 -391
- package/src/early-exit/index.ts +0 -115
- package/src/early-exit/quality-signal.ts +0 -389
- package/src/early-exit/speculative-executor.ts +0 -505
- package/src/early-exit/types.ts +0 -407
- package/src/feedback/coverage-learner.ts +0 -456
- package/src/feedback/feedback-loop.ts +0 -426
- package/src/feedback/index.ts +0 -72
- package/src/feedback/pattern-promotion.ts +0 -373
- package/src/feedback/quality-score-calculator.ts +0 -334
- package/src/feedback/test-outcome-tracker.ts +0 -450
- package/src/feedback/types.ts +0 -497
- package/src/index.ts +0 -224
- package/src/init/agents-installer.ts +0 -536
- package/src/init/index.ts +0 -80
- package/src/init/init-wizard.ts +0 -1061
- package/src/init/project-analyzer.ts +0 -696
- package/src/init/self-configurator.ts +0 -488
- package/src/init/skills-installer.ts +0 -467
- package/src/init/types.ts +0 -432
- package/src/integrations/ruvector/ast-complexity.ts +0 -470
- package/src/integrations/ruvector/coverage-router.ts +0 -594
- package/src/integrations/ruvector/diff-risk-classifier.ts +0 -759
- package/src/integrations/ruvector/fallback.ts +0 -942
- package/src/integrations/ruvector/graph-boundaries.ts +0 -809
- package/src/integrations/ruvector/index.ts +0 -363
- package/src/integrations/ruvector/interfaces.ts +0 -609
- package/src/integrations/ruvector/q-learning-router.ts +0 -550
- package/src/kernel/agent-coordinator.ts +0 -165
- package/src/kernel/agentdb-backend.ts +0 -504
- package/src/kernel/event-bus.ts +0 -129
- package/src/kernel/hybrid-backend.ts +0 -538
- package/src/kernel/index.ts +0 -28
- package/src/kernel/interfaces.ts +0 -257
- package/src/kernel/kernel.ts +0 -285
- package/src/kernel/memory-backend.ts +0 -169
- package/src/kernel/memory-factory.ts +0 -293
- package/src/kernel/plugin-loader.ts +0 -179
- package/src/learning/index.ts +0 -219
- package/src/learning/pattern-store.ts +0 -990
- package/src/learning/qe-guidance.ts +0 -832
- package/src/learning/qe-hooks.ts +0 -644
- package/src/learning/qe-patterns.ts +0 -449
- package/src/learning/qe-reasoning-bank.ts +0 -951
- package/src/learning/real-embeddings.ts +0 -277
- package/src/learning/real-qe-reasoning-bank.ts +0 -833
- package/src/learning/sqlite-persistence.ts +0 -554
- package/src/mcp/entry.ts +0 -59
- package/src/mcp/handlers/agent-handlers.ts +0 -285
- package/src/mcp/handlers/core-handlers.ts +0 -317
- package/src/mcp/handlers/domain-handlers.ts +0 -1444
- package/src/mcp/handlers/index.ts +0 -57
- package/src/mcp/handlers/memory-handlers.ts +0 -338
- package/src/mcp/handlers/task-handlers.ts +0 -363
- package/src/mcp/index.ts +0 -30
- package/src/mcp/metrics/index.ts +0 -14
- package/src/mcp/metrics/metrics-collector.ts +0 -503
- package/src/mcp/protocol-server.ts +0 -752
- package/src/mcp/security/cve-prevention.ts +0 -742
- package/src/mcp/security/index.ts +0 -356
- package/src/mcp/security/oauth21-provider.ts +0 -821
- package/src/mcp/security/rate-limiter.ts +0 -615
- package/src/mcp/security/sampling-server.ts +0 -662
- package/src/mcp/security/schema-validator.ts +0 -855
- package/src/mcp/server.ts +0 -657
- package/src/mcp/tool-registry.ts +0 -391
- package/src/mcp/tools/base.ts +0 -399
- package/src/mcp/tools/chaos-resilience/inject.ts +0 -699
- package/src/mcp/tools/code-intelligence/analyze.ts +0 -745
- package/src/mcp/tools/contract-testing/validate.ts +0 -708
- package/src/mcp/tools/coverage-analysis/index.ts +0 -770
- package/src/mcp/tools/defect-intelligence/predict.ts +0 -466
- package/src/mcp/tools/index.ts +0 -214
- package/src/mcp/tools/learning-optimization/optimize.ts +0 -772
- package/src/mcp/tools/quality-assessment/evaluate.ts +0 -385
- package/src/mcp/tools/registry.ts +0 -248
- package/src/mcp/tools/requirements-validation/validate.ts +0 -394
- package/src/mcp/tools/security-compliance/scan.ts +0 -365
- package/src/mcp/tools/test-execution/execute.ts +0 -291
- package/src/mcp/tools/test-generation/generate.ts +0 -544
- package/src/mcp/tools/visual-accessibility/index.ts +0 -791
- package/src/mcp/transport/index.ts +0 -31
- package/src/mcp/transport/stdio.ts +0 -318
- package/src/mcp/types.ts +0 -543
- package/src/neural-optimizer/index.ts +0 -111
- package/src/neural-optimizer/replay-buffer.ts +0 -455
- package/src/neural-optimizer/swarm-topology.ts +0 -508
- package/src/neural-optimizer/topology-optimizer.ts +0 -828
- package/src/neural-optimizer/types.ts +0 -481
- package/src/neural-optimizer/value-network.ts +0 -351
- package/src/optimization/auto-tuner.ts +0 -817
- package/src/optimization/index.ts +0 -77
- package/src/optimization/metric-collectors.ts +0 -474
- package/src/optimization/qe-workers.ts +0 -704
- package/src/optimization/tuning-algorithm.ts +0 -401
- package/src/optimization/types.ts +0 -314
- package/src/routing/index.ts +0 -51
- package/src/routing/qe-agent-registry.ts +0 -963
- package/src/routing/qe-task-router.ts +0 -564
- package/src/routing/routing-feedback.ts +0 -365
- package/src/routing/types.ts +0 -406
- package/src/shared/embeddings/embedding-cache.ts +0 -157
- package/src/shared/embeddings/index.ts +0 -50
- package/src/shared/embeddings/nomic-embedder.ts +0 -404
- package/src/shared/embeddings/ollama-client.ts +0 -195
- package/src/shared/embeddings/types.ts +0 -147
- package/src/shared/entities/agent.ts +0 -141
- package/src/shared/entities/base-entity.ts +0 -79
- package/src/shared/entities/index.ts +0 -6
- package/src/shared/events/domain-events.ts +0 -259
- package/src/shared/events/index.ts +0 -5
- package/src/shared/git/git-analyzer.ts +0 -656
- package/src/shared/git/index.ts +0 -11
- package/src/shared/http/http-client.ts +0 -420
- package/src/shared/http/index.ts +0 -13
- package/src/shared/index.ts +0 -41
- package/src/shared/io/file-reader.ts +0 -525
- package/src/shared/io/index.ts +0 -25
- package/src/shared/llm/cache.ts +0 -473
- package/src/shared/llm/circuit-breaker.ts +0 -369
- package/src/shared/llm/cost-tracker.ts +0 -460
- package/src/shared/llm/index.ts +0 -140
- package/src/shared/llm/interfaces.ts +0 -629
- package/src/shared/llm/provider-manager.ts +0 -685
- package/src/shared/llm/providers/claude.ts +0 -524
- package/src/shared/llm/providers/index.ts +0 -8
- package/src/shared/llm/providers/ollama.ts +0 -575
- package/src/shared/llm/providers/openai.ts +0 -609
- package/src/shared/metrics/code-metrics.ts +0 -520
- package/src/shared/metrics/index.ts +0 -23
- package/src/shared/metrics/system-metrics.ts +0 -353
- package/src/shared/parsers/index.ts +0 -6
- package/src/shared/parsers/typescript-parser.ts +0 -841
- package/src/shared/security/compliance-patterns.ts +0 -666
- package/src/shared/security/index.ts +0 -30
- package/src/shared/security/osv-client.ts +0 -468
- package/src/shared/types/index.ts +0 -150
- package/src/shared/value-objects/index.ts +0 -273
- package/src/strange-loop/healing-controller.ts +0 -833
- package/src/strange-loop/index.ts +0 -104
- package/src/strange-loop/self-model.ts +0 -494
- package/src/strange-loop/strange-loop.ts +0 -446
- package/src/strange-loop/swarm-observer.ts +0 -448
- package/src/strange-loop/topology-analyzer.ts +0 -565
- package/src/strange-loop/types.ts +0 -640
- package/src/time-crystal/default-phases.ts +0 -520
- package/src/time-crystal/index.ts +0 -164
- package/src/time-crystal/oscillator.ts +0 -425
- package/src/time-crystal/phase-executor.ts +0 -521
- package/src/time-crystal/scheduler.ts +0 -1025
- package/src/time-crystal/test-runner.ts +0 -787
- package/src/time-crystal/types.ts +0 -421
- package/src/workers/base-worker.ts +0 -304
- package/src/workers/daemon.ts +0 -264
- package/src/workers/index.ts +0 -119
- package/src/workers/interfaces.ts +0 -393
- package/src/workers/worker-manager.ts +0 -424
- package/src/workers/workers/compliance-checker.ts +0 -445
- package/src/workers/workers/coverage-tracker.ts +0 -344
- package/src/workers/workers/defect-predictor.ts +0 -375
- package/src/workers/workers/flaky-detector.ts +0 -390
- package/src/workers/workers/index.ts +0 -17
- package/src/workers/workers/learning-consolidation.ts +0 -442
- package/src/workers/workers/performance-baseline.ts +0 -434
- package/src/workers/workers/quality-gate.ts +0 -419
- package/src/workers/workers/regression-monitor.ts +0 -357
- package/src/workers/workers/security-scan.ts +0 -349
- package/src/workers/workers/test-health.ts +0 -359
- package/tests/integration/code-intelligence/knowledge-graph-real.test.ts +0 -540
- package/tests/integration/coordination/cross-domain-router.test.ts +0 -403
- package/tests/integration/coordination/protocol-executor.test.ts +0 -454
- package/tests/integration/coordination/workflow-orchestrator.test.ts +0 -418
- package/tests/integration/feedback/feedback-loop-integration.test.ts +0 -560
- package/tests/integration/migration/v2-to-v3-migration.test.ts +0 -471
- package/tests/integration/parsers/typescript-parser.test.ts +0 -463
- package/tests/integration/security/vulnerability-detection.test.ts +0 -628
- package/tests/integration/test-execution/coordinator.test.ts +0 -410
- package/tests/integration/test-generation/coordinator.test.ts +0 -361
- package/tests/mocks/index.ts +0 -228
- package/tests/time-crystal/default-phases.test.ts +0 -476
- package/tests/time-crystal/oscillator.test.ts +0 -541
- package/tests/time-crystal/phase-executor.test.ts +0 -653
- package/tests/time-crystal/scheduler.test.ts +0 -626
- package/tests/time-crystal/test-runner.test.ts +0 -594
- package/tests/unit/causal-discovery/causal-graph.test.ts +0 -504
- package/tests/unit/causal-discovery/causal-root-cause-analyzer.test.ts +0 -347
- package/tests/unit/causal-discovery/discovery-engine.test.ts +0 -435
- package/tests/unit/causal-discovery/weight-matrix.test.ts +0 -328
- package/tests/unit/cli/cli.test.ts +0 -341
- package/tests/unit/cli/commands.test.ts +0 -414
- package/tests/unit/cli/init-command.test.ts +0 -274
- package/tests/unit/cli/migrate-command.test.ts +0 -396
- package/tests/unit/coordination/claims/claim-service.test.ts +0 -949
- package/tests/unit/coordination/claims/handoff-manager.test.ts +0 -773
- package/tests/unit/coordination/claims/work-stealing.test.ts +0 -492
- package/tests/unit/coordination/queen-coordinator.test.ts +0 -966
- package/tests/unit/coordination/result-saver.test.ts +0 -653
- package/tests/unit/coordination/task-executor.test.ts +0 -810
- package/tests/unit/domains/chaos-resilience/chaos-engineer.test.ts +0 -484
- package/tests/unit/domains/chaos-resilience/load-tester.test.ts +0 -559
- package/tests/unit/domains/chaos-resilience/performance-profiler.test.ts +0 -490
- package/tests/unit/domains/code-intelligence/impact-analyzer.test.ts +0 -560
- package/tests/unit/domains/code-intelligence/knowledge-graph.test.ts +0 -460
- package/tests/unit/domains/code-intelligence/semantic-analyzer.test.ts +0 -584
- package/tests/unit/domains/contract-testing/api-compatibility.test.ts +0 -483
- package/tests/unit/domains/contract-testing/contract-validator.test.ts +0 -370
- package/tests/unit/domains/contract-testing/schema-validator.test.ts +0 -610
- package/tests/unit/domains/coverage-analysis/coverage-embedder.test.ts +0 -298
- package/tests/unit/domains/coverage-analysis/hnsw-index.test.ts +0 -292
- package/tests/unit/domains/coverage-analysis/sublinear-analyzer.test.ts +0 -506
- package/tests/unit/domains/defect-intelligence/defect-predictor.test.ts +0 -370
- package/tests/unit/domains/defect-intelligence/pattern-learner.test.ts +0 -546
- package/tests/unit/domains/defect-intelligence/root-cause-analyzer.test.ts +0 -534
- package/tests/unit/domains/learning-optimization/learning-coordinator.test.ts +0 -541
- package/tests/unit/domains/learning-optimization/metrics-optimizer.test.ts +0 -552
- package/tests/unit/domains/learning-optimization/production-intel.test.ts +0 -589
- package/tests/unit/domains/learning-optimization/transfer-specialist.test.ts +0 -453
- package/tests/unit/domains/quality-assessment/coherence-gate.test.ts +0 -1006
- package/tests/unit/domains/quality-assessment/deployment-advisor.test.ts +0 -515
- package/tests/unit/domains/quality-assessment/quality-analyzer.test.ts +0 -401
- package/tests/unit/domains/quality-assessment/quality-gate.test.ts +0 -324
- package/tests/unit/domains/requirements-validation/bdd-scenario-writer.test.ts +0 -479
- package/tests/unit/domains/requirements-validation/requirements-validator.test.ts +0 -452
- package/tests/unit/domains/requirements-validation/testability-scorer.test.ts +0 -505
- package/tests/unit/domains/security-compliance/compliance-validator.test.ts +0 -500
- package/tests/unit/domains/security-compliance/security-auditor.test.ts +0 -498
- package/tests/unit/domains/security-compliance/security-scanner.test.ts +0 -412
- package/tests/unit/domains/visual-accessibility/accessibility-tester.test.ts +0 -432
- package/tests/unit/domains/visual-accessibility/responsive-tester.test.ts +0 -506
- package/tests/unit/domains/visual-accessibility/visual-tester.test.ts +0 -412
- package/tests/unit/early-exit/early-exit-controller.test.ts +0 -548
- package/tests/unit/early-exit/early-exit-decision.test.ts +0 -617
- package/tests/unit/early-exit/index.test.ts +0 -254
- package/tests/unit/early-exit/quality-signal.test.ts +0 -589
- package/tests/unit/early-exit/speculative-executor.test.ts +0 -453
- package/tests/unit/feedback/coverage-learner.test.ts +0 -288
- package/tests/unit/feedback/feedback-loop.test.ts +0 -458
- package/tests/unit/feedback/pattern-promotion.test.ts +0 -390
- package/tests/unit/feedback/quality-score-calculator.test.ts +0 -364
- package/tests/unit/feedback/test-outcome-tracker.test.ts +0 -243
- package/tests/unit/init/init-wizard.test.ts +0 -881
- package/tests/unit/init/project-analyzer.test.ts +0 -807
- package/tests/unit/init/self-configurator.test.ts +0 -493
- package/tests/unit/integrations/ruvector/ast-complexity.test.ts +0 -240
- package/tests/unit/integrations/ruvector/coverage-router.test.ts +0 -366
- package/tests/unit/integrations/ruvector/diff-risk-classifier.test.ts +0 -340
- package/tests/unit/integrations/ruvector/graph-boundaries.test.ts +0 -355
- package/tests/unit/integrations/ruvector/q-learning-router.test.ts +0 -314
- package/tests/unit/kernel/agent-coordinator.test.ts +0 -220
- package/tests/unit/kernel/event-bus.test.ts +0 -197
- package/tests/unit/learning/qe-reasoning-bank.test.ts +0 -666
- package/tests/unit/learning/real-qe-reasoning-bank.benchmark.test.ts +0 -415
- package/tests/unit/mcp/mcp-server.test.ts +0 -544
- package/tests/unit/mcp/metrics/metrics-collector.test.ts +0 -340
- package/tests/unit/mcp/security/cve-prevention.test.ts +0 -512
- package/tests/unit/mcp/security/oauth21-provider.test.ts +0 -624
- package/tests/unit/mcp/security/rate-limiter.test.ts +0 -410
- package/tests/unit/mcp/security/sampling-server.test.ts +0 -420
- package/tests/unit/mcp/security/schema-validator.test.ts +0 -494
- package/tests/unit/mcp/tools/base.test.ts +0 -336
- package/tests/unit/mcp/tools/domain-tools.test.ts +0 -759
- package/tests/unit/mcp/tools/registry.test.ts +0 -240
- package/tests/unit/neural-optimizer/replay-buffer.test.ts +0 -403
- package/tests/unit/neural-optimizer/swarm-topology.test.ts +0 -473
- package/tests/unit/neural-optimizer/topology-optimizer.test.ts +0 -595
- package/tests/unit/neural-optimizer/value-network.test.ts +0 -343
- package/tests/unit/optimization/auto-tuner.test.ts +0 -506
- package/tests/unit/optimization/metric-collectors.test.ts +0 -352
- package/tests/unit/optimization/qe-workers.test.ts +0 -407
- package/tests/unit/optimization/tuning-algorithm.test.ts +0 -467
- package/tests/unit/routing/qe-agent-registry.test.ts +0 -229
- package/tests/unit/routing/qe-task-router.test.ts +0 -390
- package/tests/unit/routing/routing-feedback.test.ts +0 -339
- package/tests/unit/shared/embeddings/nomic-embedder.test.ts +0 -419
- package/tests/unit/shared/http/http-client.test.ts +0 -719
- package/tests/unit/shared/io/file-reader.test.ts +0 -511
- package/tests/unit/shared/llm/cache.test.ts +0 -391
- package/tests/unit/shared/llm/circuit-breaker.test.ts +0 -293
- package/tests/unit/shared/llm/cost-tracker.test.ts +0 -431
- package/tests/unit/shared/llm/provider-manager.test.ts +0 -550
- package/tests/unit/shared/llm/providers.test.ts +0 -532
- package/tests/unit/shared/parsers/typescript-parser.test.ts +0 -693
- package/tests/unit/shared/value-objects.test.ts +0 -184
- package/tests/unit/strange-loop/strange-loop.test.ts +0 -1170
- package/tests/unit/workers/base-worker.test.ts +0 -341
- package/tests/unit/workers/daemon.test.ts +0 -291
- package/tests/unit/workers/worker-manager.test.ts +0 -284
- package/tsconfig.json +0 -32
- package/vitest.config.ts +0 -27
|
@@ -1,1055 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agentic QE v3 - Morning Sync Protocol
|
|
3
|
-
*
|
|
4
|
-
* Daily coordination protocol that runs at 9am or session start
|
|
5
|
-
* Participants: All 12 domains
|
|
6
|
-
* Actions: Review overnight results, identify risks, prioritize work
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
10
|
-
import {
|
|
11
|
-
DomainEvent,
|
|
12
|
-
DomainName,
|
|
13
|
-
Result,
|
|
14
|
-
ok,
|
|
15
|
-
err,
|
|
16
|
-
Severity,
|
|
17
|
-
Priority,
|
|
18
|
-
ALL_DOMAINS,
|
|
19
|
-
} from '../../shared/types';
|
|
20
|
-
import { EventBus } from '../../kernel/interfaces';
|
|
21
|
-
|
|
22
|
-
// ============================================================================
|
|
23
|
-
// Protocol Types
|
|
24
|
-
// ============================================================================
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Configuration for morning sync execution
|
|
28
|
-
*/
|
|
29
|
-
export interface MorningSyncConfig {
|
|
30
|
-
/** Time window to look back for results (default: 24 hours) */
|
|
31
|
-
lookbackHours: number;
|
|
32
|
-
/** Minimum severity threshold for risk identification */
|
|
33
|
-
riskSeverityThreshold: Severity;
|
|
34
|
-
/** Maximum number of priority items to generate */
|
|
35
|
-
maxPriorityItems: number;
|
|
36
|
-
/** Domains to include (default: all) */
|
|
37
|
-
includedDomains: DomainName[];
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Overnight results from a single domain
|
|
42
|
-
*/
|
|
43
|
-
export interface DomainOvernightResults {
|
|
44
|
-
domain: DomainName;
|
|
45
|
-
/** Test execution results */
|
|
46
|
-
testResults?: TestExecutionSummary;
|
|
47
|
-
/** Coverage analysis results */
|
|
48
|
-
coverageResults?: CoverageSummary;
|
|
49
|
-
/** Quality metrics */
|
|
50
|
-
qualityMetrics?: QualityMetricsSummary;
|
|
51
|
-
/** Defect predictions */
|
|
52
|
-
defectPredictions?: DefectPredictionSummary;
|
|
53
|
-
/** Security findings */
|
|
54
|
-
securityFindings?: SecurityFindingsSummary;
|
|
55
|
-
/** Errors encountered */
|
|
56
|
-
errors: string[];
|
|
57
|
-
/** Timestamp of last activity */
|
|
58
|
-
lastActivity?: Date;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export interface TestExecutionSummary {
|
|
62
|
-
totalRuns: number;
|
|
63
|
-
passed: number;
|
|
64
|
-
failed: number;
|
|
65
|
-
skipped: number;
|
|
66
|
-
flakyTests: number;
|
|
67
|
-
averageDuration: number;
|
|
68
|
-
failedTestIds: string[];
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export interface CoverageSummary {
|
|
72
|
-
line: number;
|
|
73
|
-
branch: number;
|
|
74
|
-
function: number;
|
|
75
|
-
statement: number;
|
|
76
|
-
delta: number;
|
|
77
|
-
trend: 'improving' | 'declining' | 'stable';
|
|
78
|
-
gapsIdentified: number;
|
|
79
|
-
criticalGaps: CriticalGap[];
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface CriticalGap {
|
|
83
|
-
file: string;
|
|
84
|
-
lines: number[];
|
|
85
|
-
riskScore: number;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export interface QualityMetricsSummary {
|
|
89
|
-
overallScore: number;
|
|
90
|
-
gatesPassed: number;
|
|
91
|
-
gatesFailed: number;
|
|
92
|
-
failedGates: string[];
|
|
93
|
-
deploymentsBlocked: number;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export interface DefectPredictionSummary {
|
|
97
|
-
highRiskFiles: number;
|
|
98
|
-
predictedDefects: number;
|
|
99
|
-
topRiskFiles: Array<{ file: string; probability: number }>;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export interface SecurityFindingsSummary {
|
|
103
|
-
critical: number;
|
|
104
|
-
high: number;
|
|
105
|
-
medium: number;
|
|
106
|
-
low: number;
|
|
107
|
-
newVulnerabilities: number;
|
|
108
|
-
resolvedVulnerabilities: number;
|
|
109
|
-
complianceScore: number;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Identified risk from overnight analysis
|
|
114
|
-
*/
|
|
115
|
-
export interface IdentifiedRisk {
|
|
116
|
-
id: string;
|
|
117
|
-
severity: Severity;
|
|
118
|
-
priority: Priority;
|
|
119
|
-
domain: DomainName;
|
|
120
|
-
title: string;
|
|
121
|
-
description: string;
|
|
122
|
-
source: string;
|
|
123
|
-
impact: string;
|
|
124
|
-
recommendation: string;
|
|
125
|
-
relatedItems: string[];
|
|
126
|
-
detectedAt: Date;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Prioritized work item
|
|
131
|
-
*/
|
|
132
|
-
export interface PrioritizedWorkItem {
|
|
133
|
-
id: string;
|
|
134
|
-
priority: Priority;
|
|
135
|
-
type: 'fix' | 'test' | 'review' | 'investigate' | 'improve';
|
|
136
|
-
title: string;
|
|
137
|
-
description: string;
|
|
138
|
-
estimatedEffort: 'trivial' | 'small' | 'medium' | 'large';
|
|
139
|
-
domains: DomainName[];
|
|
140
|
-
relatedRisks: string[];
|
|
141
|
-
suggestedAssignee?: string;
|
|
142
|
-
deadline?: Date;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Morning sync report
|
|
147
|
-
*/
|
|
148
|
-
export interface MorningSyncReport {
|
|
149
|
-
syncId: string;
|
|
150
|
-
timestamp: Date;
|
|
151
|
-
duration: number;
|
|
152
|
-
config: MorningSyncConfig;
|
|
153
|
-
/** Aggregated overnight results by domain */
|
|
154
|
-
overnightResults: Map<DomainName, DomainOvernightResults>;
|
|
155
|
-
/** Identified risks */
|
|
156
|
-
risks: IdentifiedRisk[];
|
|
157
|
-
/** Prioritized work items */
|
|
158
|
-
workItems: PrioritizedWorkItem[];
|
|
159
|
-
/** Summary statistics */
|
|
160
|
-
summary: MorningSyncSummary;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export interface MorningSyncSummary {
|
|
164
|
-
totalTestsRun: number;
|
|
165
|
-
overallPassRate: number;
|
|
166
|
-
coverageChange: number;
|
|
167
|
-
criticalRisks: number;
|
|
168
|
-
highPriorityItems: number;
|
|
169
|
-
domainsWithIssues: DomainName[];
|
|
170
|
-
healthyDomains: DomainName[];
|
|
171
|
-
overallHealth: 'healthy' | 'warning' | 'critical';
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// ============================================================================
|
|
175
|
-
// Protocol Events
|
|
176
|
-
// ============================================================================
|
|
177
|
-
|
|
178
|
-
export interface MorningSyncCompletedPayload {
|
|
179
|
-
syncId: string;
|
|
180
|
-
duration: number;
|
|
181
|
-
risksIdentified: number;
|
|
182
|
-
workItemsGenerated: number;
|
|
183
|
-
criticalIssues: number;
|
|
184
|
-
overallHealth: 'healthy' | 'warning' | 'critical';
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
export interface RiskIdentifiedPayload {
|
|
188
|
-
riskId: string;
|
|
189
|
-
severity: Severity;
|
|
190
|
-
priority: Priority;
|
|
191
|
-
domain: DomainName;
|
|
192
|
-
title: string;
|
|
193
|
-
recommendation: string;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export interface WorkPrioritizedPayload {
|
|
197
|
-
syncId: string;
|
|
198
|
-
workItems: Array<{
|
|
199
|
-
id: string;
|
|
200
|
-
priority: Priority;
|
|
201
|
-
type: string;
|
|
202
|
-
title: string;
|
|
203
|
-
}>;
|
|
204
|
-
totalItems: number;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
export const MorningSyncEvents = {
|
|
208
|
-
MorningSyncStarted: 'coordination.MorningSyncStarted',
|
|
209
|
-
MorningSyncCompleted: 'coordination.MorningSyncCompleted',
|
|
210
|
-
RiskIdentified: 'coordination.RiskIdentified',
|
|
211
|
-
WorkPrioritized: 'coordination.WorkPrioritized',
|
|
212
|
-
DomainResultsCollected: 'coordination.DomainResultsCollected',
|
|
213
|
-
} as const;
|
|
214
|
-
|
|
215
|
-
// ============================================================================
|
|
216
|
-
// Domain Data Collectors (Interfaces)
|
|
217
|
-
// ============================================================================
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Interface for collecting overnight data from domains
|
|
221
|
-
*/
|
|
222
|
-
export interface DomainDataCollector {
|
|
223
|
-
collectTestExecutionResults(since: Date): Promise<Result<TestExecutionSummary | undefined, Error>>;
|
|
224
|
-
collectCoverageResults(since: Date): Promise<Result<CoverageSummary | undefined, Error>>;
|
|
225
|
-
collectQualityMetrics(since: Date): Promise<Result<QualityMetricsSummary | undefined, Error>>;
|
|
226
|
-
collectDefectPredictions(since: Date): Promise<Result<DefectPredictionSummary | undefined, Error>>;
|
|
227
|
-
collectSecurityFindings(since: Date): Promise<Result<SecurityFindingsSummary | undefined, Error>>;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// ============================================================================
|
|
231
|
-
// Result Type Helpers
|
|
232
|
-
// ============================================================================
|
|
233
|
-
|
|
234
|
-
function isSuccess<T, E>(result: Result<T, E>): result is { success: true; value: T } {
|
|
235
|
-
return result.success;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
function isFailure<T, E>(result: Result<T, E>): result is { success: false; error: E } {
|
|
239
|
-
return !result.success;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// ============================================================================
|
|
243
|
-
// Morning Sync Protocol Implementation
|
|
244
|
-
// ============================================================================
|
|
245
|
-
|
|
246
|
-
const DEFAULT_CONFIG: MorningSyncConfig = {
|
|
247
|
-
lookbackHours: 24,
|
|
248
|
-
riskSeverityThreshold: 'medium',
|
|
249
|
-
maxPriorityItems: 20,
|
|
250
|
-
includedDomains: [...ALL_DOMAINS],
|
|
251
|
-
};
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Morning Sync Protocol
|
|
255
|
-
*
|
|
256
|
-
* Coordinates daily synchronization across all 12 QE domains.
|
|
257
|
-
* Collects overnight results, identifies risks, and prioritizes work.
|
|
258
|
-
*/
|
|
259
|
-
export class MorningSyncProtocol {
|
|
260
|
-
private config: MorningSyncConfig;
|
|
261
|
-
private collectors: Map<DomainName, DomainDataCollector> = new Map();
|
|
262
|
-
|
|
263
|
-
constructor(
|
|
264
|
-
private readonly eventBus: EventBus,
|
|
265
|
-
config?: Partial<MorningSyncConfig>
|
|
266
|
-
) {
|
|
267
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Register a data collector for a domain
|
|
272
|
-
*/
|
|
273
|
-
registerCollector(domain: DomainName, collector: DomainDataCollector): void {
|
|
274
|
-
this.collectors.set(domain, collector);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Execute the morning sync workflow
|
|
279
|
-
*/
|
|
280
|
-
async execute(): Promise<Result<MorningSyncReport, Error>> {
|
|
281
|
-
const syncId = uuidv4();
|
|
282
|
-
const startTime = Date.now();
|
|
283
|
-
|
|
284
|
-
try {
|
|
285
|
-
// Publish sync started event
|
|
286
|
-
await this.publishEvent(MorningSyncEvents.MorningSyncStarted, {
|
|
287
|
-
syncId,
|
|
288
|
-
timestamp: new Date(),
|
|
289
|
-
config: this.config,
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
// Step 1: Gather overnight results from all domains
|
|
293
|
-
const overnightResultsResult = await this.gatherOvernightResults();
|
|
294
|
-
if (isFailure(overnightResultsResult)) {
|
|
295
|
-
return err(overnightResultsResult.error);
|
|
296
|
-
}
|
|
297
|
-
const overnightResults = overnightResultsResult.value;
|
|
298
|
-
|
|
299
|
-
// Step 2: Identify risks based on results
|
|
300
|
-
const risksResult = await this.identifyRisks(overnightResults);
|
|
301
|
-
if (isFailure(risksResult)) {
|
|
302
|
-
return err(risksResult.error);
|
|
303
|
-
}
|
|
304
|
-
const risks = risksResult.value;
|
|
305
|
-
|
|
306
|
-
// Publish risk events for high-priority items
|
|
307
|
-
for (const risk of risks.filter(r => r.severity === 'critical' || r.severity === 'high')) {
|
|
308
|
-
await this.publishEvent<RiskIdentifiedPayload>(MorningSyncEvents.RiskIdentified, {
|
|
309
|
-
riskId: risk.id,
|
|
310
|
-
severity: risk.severity,
|
|
311
|
-
priority: risk.priority,
|
|
312
|
-
domain: risk.domain,
|
|
313
|
-
title: risk.title,
|
|
314
|
-
recommendation: risk.recommendation,
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
// Step 3: Prioritize work based on risks
|
|
319
|
-
const workItemsResult = await this.prioritizeWork(risks, overnightResults);
|
|
320
|
-
if (isFailure(workItemsResult)) {
|
|
321
|
-
return err(workItemsResult.error);
|
|
322
|
-
}
|
|
323
|
-
const workItems = workItemsResult.value;
|
|
324
|
-
|
|
325
|
-
// Publish work prioritized event
|
|
326
|
-
await this.publishEvent<WorkPrioritizedPayload>(MorningSyncEvents.WorkPrioritized, {
|
|
327
|
-
syncId,
|
|
328
|
-
workItems: workItems.map(w => ({
|
|
329
|
-
id: w.id,
|
|
330
|
-
priority: w.priority,
|
|
331
|
-
type: w.type,
|
|
332
|
-
title: w.title,
|
|
333
|
-
})),
|
|
334
|
-
totalItems: workItems.length,
|
|
335
|
-
});
|
|
336
|
-
|
|
337
|
-
// Step 4: Generate report
|
|
338
|
-
const report = this.generateReport(
|
|
339
|
-
syncId,
|
|
340
|
-
startTime,
|
|
341
|
-
overnightResults,
|
|
342
|
-
risks,
|
|
343
|
-
workItems
|
|
344
|
-
);
|
|
345
|
-
|
|
346
|
-
// Publish sync completed event
|
|
347
|
-
await this.publishEvent<MorningSyncCompletedPayload>(MorningSyncEvents.MorningSyncCompleted, {
|
|
348
|
-
syncId,
|
|
349
|
-
duration: Date.now() - startTime,
|
|
350
|
-
risksIdentified: risks.length,
|
|
351
|
-
workItemsGenerated: workItems.length,
|
|
352
|
-
criticalIssues: risks.filter(r => r.severity === 'critical').length,
|
|
353
|
-
overallHealth: report.summary.overallHealth,
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
return ok(report);
|
|
357
|
-
} catch (error) {
|
|
358
|
-
return err(error instanceof Error ? error : new Error(String(error)));
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
* Gather overnight results from all domains
|
|
364
|
-
*/
|
|
365
|
-
async gatherOvernightResults(): Promise<Result<Map<DomainName, DomainOvernightResults>, Error>> {
|
|
366
|
-
const results = new Map<DomainName, DomainOvernightResults>();
|
|
367
|
-
const since = new Date(Date.now() - this.config.lookbackHours * 60 * 60 * 1000);
|
|
368
|
-
|
|
369
|
-
for (const domain of this.config.includedDomains) {
|
|
370
|
-
const domainResults: DomainOvernightResults = {
|
|
371
|
-
domain,
|
|
372
|
-
errors: [],
|
|
373
|
-
};
|
|
374
|
-
|
|
375
|
-
const collector = this.collectors.get(domain);
|
|
376
|
-
if (!collector) {
|
|
377
|
-
// No collector registered, create empty results
|
|
378
|
-
results.set(domain, domainResults);
|
|
379
|
-
continue;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
// Collect test execution results
|
|
383
|
-
if (domain === 'test-execution' || domain === 'test-generation') {
|
|
384
|
-
const testResult = await collector.collectTestExecutionResults(since);
|
|
385
|
-
if (isSuccess(testResult)) {
|
|
386
|
-
domainResults.testResults = testResult.value;
|
|
387
|
-
} else if (isFailure(testResult)) {
|
|
388
|
-
domainResults.errors.push(`Test execution: ${testResult.error.message}`);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
// Collect coverage results
|
|
393
|
-
if (domain === 'coverage-analysis') {
|
|
394
|
-
const coverageResult = await collector.collectCoverageResults(since);
|
|
395
|
-
if (isSuccess(coverageResult)) {
|
|
396
|
-
domainResults.coverageResults = coverageResult.value;
|
|
397
|
-
} else if (isFailure(coverageResult)) {
|
|
398
|
-
domainResults.errors.push(`Coverage: ${coverageResult.error.message}`);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
// Collect quality metrics
|
|
403
|
-
if (domain === 'quality-assessment') {
|
|
404
|
-
const qualityResult = await collector.collectQualityMetrics(since);
|
|
405
|
-
if (isSuccess(qualityResult)) {
|
|
406
|
-
domainResults.qualityMetrics = qualityResult.value;
|
|
407
|
-
} else if (isFailure(qualityResult)) {
|
|
408
|
-
domainResults.errors.push(`Quality: ${qualityResult.error.message}`);
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
// Collect defect predictions
|
|
413
|
-
if (domain === 'defect-intelligence') {
|
|
414
|
-
const defectResult = await collector.collectDefectPredictions(since);
|
|
415
|
-
if (isSuccess(defectResult)) {
|
|
416
|
-
domainResults.defectPredictions = defectResult.value;
|
|
417
|
-
} else if (isFailure(defectResult)) {
|
|
418
|
-
domainResults.errors.push(`Defect prediction: ${defectResult.error.message}`);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
// Collect security findings
|
|
423
|
-
if (domain === 'security-compliance') {
|
|
424
|
-
const securityResult = await collector.collectSecurityFindings(since);
|
|
425
|
-
if (isSuccess(securityResult)) {
|
|
426
|
-
domainResults.securityFindings = securityResult.value;
|
|
427
|
-
} else if (isFailure(securityResult)) {
|
|
428
|
-
domainResults.errors.push(`Security: ${securityResult.error.message}`);
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
domainResults.lastActivity = new Date();
|
|
433
|
-
results.set(domain, domainResults);
|
|
434
|
-
|
|
435
|
-
// Publish domain results collected event
|
|
436
|
-
await this.publishEvent(MorningSyncEvents.DomainResultsCollected, {
|
|
437
|
-
domain,
|
|
438
|
-
hasResults: domainResults.errors.length === 0,
|
|
439
|
-
errorCount: domainResults.errors.length,
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
return ok(results);
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
/**
|
|
447
|
-
* Identify risks from overnight results
|
|
448
|
-
*/
|
|
449
|
-
async identifyRisks(
|
|
450
|
-
overnightResults: Map<DomainName, DomainOvernightResults>
|
|
451
|
-
): Promise<Result<IdentifiedRisk[], Error>> {
|
|
452
|
-
const risks: IdentifiedRisk[] = [];
|
|
453
|
-
|
|
454
|
-
const entries = Array.from(overnightResults.entries());
|
|
455
|
-
for (const [domain, results] of entries) {
|
|
456
|
-
// Check test execution risks
|
|
457
|
-
if (results.testResults) {
|
|
458
|
-
const testRisks = this.identifyTestRisks(domain, results.testResults);
|
|
459
|
-
risks.push(...testRisks);
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
// Check coverage risks
|
|
463
|
-
if (results.coverageResults) {
|
|
464
|
-
const coverageRisks = this.identifyCoverageRisks(domain, results.coverageResults);
|
|
465
|
-
risks.push(...coverageRisks);
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
// Check quality risks
|
|
469
|
-
if (results.qualityMetrics) {
|
|
470
|
-
const qualityRisks = this.identifyQualityRisks(domain, results.qualityMetrics);
|
|
471
|
-
risks.push(...qualityRisks);
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
// Check defect prediction risks
|
|
475
|
-
if (results.defectPredictions) {
|
|
476
|
-
const defectRisks = this.identifyDefectRisks(domain, results.defectPredictions);
|
|
477
|
-
risks.push(...defectRisks);
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
// Check security risks
|
|
481
|
-
if (results.securityFindings) {
|
|
482
|
-
const securityRisks = this.identifySecurityRisks(domain, results.securityFindings);
|
|
483
|
-
risks.push(...securityRisks);
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
// Sort by severity and priority
|
|
488
|
-
risks.sort((a, b) => {
|
|
489
|
-
const severityOrder: Record<Severity, number> = {
|
|
490
|
-
critical: 0,
|
|
491
|
-
high: 1,
|
|
492
|
-
medium: 2,
|
|
493
|
-
low: 3,
|
|
494
|
-
info: 4,
|
|
495
|
-
};
|
|
496
|
-
const priorityOrder: Record<Priority, number> = { p0: 0, p1: 1, p2: 2, p3: 3 };
|
|
497
|
-
|
|
498
|
-
const severityDiff = severityOrder[a.severity] - severityOrder[b.severity];
|
|
499
|
-
if (severityDiff !== 0) return severityDiff;
|
|
500
|
-
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
501
|
-
});
|
|
502
|
-
|
|
503
|
-
return ok(risks);
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
/**
|
|
507
|
-
* Prioritize work based on identified risks
|
|
508
|
-
*/
|
|
509
|
-
async prioritizeWork(
|
|
510
|
-
risks: IdentifiedRisk[],
|
|
511
|
-
overnightResults: Map<DomainName, DomainOvernightResults>
|
|
512
|
-
): Promise<Result<PrioritizedWorkItem[], Error>> {
|
|
513
|
-
const workItems: PrioritizedWorkItem[] = [];
|
|
514
|
-
|
|
515
|
-
// Generate work items from risks
|
|
516
|
-
for (const risk of risks) {
|
|
517
|
-
const workItem = this.createWorkItemFromRisk(risk);
|
|
518
|
-
workItems.push(workItem);
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
// Add proactive work items based on overnight results
|
|
522
|
-
const proactiveItems = this.generateProactiveWorkItems(overnightResults);
|
|
523
|
-
workItems.push(...proactiveItems);
|
|
524
|
-
|
|
525
|
-
// Deduplicate and merge related items
|
|
526
|
-
const deduplicatedItems = this.deduplicateWorkItems(workItems);
|
|
527
|
-
|
|
528
|
-
// Sort by priority
|
|
529
|
-
deduplicatedItems.sort((a, b) => {
|
|
530
|
-
const priorityOrder: Record<Priority, number> = { p0: 0, p1: 1, p2: 2, p3: 3 };
|
|
531
|
-
return priorityOrder[a.priority] - priorityOrder[b.priority];
|
|
532
|
-
});
|
|
533
|
-
|
|
534
|
-
// Limit to max configured items
|
|
535
|
-
return ok(deduplicatedItems.slice(0, this.config.maxPriorityItems));
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
/**
|
|
539
|
-
* Generate the morning sync summary report
|
|
540
|
-
*/
|
|
541
|
-
generateReport(
|
|
542
|
-
syncId: string,
|
|
543
|
-
startTime: number,
|
|
544
|
-
overnightResults: Map<DomainName, DomainOvernightResults>,
|
|
545
|
-
risks: IdentifiedRisk[],
|
|
546
|
-
workItems: PrioritizedWorkItem[]
|
|
547
|
-
): MorningSyncReport {
|
|
548
|
-
const summary = this.calculateSummary(overnightResults, risks);
|
|
549
|
-
|
|
550
|
-
return {
|
|
551
|
-
syncId,
|
|
552
|
-
timestamp: new Date(),
|
|
553
|
-
duration: Date.now() - startTime,
|
|
554
|
-
config: this.config,
|
|
555
|
-
overnightResults,
|
|
556
|
-
risks,
|
|
557
|
-
workItems,
|
|
558
|
-
summary,
|
|
559
|
-
};
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
// ============================================================================
|
|
563
|
-
// Private Risk Identification Methods
|
|
564
|
-
// ============================================================================
|
|
565
|
-
|
|
566
|
-
private identifyTestRisks(domain: DomainName, testResults: TestExecutionSummary): IdentifiedRisk[] {
|
|
567
|
-
const risks: IdentifiedRisk[] = [];
|
|
568
|
-
const passRate = testResults.totalRuns > 0
|
|
569
|
-
? testResults.passed / testResults.totalRuns
|
|
570
|
-
: 1;
|
|
571
|
-
|
|
572
|
-
// High failure rate
|
|
573
|
-
if (passRate < 0.9) {
|
|
574
|
-
risks.push({
|
|
575
|
-
id: uuidv4(),
|
|
576
|
-
severity: passRate < 0.7 ? 'critical' : 'high',
|
|
577
|
-
priority: passRate < 0.7 ? 'p0' : 'p1',
|
|
578
|
-
domain,
|
|
579
|
-
title: 'High Test Failure Rate',
|
|
580
|
-
description: `Test pass rate is ${(passRate * 100).toFixed(1)}%, below acceptable threshold`,
|
|
581
|
-
source: 'test-execution',
|
|
582
|
-
impact: 'Reduced confidence in code quality, potential release delays',
|
|
583
|
-
recommendation: `Review and fix ${testResults.failed} failing tests immediately`,
|
|
584
|
-
relatedItems: testResults.failedTestIds,
|
|
585
|
-
detectedAt: new Date(),
|
|
586
|
-
});
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
// Flaky tests detected
|
|
590
|
-
if (testResults.flakyTests > 0) {
|
|
591
|
-
risks.push({
|
|
592
|
-
id: uuidv4(),
|
|
593
|
-
severity: testResults.flakyTests > 10 ? 'high' : 'medium',
|
|
594
|
-
priority: testResults.flakyTests > 10 ? 'p1' : 'p2',
|
|
595
|
-
domain,
|
|
596
|
-
title: 'Flaky Tests Detected',
|
|
597
|
-
description: `${testResults.flakyTests} flaky tests identified`,
|
|
598
|
-
source: 'test-execution',
|
|
599
|
-
impact: 'Unreliable test results, wasted CI/CD resources',
|
|
600
|
-
recommendation: 'Investigate and stabilize flaky tests',
|
|
601
|
-
relatedItems: [],
|
|
602
|
-
detectedAt: new Date(),
|
|
603
|
-
});
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
return risks;
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
private identifyCoverageRisks(domain: DomainName, coverageResults: CoverageSummary): IdentifiedRisk[] {
|
|
610
|
-
const risks: IdentifiedRisk[] = [];
|
|
611
|
-
|
|
612
|
-
// Low coverage
|
|
613
|
-
if (coverageResults.line < 70) {
|
|
614
|
-
risks.push({
|
|
615
|
-
id: uuidv4(),
|
|
616
|
-
severity: coverageResults.line < 50 ? 'critical' : 'high',
|
|
617
|
-
priority: coverageResults.line < 50 ? 'p0' : 'p1',
|
|
618
|
-
domain,
|
|
619
|
-
title: 'Low Code Coverage',
|
|
620
|
-
description: `Line coverage is ${coverageResults.line}%, below minimum threshold`,
|
|
621
|
-
source: 'coverage-analysis',
|
|
622
|
-
impact: 'High risk of undetected bugs in production',
|
|
623
|
-
recommendation: `Focus on covering ${coverageResults.gapsIdentified} identified gaps`,
|
|
624
|
-
relatedItems: coverageResults.criticalGaps.map(g => g.file),
|
|
625
|
-
detectedAt: new Date(),
|
|
626
|
-
});
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
// Coverage declining
|
|
630
|
-
if (coverageResults.trend === 'declining' && coverageResults.delta < -5) {
|
|
631
|
-
risks.push({
|
|
632
|
-
id: uuidv4(),
|
|
633
|
-
severity: 'high',
|
|
634
|
-
priority: 'p1',
|
|
635
|
-
domain,
|
|
636
|
-
title: 'Coverage Declining',
|
|
637
|
-
description: `Coverage dropped by ${Math.abs(coverageResults.delta)}% in the last 24 hours`,
|
|
638
|
-
source: 'coverage-analysis',
|
|
639
|
-
impact: 'Quality regression, increasing technical debt',
|
|
640
|
-
recommendation: 'Review recent changes and add missing tests',
|
|
641
|
-
relatedItems: [],
|
|
642
|
-
detectedAt: new Date(),
|
|
643
|
-
});
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
// Critical gaps
|
|
647
|
-
for (const gap of coverageResults.criticalGaps) {
|
|
648
|
-
if (gap.riskScore > 0.8) {
|
|
649
|
-
risks.push({
|
|
650
|
-
id: uuidv4(),
|
|
651
|
-
severity: 'high',
|
|
652
|
-
priority: 'p1',
|
|
653
|
-
domain,
|
|
654
|
-
title: `Critical Coverage Gap: ${gap.file}`,
|
|
655
|
-
description: `High-risk file with ${gap.lines.length} uncovered lines`,
|
|
656
|
-
source: 'coverage-analysis',
|
|
657
|
-
impact: 'High probability of production issues',
|
|
658
|
-
recommendation: `Add tests for lines: ${gap.lines.slice(0, 5).join(', ')}${gap.lines.length > 5 ? '...' : ''}`,
|
|
659
|
-
relatedItems: [gap.file],
|
|
660
|
-
detectedAt: new Date(),
|
|
661
|
-
});
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
return risks;
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
private identifyQualityRisks(domain: DomainName, qualityMetrics: QualityMetricsSummary): IdentifiedRisk[] {
|
|
669
|
-
const risks: IdentifiedRisk[] = [];
|
|
670
|
-
|
|
671
|
-
// Failed quality gates
|
|
672
|
-
if (qualityMetrics.gatesFailed > 0) {
|
|
673
|
-
risks.push({
|
|
674
|
-
id: uuidv4(),
|
|
675
|
-
severity: 'critical',
|
|
676
|
-
priority: 'p0',
|
|
677
|
-
domain,
|
|
678
|
-
title: 'Quality Gates Failing',
|
|
679
|
-
description: `${qualityMetrics.gatesFailed} quality gates are currently failing`,
|
|
680
|
-
source: 'quality-assessment',
|
|
681
|
-
impact: 'Cannot proceed with deployment until resolved',
|
|
682
|
-
recommendation: `Address failing gates: ${qualityMetrics.failedGates.join(', ')}`,
|
|
683
|
-
relatedItems: qualityMetrics.failedGates,
|
|
684
|
-
detectedAt: new Date(),
|
|
685
|
-
});
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
// Low quality score
|
|
689
|
-
if (qualityMetrics.overallScore < 60) {
|
|
690
|
-
risks.push({
|
|
691
|
-
id: uuidv4(),
|
|
692
|
-
severity: qualityMetrics.overallScore < 40 ? 'critical' : 'high',
|
|
693
|
-
priority: qualityMetrics.overallScore < 40 ? 'p0' : 'p1',
|
|
694
|
-
domain,
|
|
695
|
-
title: 'Low Quality Score',
|
|
696
|
-
description: `Overall quality score is ${qualityMetrics.overallScore}/100`,
|
|
697
|
-
source: 'quality-assessment',
|
|
698
|
-
impact: 'High maintenance cost, elevated bug risk',
|
|
699
|
-
recommendation: 'Focus on improving code quality metrics',
|
|
700
|
-
relatedItems: [],
|
|
701
|
-
detectedAt: new Date(),
|
|
702
|
-
});
|
|
703
|
-
}
|
|
704
|
-
|
|
705
|
-
// Blocked deployments
|
|
706
|
-
if (qualityMetrics.deploymentsBlocked > 0) {
|
|
707
|
-
risks.push({
|
|
708
|
-
id: uuidv4(),
|
|
709
|
-
severity: 'high',
|
|
710
|
-
priority: 'p1',
|
|
711
|
-
domain,
|
|
712
|
-
title: 'Deployments Blocked',
|
|
713
|
-
description: `${qualityMetrics.deploymentsBlocked} deployments were blocked overnight`,
|
|
714
|
-
source: 'quality-assessment',
|
|
715
|
-
impact: 'Delivery delays, potential customer impact',
|
|
716
|
-
recommendation: 'Review and address blocking issues',
|
|
717
|
-
relatedItems: [],
|
|
718
|
-
detectedAt: new Date(),
|
|
719
|
-
});
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
return risks;
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
private identifyDefectRisks(domain: DomainName, defectPredictions: DefectPredictionSummary): IdentifiedRisk[] {
|
|
726
|
-
const risks: IdentifiedRisk[] = [];
|
|
727
|
-
|
|
728
|
-
// High-risk files identified
|
|
729
|
-
if (defectPredictions.highRiskFiles > 0) {
|
|
730
|
-
risks.push({
|
|
731
|
-
id: uuidv4(),
|
|
732
|
-
severity: defectPredictions.highRiskFiles > 5 ? 'high' : 'medium',
|
|
733
|
-
priority: defectPredictions.highRiskFiles > 5 ? 'p1' : 'p2',
|
|
734
|
-
domain,
|
|
735
|
-
title: 'High-Risk Files Detected',
|
|
736
|
-
description: `${defectPredictions.highRiskFiles} files have elevated defect probability`,
|
|
737
|
-
source: 'defect-intelligence',
|
|
738
|
-
impact: 'Increased likelihood of production bugs',
|
|
739
|
-
recommendation: 'Prioritize review and testing of high-risk files',
|
|
740
|
-
relatedItems: defectPredictions.topRiskFiles.map(f => f.file),
|
|
741
|
-
detectedAt: new Date(),
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
|
|
745
|
-
// Top risk files
|
|
746
|
-
for (const riskFile of defectPredictions.topRiskFiles.filter(f => f.probability > 0.7)) {
|
|
747
|
-
risks.push({
|
|
748
|
-
id: uuidv4(),
|
|
749
|
-
severity: 'high',
|
|
750
|
-
priority: 'p1',
|
|
751
|
-
domain,
|
|
752
|
-
title: `High Defect Probability: ${riskFile.file}`,
|
|
753
|
-
description: `${(riskFile.probability * 100).toFixed(0)}% probability of defects`,
|
|
754
|
-
source: 'defect-intelligence',
|
|
755
|
-
impact: 'Very likely to cause production issues',
|
|
756
|
-
recommendation: 'Thorough code review and additional testing required',
|
|
757
|
-
relatedItems: [riskFile.file],
|
|
758
|
-
detectedAt: new Date(),
|
|
759
|
-
});
|
|
760
|
-
}
|
|
761
|
-
|
|
762
|
-
return risks;
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
private identifySecurityRisks(domain: DomainName, securityFindings: SecurityFindingsSummary): IdentifiedRisk[] {
|
|
766
|
-
const risks: IdentifiedRisk[] = [];
|
|
767
|
-
|
|
768
|
-
// Critical vulnerabilities
|
|
769
|
-
if (securityFindings.critical > 0) {
|
|
770
|
-
risks.push({
|
|
771
|
-
id: uuidv4(),
|
|
772
|
-
severity: 'critical',
|
|
773
|
-
priority: 'p0',
|
|
774
|
-
domain,
|
|
775
|
-
title: 'Critical Security Vulnerabilities',
|
|
776
|
-
description: `${securityFindings.critical} critical vulnerabilities detected`,
|
|
777
|
-
source: 'security-compliance',
|
|
778
|
-
impact: 'Immediate security threat, potential data breach',
|
|
779
|
-
recommendation: 'Fix critical vulnerabilities immediately',
|
|
780
|
-
relatedItems: [],
|
|
781
|
-
detectedAt: new Date(),
|
|
782
|
-
});
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
// High vulnerabilities
|
|
786
|
-
if (securityFindings.high > 0) {
|
|
787
|
-
risks.push({
|
|
788
|
-
id: uuidv4(),
|
|
789
|
-
severity: 'high',
|
|
790
|
-
priority: 'p1',
|
|
791
|
-
domain,
|
|
792
|
-
title: 'High Security Vulnerabilities',
|
|
793
|
-
description: `${securityFindings.high} high-severity vulnerabilities detected`,
|
|
794
|
-
source: 'security-compliance',
|
|
795
|
-
impact: 'Significant security risk',
|
|
796
|
-
recommendation: 'Address high-severity vulnerabilities within 24 hours',
|
|
797
|
-
relatedItems: [],
|
|
798
|
-
detectedAt: new Date(),
|
|
799
|
-
});
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
// New vulnerabilities
|
|
803
|
-
if (securityFindings.newVulnerabilities > 0) {
|
|
804
|
-
risks.push({
|
|
805
|
-
id: uuidv4(),
|
|
806
|
-
severity: 'medium',
|
|
807
|
-
priority: 'p2',
|
|
808
|
-
domain,
|
|
809
|
-
title: 'New Vulnerabilities Introduced',
|
|
810
|
-
description: `${securityFindings.newVulnerabilities} new vulnerabilities introduced overnight`,
|
|
811
|
-
source: 'security-compliance',
|
|
812
|
-
impact: 'Security posture degradation',
|
|
813
|
-
recommendation: 'Review recent changes for security issues',
|
|
814
|
-
relatedItems: [],
|
|
815
|
-
detectedAt: new Date(),
|
|
816
|
-
});
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
// Low compliance score
|
|
820
|
-
if (securityFindings.complianceScore < 80) {
|
|
821
|
-
risks.push({
|
|
822
|
-
id: uuidv4(),
|
|
823
|
-
severity: securityFindings.complianceScore < 60 ? 'high' : 'medium',
|
|
824
|
-
priority: securityFindings.complianceScore < 60 ? 'p1' : 'p2',
|
|
825
|
-
domain,
|
|
826
|
-
title: 'Low Compliance Score',
|
|
827
|
-
description: `Compliance score is ${securityFindings.complianceScore}%`,
|
|
828
|
-
source: 'security-compliance',
|
|
829
|
-
impact: 'Regulatory risk, potential audit findings',
|
|
830
|
-
recommendation: 'Address compliance violations',
|
|
831
|
-
relatedItems: [],
|
|
832
|
-
detectedAt: new Date(),
|
|
833
|
-
});
|
|
834
|
-
}
|
|
835
|
-
|
|
836
|
-
return risks;
|
|
837
|
-
}
|
|
838
|
-
|
|
839
|
-
// ============================================================================
|
|
840
|
-
// Private Work Item Methods
|
|
841
|
-
// ============================================================================
|
|
842
|
-
|
|
843
|
-
private createWorkItemFromRisk(risk: IdentifiedRisk): PrioritizedWorkItem {
|
|
844
|
-
const typeMap: Record<string, PrioritizedWorkItem['type']> = {
|
|
845
|
-
'test-execution': 'fix',
|
|
846
|
-
'coverage-analysis': 'test',
|
|
847
|
-
'quality-assessment': 'improve',
|
|
848
|
-
'defect-intelligence': 'review',
|
|
849
|
-
'security-compliance': 'fix',
|
|
850
|
-
};
|
|
851
|
-
|
|
852
|
-
return {
|
|
853
|
-
id: uuidv4(),
|
|
854
|
-
priority: risk.priority,
|
|
855
|
-
type: typeMap[risk.source] || 'investigate',
|
|
856
|
-
title: `[${risk.severity.toUpperCase()}] ${risk.title}`,
|
|
857
|
-
description: `${risk.description}\n\nRecommendation: ${risk.recommendation}`,
|
|
858
|
-
estimatedEffort: this.estimateEffort(risk),
|
|
859
|
-
domains: [risk.domain],
|
|
860
|
-
relatedRisks: [risk.id],
|
|
861
|
-
};
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
private estimateEffort(risk: IdentifiedRisk): PrioritizedWorkItem['estimatedEffort'] {
|
|
865
|
-
// Simple estimation based on severity and related items
|
|
866
|
-
if (risk.severity === 'critical') return 'large';
|
|
867
|
-
if (risk.severity === 'high') return risk.relatedItems.length > 3 ? 'large' : 'medium';
|
|
868
|
-
if (risk.severity === 'medium') return risk.relatedItems.length > 5 ? 'medium' : 'small';
|
|
869
|
-
return 'trivial';
|
|
870
|
-
}
|
|
871
|
-
|
|
872
|
-
private generateProactiveWorkItems(
|
|
873
|
-
overnightResults: Map<DomainName, DomainOvernightResults>
|
|
874
|
-
): PrioritizedWorkItem[] {
|
|
875
|
-
const items: PrioritizedWorkItem[] = [];
|
|
876
|
-
|
|
877
|
-
// Check for domains with no activity
|
|
878
|
-
const entries = Array.from(overnightResults.entries());
|
|
879
|
-
for (const [domain, results] of entries) {
|
|
880
|
-
if (!results.lastActivity) {
|
|
881
|
-
items.push({
|
|
882
|
-
id: uuidv4(),
|
|
883
|
-
priority: 'p3',
|
|
884
|
-
type: 'investigate',
|
|
885
|
-
title: `No Activity: ${domain}`,
|
|
886
|
-
description: `Domain ${domain} had no activity in the last ${this.config.lookbackHours} hours`,
|
|
887
|
-
estimatedEffort: 'small',
|
|
888
|
-
domains: [domain],
|
|
889
|
-
relatedRisks: [],
|
|
890
|
-
});
|
|
891
|
-
}
|
|
892
|
-
}
|
|
893
|
-
|
|
894
|
-
// Add coverage improvement item if coverage is good but could be better
|
|
895
|
-
const coverageResults = overnightResults.get('coverage-analysis')?.coverageResults;
|
|
896
|
-
if (coverageResults && coverageResults.line >= 70 && coverageResults.line < 85) {
|
|
897
|
-
items.push({
|
|
898
|
-
id: uuidv4(),
|
|
899
|
-
priority: 'p3',
|
|
900
|
-
type: 'improve',
|
|
901
|
-
title: 'Proactive Coverage Improvement',
|
|
902
|
-
description: `Coverage is at ${coverageResults.line}%. Consider targeting 85%+ for better quality.`,
|
|
903
|
-
estimatedEffort: 'medium',
|
|
904
|
-
domains: ['coverage-analysis', 'test-generation'],
|
|
905
|
-
relatedRisks: [],
|
|
906
|
-
});
|
|
907
|
-
}
|
|
908
|
-
|
|
909
|
-
return items;
|
|
910
|
-
}
|
|
911
|
-
|
|
912
|
-
private deduplicateWorkItems(items: PrioritizedWorkItem[]): PrioritizedWorkItem[] {
|
|
913
|
-
const seen = new Map<string, PrioritizedWorkItem>();
|
|
914
|
-
|
|
915
|
-
for (const item of items) {
|
|
916
|
-
// Create a key based on type and related items
|
|
917
|
-
const key = `${item.type}-${item.title.substring(0, 50)}`;
|
|
918
|
-
|
|
919
|
-
if (!seen.has(key)) {
|
|
920
|
-
seen.set(key, item);
|
|
921
|
-
} else {
|
|
922
|
-
// Merge related risks
|
|
923
|
-
const existing = seen.get(key)!;
|
|
924
|
-
existing.relatedRisks.push(...item.relatedRisks);
|
|
925
|
-
// Keep higher priority
|
|
926
|
-
if (this.priorityValue(item.priority) < this.priorityValue(existing.priority)) {
|
|
927
|
-
existing.priority = item.priority;
|
|
928
|
-
}
|
|
929
|
-
}
|
|
930
|
-
}
|
|
931
|
-
|
|
932
|
-
return Array.from(seen.values());
|
|
933
|
-
}
|
|
934
|
-
|
|
935
|
-
private priorityValue(priority: Priority): number {
|
|
936
|
-
const map: Record<Priority, number> = { p0: 0, p1: 1, p2: 2, p3: 3 };
|
|
937
|
-
return map[priority];
|
|
938
|
-
}
|
|
939
|
-
|
|
940
|
-
// ============================================================================
|
|
941
|
-
// Private Summary Methods
|
|
942
|
-
// ============================================================================
|
|
943
|
-
|
|
944
|
-
private calculateSummary(
|
|
945
|
-
overnightResults: Map<DomainName, DomainOvernightResults>,
|
|
946
|
-
risks: IdentifiedRisk[]
|
|
947
|
-
): MorningSyncSummary {
|
|
948
|
-
let totalTestsRun = 0;
|
|
949
|
-
let totalPassed = 0;
|
|
950
|
-
let coverageChange = 0;
|
|
951
|
-
const domainsWithIssues: DomainName[] = [];
|
|
952
|
-
const healthyDomains: DomainName[] = [];
|
|
953
|
-
|
|
954
|
-
const entries = Array.from(overnightResults.entries());
|
|
955
|
-
for (const [domain, results] of entries) {
|
|
956
|
-
if (results.testResults) {
|
|
957
|
-
totalTestsRun += results.testResults.totalRuns;
|
|
958
|
-
totalPassed += results.testResults.passed;
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
if (results.coverageResults) {
|
|
962
|
-
coverageChange = results.coverageResults.delta;
|
|
963
|
-
}
|
|
964
|
-
|
|
965
|
-
if (results.errors.length > 0) {
|
|
966
|
-
domainsWithIssues.push(domain);
|
|
967
|
-
} else {
|
|
968
|
-
healthyDomains.push(domain);
|
|
969
|
-
}
|
|
970
|
-
}
|
|
971
|
-
|
|
972
|
-
const criticalRisks = risks.filter(r => r.severity === 'critical').length;
|
|
973
|
-
const highPriorityItems = risks.filter(r => r.priority === 'p0' || r.priority === 'p1').length;
|
|
974
|
-
|
|
975
|
-
// Determine overall health
|
|
976
|
-
let overallHealth: MorningSyncSummary['overallHealth'];
|
|
977
|
-
if (criticalRisks > 0) {
|
|
978
|
-
overallHealth = 'critical';
|
|
979
|
-
} else if (highPriorityItems > 5 || domainsWithIssues.length > 3) {
|
|
980
|
-
overallHealth = 'warning';
|
|
981
|
-
} else {
|
|
982
|
-
overallHealth = 'healthy';
|
|
983
|
-
}
|
|
984
|
-
|
|
985
|
-
return {
|
|
986
|
-
totalTestsRun,
|
|
987
|
-
overallPassRate: totalTestsRun > 0 ? totalPassed / totalTestsRun : 1,
|
|
988
|
-
coverageChange,
|
|
989
|
-
criticalRisks,
|
|
990
|
-
highPriorityItems,
|
|
991
|
-
domainsWithIssues,
|
|
992
|
-
healthyDomains,
|
|
993
|
-
overallHealth,
|
|
994
|
-
};
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
// ============================================================================
|
|
998
|
-
// Event Publishing
|
|
999
|
-
// ============================================================================
|
|
1000
|
-
|
|
1001
|
-
private async publishEvent<T>(type: string, payload: T): Promise<void> {
|
|
1002
|
-
const event: DomainEvent<T> = {
|
|
1003
|
-
id: uuidv4(),
|
|
1004
|
-
type,
|
|
1005
|
-
timestamp: new Date(),
|
|
1006
|
-
source: 'test-execution', // Using a valid DomainName as coordination isn't a domain
|
|
1007
|
-
payload,
|
|
1008
|
-
};
|
|
1009
|
-
await this.eventBus.publish(event);
|
|
1010
|
-
}
|
|
1011
|
-
}
|
|
1012
|
-
|
|
1013
|
-
// ============================================================================
|
|
1014
|
-
// Default Data Collector (for when no collector is registered)
|
|
1015
|
-
// ============================================================================
|
|
1016
|
-
|
|
1017
|
-
/**
|
|
1018
|
-
* Default collector that returns empty results
|
|
1019
|
-
* Used as fallback when domain-specific collectors aren't available
|
|
1020
|
-
*/
|
|
1021
|
-
export class DefaultDomainDataCollector implements DomainDataCollector {
|
|
1022
|
-
async collectTestExecutionResults(_since: Date): Promise<Result<TestExecutionSummary | undefined, Error>> {
|
|
1023
|
-
return ok(undefined);
|
|
1024
|
-
}
|
|
1025
|
-
|
|
1026
|
-
async collectCoverageResults(_since: Date): Promise<Result<CoverageSummary | undefined, Error>> {
|
|
1027
|
-
return ok(undefined);
|
|
1028
|
-
}
|
|
1029
|
-
|
|
1030
|
-
async collectQualityMetrics(_since: Date): Promise<Result<QualityMetricsSummary | undefined, Error>> {
|
|
1031
|
-
return ok(undefined);
|
|
1032
|
-
}
|
|
1033
|
-
|
|
1034
|
-
async collectDefectPredictions(_since: Date): Promise<Result<DefectPredictionSummary | undefined, Error>> {
|
|
1035
|
-
return ok(undefined);
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
|
-
async collectSecurityFindings(_since: Date): Promise<Result<SecurityFindingsSummary | undefined, Error>> {
|
|
1039
|
-
return ok(undefined);
|
|
1040
|
-
}
|
|
1041
|
-
}
|
|
1042
|
-
|
|
1043
|
-
// ============================================================================
|
|
1044
|
-
// Factory Function
|
|
1045
|
-
// ============================================================================
|
|
1046
|
-
|
|
1047
|
-
/**
|
|
1048
|
-
* Create a Morning Sync Protocol instance with default configuration
|
|
1049
|
-
*/
|
|
1050
|
-
export function createMorningSyncProtocol(
|
|
1051
|
-
eventBus: EventBus,
|
|
1052
|
-
config?: Partial<MorningSyncConfig>
|
|
1053
|
-
): MorningSyncProtocol {
|
|
1054
|
-
return new MorningSyncProtocol(eventBus, config);
|
|
1055
|
-
}
|