-
-
Notifications
You must be signed in to change notification settings - Fork 34
Quality Gates
Saros Industries edited this page Jun 28, 2025
·
1 revision
Quality Gates in BMAD Enterprise ensure business model integrity and compliance through automated and manual validation processes integrated with the framework's quality assurance system.
class BMADQualityGates {
constructor(framework) {
this.framework = framework;
this.validator = framework.getValidator();
this.qualityEngine = framework.getQualityEngine();
this.setupGates();
}
setupGates() {
// Register BMAD-specific quality gates
this.qualityEngine.registerGate('bmad.business_model.validation', {
stage: 'pre_approval',
validator: this.validateBusinessModel.bind(this),
blocking: true
});
this.qualityEngine.registerGate('bmad.stakeholder.analysis', {
stage: 'analysis',
validator: this.validateStakeholderAnalysis.bind(this),
blocking: false
});
this.qualityEngine.registerGate('bmad.financial.consistency', {
stage: 'financial_review',
validator: this.validateFinancialConsistency.bind(this),
blocking: true
});
this.qualityEngine.registerGate('bmad.compliance.check', {
stage: 'compliance',
validator: this.validateCompliance.bind(this),
blocking: true
});
}
async validateBusinessModel(model, context) {
const results = {
passed: true,
warnings: [],
errors: [],
metrics: {}
};
// Canvas completeness check
const canvasResults = await this.validateCanvas(model.canvas);
results.metrics.canvas_completeness = canvasResults.completeness;
if (canvasResults.completeness < 0.8) {
results.errors.push('Business Model Canvas is incomplete (< 80%)');
results.passed = false;
}
// Value proposition validation
const vpResults = await this.validateValuePropositions(model.canvas.value_propositions);
results.metrics.value_proposition_clarity = vpResults.clarity_score;
if (vpResults.clarity_score < 0.7) {
results.warnings.push('Value propositions need clarification');
}
// Market fit analysis
const marketResults = await this.validateMarketFit(model);
results.metrics.market_fit_confidence = marketResults.confidence;
if (marketResults.confidence < 0.6) {
results.errors.push('Market fit confidence too low');
results.passed = false;
}
return results;
}
async validateStakeholderAnalysis(stakeholders, context) {
const results = {
passed: true,
warnings: [],
errors: [],
metrics: {}
};
// Stakeholder coverage check
const coverage = this.calculateStakeholderCoverage(stakeholders);
results.metrics.stakeholder_coverage = coverage;
if (coverage < 0.85) {
results.warnings.push('Stakeholder analysis may be incomplete');
}
// Influence mapping validation
const influenceResults = await this.validateInfluenceMapping(stakeholders);
results.metrics.influence_mapping_accuracy = influenceResults.accuracy;
// Engagement plan completeness
const engagementResults = await this.validateEngagementPlans(stakeholders);
results.metrics.engagement_plan_completeness = engagementResults.completeness;
if (engagementResults.completeness < 0.75) {
results.errors.push('Engagement plans incomplete for key stakeholders');
results.passed = false;
}
return results;
}
async validateFinancialConsistency(financials, context) {
const results = {
passed: true,
warnings: [],
errors: [],
metrics: {}
};
// Revenue stream validation
const revenueConsistency = await this.validateRevenueStreams(financials);
results.metrics.revenue_consistency = revenueConsistency.score;
if (revenueConsistency.score < 0.8) {
results.errors.push('Revenue projections inconsistent with business model');
results.passed = false;
}
// Cost structure analysis
const costAnalysis = await this.validateCostStructure(financials);
results.metrics.cost_structure_realism = costAnalysis.realism_score;
if (costAnalysis.realism_score < 0.7) {
results.warnings.push('Cost structure may be unrealistic');
}
// Break-even analysis
const breakEvenResults = await this.validateBreakEvenAnalysis(financials);
results.metrics.break_even_timeline = breakEvenResults.timeline_months;
if (breakEvenResults.timeline_months > 36) {
results.warnings.push('Break-even timeline exceeds 3 years');
}
return results;
}
async validateCompliance(model, context) {
const results = {
passed: true,
warnings: [],
errors: [],
metrics: {}
};
// Industry-specific compliance
const industryCompliance = await this.checkIndustryCompliance(model);
results.metrics.industry_compliance_score = industryCompliance.score;
if (industryCompliance.score < 0.9) {
results.errors.push('Industry compliance requirements not met');
results.passed = false;
}
// Data privacy compliance
const privacyCompliance = await this.checkDataPrivacyCompliance(model);
results.metrics.privacy_compliance_score = privacyCompliance.score;
// Regulatory requirements
const regulatoryCompliance = await this.checkRegulatoryCompliance(model);
results.metrics.regulatory_compliance_score = regulatoryCompliance.score;
if (regulatoryCompliance.critical_issues.length > 0) {
results.errors.push(...regulatoryCompliance.critical_issues);
results.passed = false;
}
return results;
}
}class BMADQualityMetrics {
constructor(framework) {
this.framework = framework;
this.metricsEngine = framework.getMetricsEngine();
this.initializeMetrics();
}
initializeMetrics() {
// Register BMAD quality metrics
this.metricsEngine.registerMetric('bmad.model.completeness', {
calculator: this.calculateModelCompleteness.bind(this),
threshold: { warning: 0.8, error: 0.6 },
frequency: 'on_change'
});
this.metricsEngine.registerMetric('bmad.stakeholder.engagement', {
calculator: this.calculateStakeholderEngagement.bind(this),
threshold: { warning: 0.7, error: 0.5 },
frequency: 'daily'
});
this.metricsEngine.registerMetric('bmad.financial.accuracy', {
calculator: this.calculateFinancialAccuracy.bind(this),
threshold: { warning: 0.85, error: 0.7 },
frequency: 'weekly'
});
}
async calculateModelCompleteness(modelId) {
const model = await this.framework.bmad.getModel(modelId);
const sections = [
'value_propositions',
'customer_segments',
'channels',
'customer_relationships',
'revenue_streams',
'key_resources',
'key_activities',
'key_partnerships',
'cost_structure'
];
const completedSections = sections.filter(section =>
model.canvas[section] &&
model.canvas[section].length > 0 &&
model.canvas[section].every(item => item.validated === true)
);
return {
value: completedSections.length / sections.length,
details: {
completed: completedSections,
missing: sections.filter(s => !completedSections.includes(s)),
total_sections: sections.length
}
};
}
async generateQualityReport(modelId, timeRange = '30d') {
const metrics = await this.metricsEngine.getMetrics([
'bmad.model.completeness',
'bmad.stakeholder.engagement',
'bmad.financial.accuracy'
], modelId, timeRange);
const qualityGateResults = await this.framework.qualityEngine.getResults(
modelId,
timeRange
);
return {
overall_score: this.calculateOverallQualityScore(metrics),
metrics,
quality_gates: qualityGateResults,
trends: this.calculateQualityTrends(metrics, timeRange),
recommendations: await this.generateQualityRecommendations(metrics)
};
}
}- ποΈ Framework Overview
- π RIPER Modes
- πΎ Memory System
- π£ Symbolic Notation
- π Phase Management
- π‘οΈ Code Protection
- π Context References
- π Permission System
- π Cross-References
- πΎ Backup System
- π Mode Transitions
- πΎ Memory Management
- π‘οΈ Protection Workflow
- π Context Management
- π₯ Team Collaboration
- π£ Symbol Reference
- β¨οΈ Command Reference
- π Mode Reference
- π Permission Matrix
- π API Reference
- π Overview
- π GitHub Integration
- π Web Search
- π Browser Automation
- π³ Docker Integration
-
Installation Issues
- Node.js Version Compatibility
- Package Installation Failures
- Framework Dependencies Missing
- Database Connection Issues
- Port Conflicts
- Environment Setup Issues
- Build and Development Issues
- Framework CLI Issues
-
Configuration & Runtime Issues
- Framework Configuration Problems
- Runtime Performance Issues
- Module Loading and Plugin Issues
- Database and Storage Issues
- Memory Leaks and High Memory Usage
- High CPU Usage
-
BMAD Module Issues
- BMAD Module Initialization Problems
- Business Model Canvas Issues
- Stakeholder Management Issues
- Analytics and Reporting Issues
- Performance Optimization
-
Database & API Issues
- Database Connection Problems
- Database Migration Issues
- API Performance and Reliability Issues
- Data Consistency Issues
- Transaction Problems
-
Performance & Memory Issues
- Memory Management
- CPU Optimization
- Database Query Performance
- Caching Issues
- Resource Monitoring
-
Security & Authentication Issues
- Authentication Failures
- Authorization Problems
- JWT Token Issues
- Session Management
- CORS and Security Headers
- SSL/TLS Configuration
-
Deployment & Production Issues
- Production Deployment Failures
- Environment Configuration
- Load Balancing Issues
- Monitoring and Logging
- Backup and Recovery
When reporting issues, please include:
- Framework version (
npm list @cursoriper/core) - Node.js version (
node --version) - Operating system and version
- Error messages and stack traces
- Steps to reproduce the issue
- Configuration files (sanitized)
- Recent changes or deployments
- Technical Support: support@cursoriper.com
- Documentation: https://docs.cursoriper.com
- Community Forum: https://community.cursoriper.com