/** * Agentic QE v3 - Coherence-Gated Quality Gates Types * ADR-030: RuVector lambda-coherence integration with 4-tier compute allocation * * Based on ruvector-mincut-gated-transformer's coherence gate pattern */ /** * Quality Lambda represents the "minimum cut" between acceptable and unacceptable quality states. * Inspired by ruvector-mincut-gated-transformer's gate.rs */ export interface QualityLambda { /** Current lambda value (0-100 scale) - minimum quality dimension */ lambda: number; /** Previous lambda value for delta/drop calculation */ lambdaPrev: number; /** Number of quality dimensions at boundary (near threshold, unstable) */ boundaryEdges: number; /** Concentration of instability (Q15 fixed-point: 0-32767, where 32767 = 100%) */ boundaryConcentrationQ15: number; /** Number of quality partitions (fragmented quality clusters) */ partitionCount: number; /** Control flags for forced states */ flags: QualityLambdaFlags; /** Timestamp of calculation */ calculatedAt: Date; /** Individual dimension values (normalized 0-1) */ dimensions: QualityDimensions; } /** * Quality dimensions normalized to 0-1 scale */ export interface QualityDimensions { /** Line/statement coverage (0-1) */ coverage: number; /** Test pass rate (0-1) */ passRate: number; /** Security score (0-1, where 1 = no vulnerabilities) */ security: number; /** Performance score (0-1, based on P95 latency vs target) */ performance: number; /** Maintainability index (0-1) */ maintainability: number; /** Reliability score (0-1, based on flaky test ratio) */ reliability: number; /** Technical debt ratio (0-1, where 1 = no debt) */ technicalDebt?: number; /** Code duplication score (0-1, where 1 = no duplication) */ duplication?: number; } /** * Raw quality metrics input (before normalization) */ export interface QualityMetricsInput { /** Line coverage percentage (0-100) */ lineCoverage: number; /** Branch coverage percentage (0-100, optional) */ branchCoverage?: number; /** Test pass rate percentage (0-100) */ testPassRate: number; /** Count of critical security vulnerabilities */ criticalVulns: number; /** Count of high severity vulnerabilities */ highVulns?: number; /** Count of medium severity vulnerabilities */ mediumVulns?: number; /** P95 latency in milliseconds */ p95Latency: number; /** Target latency in milliseconds */ targetLatency: number; /** Maintainability index (0-100) */ maintainabilityIndex: number; /** Ratio of flaky tests (0-1) */ flakyTestRatio?: number; /** Technical debt in hours */ technicalDebtHours?: number; /** Maximum acceptable technical debt in hours */ maxAcceptableDebtHours?: number; /** Code duplication percentage (0-100) */ duplicationPercent?: number; /** Previous lambda value for trend detection */ previousLambda?: number; } /** * Quality lambda control flags */ export declare enum QualityLambdaFlags { /** No flags set */ NONE = 0, /** Force safe mode regardless of metrics */ FORCE_SAFE = 1, /** Force quarantine regardless of metrics */ FORCE_QUARANTINE = 2, /** Skip all quality checks (emergency bypass) */ BYPASS_CHECKS = 4, /** Quality is trending downward */ TRENDING_DOWN = 8, /** Quality is trending upward */ TRENDING_UP = 16, /** First evaluation (no historical data) */ FIRST_EVALUATION = 32 } /** * Quality tier for response allocation * Based on ruvector-mincut-gated-transformer's TierDecision */ export declare enum QualityTier { /** Tier 0: Normal operation - all checks pass, full deployment allowed */ NORMAL = 0, /** Tier 1: Reduced scope - non-critical issues detected, additional verification required */ REDUCED = 1, /** Tier 2: Safe mode - freeze risky operations, block deployment pending review */ SAFE = 2, /** Tier 3: Quarantine - critical issues, block all deployments */ QUARANTINE = 3 } /** * Reason for quality gate decision */ export type QualityGateReason = 'none' | 'lambdaBelowMin' | 'lambdaDroppedFast' | 'boundarySpike' | 'boundaryConcentrationSpike' | 'partitionDrift' | 'forcedByFlag' | 'securityCritical' | 'coverageDrop' | 'testFailureSpike'; /** * Quality actions to take based on decision */ export type QualityAction = 'runAdditionalTests' | 'notifyReviewers' | 'requireApproval' | 'blockDeploy' | 'alertTeam' | 'scheduleReview' | 'blockAllDeploys' | 'escalateToLeads' | 'rollbackIfNeeded' | 'increaseMonitoring' | 'runSecurityScan' | 'generateReport'; /** * Quality gate decision output */ export interface QualityGateDecision { /** Overall decision */ decision: 'allow' | 'reduceScope' | 'freezeWrites' | 'quarantine'; /** Primary reason for decision */ reason: QualityGateReason; /** Additional reasons (if multiple issues detected) */ additionalReasons?: QualityGateReason[]; /** Tier level (0-3) */ tier: QualityTier; /** Specific actions to take */ actions: QualityAction[]; /** Confidence in decision (0-1) */ confidence: number; /** Human-readable explanation */ explanation: string; /** Lambda metrics at time of decision */ lambda: QualityLambda; /** Timestamp of decision */ decidedAt: Date; /** Time to live for this decision in seconds */ ttlSeconds: number; /** Can be overridden by authorized user */ overridable: boolean; } /** * Coherence gate policy configuration */ export interface CoherenceGatePolicy { /** Minimum lambda required for deployment (0-100, default: 60) */ lambdaMin: number; /** Warning threshold for lambda (0-100, default: 70) */ lambdaWarn: number; /** Maximum lambda drop ratio (Q15: 0-32767, default: 8192 = 25%) */ dropRatioQ15Max: number; /** Maximum boundary edges before reducing scope (default: 3) */ boundaryEdgesMax: number; /** Maximum boundary concentration Q15 (default: 16384 = 50%) */ boundaryConcentrationQ15Max: number; /** Maximum partition count before concern (default: 4) */ partitionsMax: number; /** Allow deployment with warnings when unstable (default: false) */ allowDeployWhenUnstable: boolean; /** Boundary threshold for dimension detection (default: 0.7) */ boundaryThreshold: number; /** Boundary tolerance for edge detection (default: 0.1) */ boundaryTolerance: number; /** Decision TTL in seconds (default: 300) */ decisionTtlSeconds: number; /** Enable trend analysis (default: true) */ enableTrendAnalysis: boolean; /** Minimum samples for trend analysis (default: 3) */ minTrendSamples: number; } /** * Default policy configuration */ export declare const DEFAULT_COHERENCE_GATE_POLICY: CoherenceGatePolicy; /** * A quality partition represents a cluster of related quality issues */ export interface QualityPartition { /** Unique partition identifier */ id: string; /** Partition type/category */ type: QualityPartitionType; /** Dimensions included in this partition */ dimensions: (keyof QualityDimensions)[]; /** Severity of this partition (0-1) */ severity: number; /** Whether this partition is critical */ isCritical: boolean; /** Related file paths (if applicable) */ affectedPaths?: string[]; /** Suggested remediation */ remediation?: string; } /** * Quality partition types */ export type QualityPartitionType = 'testing' | 'security' | 'performance' | 'maintainability' | 'mixed'; /** * Historical lambda data point */ export interface LambdaHistoryPoint { /** Lambda value */ lambda: number; /** Timestamp */ timestamp: Date; /** Associated decision (if any) */ decision?: QualityGateDecision; /** Commit SHA (if applicable) */ commitSha?: string; /** Branch name (if applicable) */ branch?: string; } /** * Lambda trend analysis result */ export interface LambdaTrend { /** Trend direction */ direction: 'improving' | 'declining' | 'stable'; /** Rate of change per day */ ratePerDay: number; /** Confidence in trend (0-1) */ confidence: number; /** Number of samples analyzed */ sampleCount: number; /** Projected lambda in 7 days */ projectedLambda7d?: number; /** Is trend concerning */ isConcerning: boolean; } //# sourceMappingURL=types.d.ts.map