@nahisaho/musubix-workflow-engine 3.4.5 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/application/ExtendedQualityGateRunner.d.ts +122 -0
- package/dist/application/ExtendedQualityGateRunner.d.ts.map +1 -0
- package/dist/application/ExtendedQualityGateRunner.js +202 -0
- package/dist/application/ExtendedQualityGateRunner.js.map +1 -0
- package/dist/application/__tests__/ExtendedQualityGateRunner.test.d.ts +8 -0
- package/dist/application/__tests__/ExtendedQualityGateRunner.test.d.ts.map +1 -0
- package/dist/application/__tests__/ExtendedQualityGateRunner.test.js +260 -0
- package/dist/application/__tests__/ExtendedQualityGateRunner.test.js.map +1 -0
- package/dist/application/index.d.ts +1 -0
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +2 -0
- package/dist/application/index.js.map +1 -1
- package/dist/domain/entities/EvidenceLevelValidator.d.ts +81 -0
- package/dist/domain/entities/EvidenceLevelValidator.d.ts.map +1 -0
- package/dist/domain/entities/EvidenceLevelValidator.js +125 -0
- package/dist/domain/entities/EvidenceLevelValidator.js.map +1 -0
- package/dist/domain/entities/ExtendedQualityGate.d.ts +224 -0
- package/dist/domain/entities/ExtendedQualityGate.d.ts.map +1 -0
- package/dist/domain/entities/ExtendedQualityGate.js +130 -0
- package/dist/domain/entities/ExtendedQualityGate.js.map +1 -0
- package/dist/domain/entities/TriageEngine.d.ts +101 -0
- package/dist/domain/entities/TriageEngine.d.ts.map +1 -0
- package/dist/domain/entities/TriageEngine.js +221 -0
- package/dist/domain/entities/TriageEngine.js.map +1 -0
- package/dist/domain/entities/__tests__/EvidenceLevelValidator.test.d.ts +2 -0
- package/dist/domain/entities/__tests__/EvidenceLevelValidator.test.d.ts.map +1 -0
- package/dist/domain/entities/__tests__/EvidenceLevelValidator.test.js +271 -0
- package/dist/domain/entities/__tests__/EvidenceLevelValidator.test.js.map +1 -0
- package/dist/domain/entities/__tests__/ExtendedQualityGate.test.d.ts +11 -0
- package/dist/domain/entities/__tests__/ExtendedQualityGate.test.d.ts.map +1 -0
- package/dist/domain/entities/__tests__/ExtendedQualityGate.test.js +244 -0
- package/dist/domain/entities/__tests__/ExtendedQualityGate.test.js.map +1 -0
- package/dist/domain/entities/__tests__/TriageEngine.test.d.ts +2 -0
- package/dist/domain/entities/__tests__/TriageEngine.test.d.ts.map +1 -0
- package/dist/domain/entities/__tests__/TriageEngine.test.js +290 -0
- package/dist/domain/entities/__tests__/TriageEngine.test.js.map +1 -0
- package/dist/domain/entities/index.d.ts +1 -0
- package/dist/domain/entities/index.d.ts.map +1 -1
- package/dist/domain/entities/index.js +2 -0
- package/dist/domain/entities/index.js.map +1 -1
- package/dist/domain/value-objects/EvidenceLevel.d.ts +98 -0
- package/dist/domain/value-objects/EvidenceLevel.d.ts.map +1 -0
- package/dist/domain/value-objects/EvidenceLevel.js +157 -0
- package/dist/domain/value-objects/EvidenceLevel.js.map +1 -0
- package/dist/domain/value-objects/PriorityLevel.d.ts +126 -0
- package/dist/domain/value-objects/PriorityLevel.d.ts.map +1 -0
- package/dist/domain/value-objects/PriorityLevel.js +103 -0
- package/dist/domain/value-objects/PriorityLevel.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExtendedQualityGateRunner - Application Service
|
|
3
|
+
*
|
|
4
|
+
* Runs extended quality gates with timing and context support.
|
|
5
|
+
* Provides compatibility bridge to standard QualityGateRunner.
|
|
6
|
+
*
|
|
7
|
+
* @see TSK-FR-055 - ExtendedQualityGateRunner
|
|
8
|
+
* @see REQ-FR-020〜023 - NonNegotiablesEngine
|
|
9
|
+
* @see REQ-FR-040〜041 - TriageEngine
|
|
10
|
+
* @trace DES-MUSUBIX-FR-001 Section 3.3.3
|
|
11
|
+
*/
|
|
12
|
+
import type { PhaseType } from '../domain/value-objects/index.js';
|
|
13
|
+
import type { QualityGateResult } from '../domain/entities/QualityGate.js';
|
|
14
|
+
import type { QualityGateRunner } from './QualityGateRunner.js';
|
|
15
|
+
import { type ExtendedQualityGate, type GateTiming, type GateExecutionContext } from '../domain/entities/ExtendedQualityGate.js';
|
|
16
|
+
/**
|
|
17
|
+
* Extended gate run result
|
|
18
|
+
*/
|
|
19
|
+
export interface ExtendedGateRunResult {
|
|
20
|
+
/** Phase that was checked */
|
|
21
|
+
readonly phase: PhaseType;
|
|
22
|
+
/** Timing that was checked (entry or exit) */
|
|
23
|
+
readonly timing: GateTiming;
|
|
24
|
+
/** Individual gate results */
|
|
25
|
+
readonly results: readonly QualityGateResult[];
|
|
26
|
+
/** Whether all gates passed */
|
|
27
|
+
readonly allPassed: boolean;
|
|
28
|
+
/** Whether all mandatory gates passed */
|
|
29
|
+
readonly mandatoryPassed: boolean;
|
|
30
|
+
/** Human-readable summary */
|
|
31
|
+
readonly summary: string;
|
|
32
|
+
/** Total execution duration in ms */
|
|
33
|
+
readonly duration: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Extended gate runner configuration
|
|
37
|
+
*/
|
|
38
|
+
export interface ExtendedQualityGateRunnerConfig {
|
|
39
|
+
/** Timeout for individual gate execution (ms) */
|
|
40
|
+
gateTimeout?: number;
|
|
41
|
+
/** Continue running gates after failure */
|
|
42
|
+
continueOnFailure?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Extended Quality Gate Runner
|
|
46
|
+
*
|
|
47
|
+
* Manages and executes extended quality gates with timing and context support.
|
|
48
|
+
* Can bridge to standard QualityGateRunner for backward compatibility.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const runner = new ExtendedQualityGateRunner();
|
|
53
|
+
*
|
|
54
|
+
* runner.registerExtendedGate(triageGate);
|
|
55
|
+
* runner.registerExtendedGate(nonNegotiablesGate);
|
|
56
|
+
*
|
|
57
|
+
* const context = { workflowId, phase: 'design', artifacts, services };
|
|
58
|
+
* const result = await runner.runExtendedGates('design', 'exit', context);
|
|
59
|
+
*
|
|
60
|
+
* if (!result.mandatoryPassed) {
|
|
61
|
+
* console.error('Phase transition blocked:', result.summary);
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* @trace DES-MUSUBIX-FR-001 Section 3.3.3
|
|
66
|
+
*/
|
|
67
|
+
export declare class ExtendedQualityGateRunner {
|
|
68
|
+
private gates;
|
|
69
|
+
private readonly config;
|
|
70
|
+
constructor(config?: ExtendedQualityGateRunnerConfig);
|
|
71
|
+
/**
|
|
72
|
+
* Register an extended quality gate
|
|
73
|
+
*
|
|
74
|
+
* @param gate - Extended gate to register
|
|
75
|
+
*/
|
|
76
|
+
registerExtendedGate(gate: ExtendedQualityGate): void;
|
|
77
|
+
/**
|
|
78
|
+
* Get all extended gates for a phase
|
|
79
|
+
*
|
|
80
|
+
* @param phase - Phase type
|
|
81
|
+
* @returns Registered extended gates
|
|
82
|
+
*/
|
|
83
|
+
getExtendedGates(phase: PhaseType): readonly ExtendedQualityGate[];
|
|
84
|
+
/**
|
|
85
|
+
* Run extended gates for a phase and timing
|
|
86
|
+
*
|
|
87
|
+
* @param phase - Phase type
|
|
88
|
+
* @param timing - Gate timing (entry or exit)
|
|
89
|
+
* @param context - Execution context
|
|
90
|
+
* @returns Gate run result
|
|
91
|
+
*/
|
|
92
|
+
runExtendedGates(phase: PhaseType, timing: GateTiming, context: GateExecutionContext): Promise<ExtendedGateRunResult>;
|
|
93
|
+
/**
|
|
94
|
+
* Register all extended gates to a standard QualityGateRunner
|
|
95
|
+
*
|
|
96
|
+
* This provides backward compatibility with existing infrastructure.
|
|
97
|
+
*
|
|
98
|
+
* @param standardRunner - Standard quality gate runner
|
|
99
|
+
* @param contextProvider - Function that provides execution context
|
|
100
|
+
*/
|
|
101
|
+
registerToStandardRunner(standardRunner: QualityGateRunner, contextProvider: () => GateExecutionContext): void;
|
|
102
|
+
/**
|
|
103
|
+
* Execute a single extended gate
|
|
104
|
+
*/
|
|
105
|
+
private executeGate;
|
|
106
|
+
/**
|
|
107
|
+
* Execute gate with timeout
|
|
108
|
+
*/
|
|
109
|
+
private executeWithTimeout;
|
|
110
|
+
/**
|
|
111
|
+
* Aggregate results from multiple gates
|
|
112
|
+
*/
|
|
113
|
+
private aggregateResults;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create a pre-configured ExtendedQualityGateRunner instance
|
|
117
|
+
*
|
|
118
|
+
* @param config - Optional configuration
|
|
119
|
+
* @returns ExtendedQualityGateRunner instance
|
|
120
|
+
*/
|
|
121
|
+
export declare function createExtendedQualityGateRunner(config?: ExtendedQualityGateRunnerConfig): ExtendedQualityGateRunner;
|
|
122
|
+
//# sourceMappingURL=ExtendedQualityGateRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendedQualityGateRunner.d.ts","sourceRoot":"","sources":["../../src/application/ExtendedQualityGateRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,mCAAmC,CAAC;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,oBAAoB,EAG1B,MAAM,2CAA2C,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC/C,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,KAAK,CAAoD;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAEvD,MAAM,GAAE,+BAAoC;IAOxD;;;;OAIG;IACH,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAMrD;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,mBAAmB,EAAE;IAIlE;;;;;;;OAOG;IACG,gBAAgB,CACpB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IA6BjC;;;;;;;OAOG;IACH,wBAAwB,CACtB,cAAc,EAAE,iBAAiB,EACjC,eAAe,EAAE,MAAM,oBAAoB,GAC1C,IAAI;IASP;;OAEG;YACW,WAAW;IAuCzB;;OAEG;YACW,kBAAkB;IAsBhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAkCzB;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,CAAC,EAAE,+BAA+B,GACvC,yBAAyB,CAE3B"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExtendedQualityGateRunner - Application Service
|
|
3
|
+
*
|
|
4
|
+
* Runs extended quality gates with timing and context support.
|
|
5
|
+
* Provides compatibility bridge to standard QualityGateRunner.
|
|
6
|
+
*
|
|
7
|
+
* @see TSK-FR-055 - ExtendedQualityGateRunner
|
|
8
|
+
* @see REQ-FR-020〜023 - NonNegotiablesEngine
|
|
9
|
+
* @see REQ-FR-040〜041 - TriageEngine
|
|
10
|
+
* @trace DES-MUSUBIX-FR-001 Section 3.3.3
|
|
11
|
+
*/
|
|
12
|
+
import { toStandardGate, filterGatesByTiming, } from '../domain/entities/ExtendedQualityGate.js';
|
|
13
|
+
/**
|
|
14
|
+
* Extended Quality Gate Runner
|
|
15
|
+
*
|
|
16
|
+
* Manages and executes extended quality gates with timing and context support.
|
|
17
|
+
* Can bridge to standard QualityGateRunner for backward compatibility.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const runner = new ExtendedQualityGateRunner();
|
|
22
|
+
*
|
|
23
|
+
* runner.registerExtendedGate(triageGate);
|
|
24
|
+
* runner.registerExtendedGate(nonNegotiablesGate);
|
|
25
|
+
*
|
|
26
|
+
* const context = { workflowId, phase: 'design', artifacts, services };
|
|
27
|
+
* const result = await runner.runExtendedGates('design', 'exit', context);
|
|
28
|
+
*
|
|
29
|
+
* if (!result.mandatoryPassed) {
|
|
30
|
+
* console.error('Phase transition blocked:', result.summary);
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @trace DES-MUSUBIX-FR-001 Section 3.3.3
|
|
35
|
+
*/
|
|
36
|
+
export class ExtendedQualityGateRunner {
|
|
37
|
+
gates = new Map();
|
|
38
|
+
config;
|
|
39
|
+
constructor(config = {}) {
|
|
40
|
+
this.config = {
|
|
41
|
+
gateTimeout: config.gateTimeout ?? 30000,
|
|
42
|
+
continueOnFailure: config.continueOnFailure ?? true,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Register an extended quality gate
|
|
47
|
+
*
|
|
48
|
+
* @param gate - Extended gate to register
|
|
49
|
+
*/
|
|
50
|
+
registerExtendedGate(gate) {
|
|
51
|
+
const phaseGates = this.gates.get(gate.phase) ?? [];
|
|
52
|
+
phaseGates.push(gate);
|
|
53
|
+
this.gates.set(gate.phase, phaseGates);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get all extended gates for a phase
|
|
57
|
+
*
|
|
58
|
+
* @param phase - Phase type
|
|
59
|
+
* @returns Registered extended gates
|
|
60
|
+
*/
|
|
61
|
+
getExtendedGates(phase) {
|
|
62
|
+
return this.gates.get(phase) ?? [];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Run extended gates for a phase and timing
|
|
66
|
+
*
|
|
67
|
+
* @param phase - Phase type
|
|
68
|
+
* @param timing - Gate timing (entry or exit)
|
|
69
|
+
* @param context - Execution context
|
|
70
|
+
* @returns Gate run result
|
|
71
|
+
*/
|
|
72
|
+
async runExtendedGates(phase, timing, context) {
|
|
73
|
+
const startTime = Date.now();
|
|
74
|
+
const allGates = this.gates.get(phase) ?? [];
|
|
75
|
+
const targetGates = filterGatesByTiming(allGates, timing);
|
|
76
|
+
const results = [];
|
|
77
|
+
for (const gate of targetGates) {
|
|
78
|
+
const result = await this.executeGate(gate, context);
|
|
79
|
+
results.push(result);
|
|
80
|
+
if (!result.passed && !this.config.continueOnFailure) {
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const duration = Date.now() - startTime;
|
|
85
|
+
const aggregated = this.aggregateResults(results, targetGates);
|
|
86
|
+
return Object.freeze({
|
|
87
|
+
phase,
|
|
88
|
+
timing,
|
|
89
|
+
results,
|
|
90
|
+
allPassed: aggregated.allPassed,
|
|
91
|
+
mandatoryPassed: aggregated.mandatoryPassed,
|
|
92
|
+
summary: aggregated.summary,
|
|
93
|
+
duration,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Register all extended gates to a standard QualityGateRunner
|
|
98
|
+
*
|
|
99
|
+
* This provides backward compatibility with existing infrastructure.
|
|
100
|
+
*
|
|
101
|
+
* @param standardRunner - Standard quality gate runner
|
|
102
|
+
* @param contextProvider - Function that provides execution context
|
|
103
|
+
*/
|
|
104
|
+
registerToStandardRunner(standardRunner, contextProvider) {
|
|
105
|
+
for (const [_phase, gates] of this.gates) {
|
|
106
|
+
for (const gate of gates) {
|
|
107
|
+
const standardGate = toStandardGate(gate, contextProvider);
|
|
108
|
+
standardRunner.registerGate(standardGate);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Execute a single extended gate
|
|
114
|
+
*/
|
|
115
|
+
async executeGate(gate, context) {
|
|
116
|
+
const startTime = Date.now();
|
|
117
|
+
try {
|
|
118
|
+
const result = await this.executeWithTimeout(gate, context);
|
|
119
|
+
const duration = Date.now() - startTime;
|
|
120
|
+
return Object.freeze({
|
|
121
|
+
gateId: gate.id,
|
|
122
|
+
gateName: gate.name,
|
|
123
|
+
results: [result],
|
|
124
|
+
passed: result.passed,
|
|
125
|
+
executedAt: new Date(),
|
|
126
|
+
duration,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const duration = Date.now() - startTime;
|
|
131
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
132
|
+
return Object.freeze({
|
|
133
|
+
gateId: gate.id,
|
|
134
|
+
gateName: gate.name,
|
|
135
|
+
results: [
|
|
136
|
+
{
|
|
137
|
+
passed: false,
|
|
138
|
+
message: `Gate execution failed: ${errorMessage}`,
|
|
139
|
+
severity: 'error',
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
passed: false,
|
|
143
|
+
executedAt: new Date(),
|
|
144
|
+
duration,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Execute gate with timeout
|
|
150
|
+
*/
|
|
151
|
+
async executeWithTimeout(gate, context) {
|
|
152
|
+
return new Promise((resolve, reject) => {
|
|
153
|
+
const timeout = setTimeout(() => {
|
|
154
|
+
reject(new Error(`Gate '${gate.name}' timed out after ${this.config.gateTimeout}ms`));
|
|
155
|
+
}, this.config.gateTimeout);
|
|
156
|
+
gate
|
|
157
|
+
.check(context)
|
|
158
|
+
.then((result) => {
|
|
159
|
+
clearTimeout(timeout);
|
|
160
|
+
resolve(result);
|
|
161
|
+
})
|
|
162
|
+
.catch((error) => {
|
|
163
|
+
clearTimeout(timeout);
|
|
164
|
+
reject(error);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Aggregate results from multiple gates
|
|
170
|
+
*/
|
|
171
|
+
aggregateResults(results, gates) {
|
|
172
|
+
if (results.length === 0) {
|
|
173
|
+
return {
|
|
174
|
+
allPassed: true,
|
|
175
|
+
mandatoryPassed: true,
|
|
176
|
+
summary: 'No gates to run',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const allPassed = results.every((r) => r.passed);
|
|
180
|
+
// Check mandatory gates only
|
|
181
|
+
const mandatoryGates = gates.filter((g) => g.mandatory);
|
|
182
|
+
const mandatoryResults = results.filter((r) => mandatoryGates.some((g) => g.id === r.gateId));
|
|
183
|
+
const mandatoryPassed = mandatoryResults.every((r) => r.passed);
|
|
184
|
+
const passedCount = results.filter((r) => r.passed).length;
|
|
185
|
+
const summary = `${passedCount}/${results.length} gates passed`;
|
|
186
|
+
return {
|
|
187
|
+
allPassed,
|
|
188
|
+
mandatoryPassed,
|
|
189
|
+
summary,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Create a pre-configured ExtendedQualityGateRunner instance
|
|
195
|
+
*
|
|
196
|
+
* @param config - Optional configuration
|
|
197
|
+
* @returns ExtendedQualityGateRunner instance
|
|
198
|
+
*/
|
|
199
|
+
export function createExtendedQualityGateRunner(config) {
|
|
200
|
+
return new ExtendedQualityGateRunner(config);
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=ExtendedQualityGateRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendedQualityGateRunner.js","sourceRoot":"","sources":["../../src/application/ExtendedQualityGateRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendedQualityGateRunner.test.d.ts","sourceRoot":"","sources":["../../../src/application/__tests__/ExtendedQualityGateRunner.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExtendedQualityGateRunner Unit Tests
|
|
3
|
+
*
|
|
4
|
+
* @see TSK-FR-055 - ExtendedQualityGateRunner
|
|
5
|
+
* @trace DES-MUSUBIX-FR-001 Section 3.3.3
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
8
|
+
import { ExtendedQualityGateRunner, } from '../ExtendedQualityGateRunner.js';
|
|
9
|
+
import { createExtendedGate, } from '../../domain/entities/ExtendedQualityGate.js';
|
|
10
|
+
describe('ExtendedQualityGateRunner', () => {
|
|
11
|
+
let runner;
|
|
12
|
+
const createMockContext = (overrides = {}) => ({
|
|
13
|
+
workflowId: 'WF-20260123-001',
|
|
14
|
+
phase: 'design',
|
|
15
|
+
artifacts: [],
|
|
16
|
+
services: {},
|
|
17
|
+
...overrides,
|
|
18
|
+
});
|
|
19
|
+
const createSuccessResult = (message = 'Check passed') => ({
|
|
20
|
+
passed: true,
|
|
21
|
+
message,
|
|
22
|
+
severity: 'info',
|
|
23
|
+
});
|
|
24
|
+
const createFailureResult = (message = 'Check failed') => ({
|
|
25
|
+
passed: false,
|
|
26
|
+
message,
|
|
27
|
+
severity: 'error',
|
|
28
|
+
});
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
runner = new ExtendedQualityGateRunner();
|
|
31
|
+
});
|
|
32
|
+
describe('registerExtendedGate', () => {
|
|
33
|
+
it('should register an extended gate', () => {
|
|
34
|
+
const gate = createExtendedGate({
|
|
35
|
+
id: 'gate-test-001',
|
|
36
|
+
name: 'Test Gate',
|
|
37
|
+
phase: 'design',
|
|
38
|
+
description: 'Test gate',
|
|
39
|
+
timing: 'entry',
|
|
40
|
+
check: async () => createSuccessResult(),
|
|
41
|
+
});
|
|
42
|
+
runner.registerExtendedGate(gate);
|
|
43
|
+
const gates = runner.getExtendedGates('design');
|
|
44
|
+
expect(gates).toHaveLength(1);
|
|
45
|
+
expect(gates[0].id).toBe('gate-test-001');
|
|
46
|
+
});
|
|
47
|
+
it('should register multiple gates for same phase', () => {
|
|
48
|
+
const gate1 = createExtendedGate({
|
|
49
|
+
id: 'gate-1',
|
|
50
|
+
name: 'Gate 1',
|
|
51
|
+
phase: 'design',
|
|
52
|
+
description: 'Test',
|
|
53
|
+
timing: 'entry',
|
|
54
|
+
check: async () => createSuccessResult(),
|
|
55
|
+
});
|
|
56
|
+
const gate2 = createExtendedGate({
|
|
57
|
+
id: 'gate-2',
|
|
58
|
+
name: 'Gate 2',
|
|
59
|
+
phase: 'design',
|
|
60
|
+
description: 'Test',
|
|
61
|
+
timing: 'exit',
|
|
62
|
+
check: async () => createSuccessResult(),
|
|
63
|
+
});
|
|
64
|
+
runner.registerExtendedGate(gate1);
|
|
65
|
+
runner.registerExtendedGate(gate2);
|
|
66
|
+
const gates = runner.getExtendedGates('design');
|
|
67
|
+
expect(gates).toHaveLength(2);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe('runExtendedGates', () => {
|
|
71
|
+
it('should run all gates for a phase and return results', async () => {
|
|
72
|
+
const gate = createExtendedGate({
|
|
73
|
+
id: 'gate-run-001',
|
|
74
|
+
name: 'Test Gate',
|
|
75
|
+
phase: 'design',
|
|
76
|
+
description: 'Test',
|
|
77
|
+
timing: 'exit',
|
|
78
|
+
check: async () => createSuccessResult(),
|
|
79
|
+
});
|
|
80
|
+
runner.registerExtendedGate(gate);
|
|
81
|
+
const context = createMockContext({ phase: 'design' });
|
|
82
|
+
const result = await runner.runExtendedGates('design', 'exit', context);
|
|
83
|
+
expect(result.phase).toBe('design');
|
|
84
|
+
expect(result.timing).toBe('exit');
|
|
85
|
+
expect(result.allPassed).toBe(true);
|
|
86
|
+
expect(result.results).toHaveLength(1);
|
|
87
|
+
});
|
|
88
|
+
it('should filter gates by timing', async () => {
|
|
89
|
+
const entryGate = createExtendedGate({
|
|
90
|
+
id: 'gate-entry',
|
|
91
|
+
name: 'Entry Gate',
|
|
92
|
+
phase: 'design',
|
|
93
|
+
description: 'Test',
|
|
94
|
+
timing: 'entry',
|
|
95
|
+
check: async () => createSuccessResult('entry'),
|
|
96
|
+
});
|
|
97
|
+
const exitGate = createExtendedGate({
|
|
98
|
+
id: 'gate-exit',
|
|
99
|
+
name: 'Exit Gate',
|
|
100
|
+
phase: 'design',
|
|
101
|
+
description: 'Test',
|
|
102
|
+
timing: 'exit',
|
|
103
|
+
check: async () => createSuccessResult('exit'),
|
|
104
|
+
});
|
|
105
|
+
runner.registerExtendedGate(entryGate);
|
|
106
|
+
runner.registerExtendedGate(exitGate);
|
|
107
|
+
const context = createMockContext({ phase: 'design' });
|
|
108
|
+
// Run only entry gates
|
|
109
|
+
const entryResult = await runner.runExtendedGates('design', 'entry', context);
|
|
110
|
+
expect(entryResult.results).toHaveLength(1);
|
|
111
|
+
expect(entryResult.results[0].gateName).toBe('Entry Gate');
|
|
112
|
+
// Run only exit gates
|
|
113
|
+
const exitResult = await runner.runExtendedGates('design', 'exit', context);
|
|
114
|
+
expect(exitResult.results).toHaveLength(1);
|
|
115
|
+
expect(exitResult.results[0].gateName).toBe('Exit Gate');
|
|
116
|
+
});
|
|
117
|
+
it('should pass context to gate check function', async () => {
|
|
118
|
+
const checkFn = vi.fn().mockResolvedValue(createSuccessResult());
|
|
119
|
+
const gate = createExtendedGate({
|
|
120
|
+
id: 'gate-context',
|
|
121
|
+
name: 'Context Gate',
|
|
122
|
+
phase: 'implementation',
|
|
123
|
+
description: 'Test',
|
|
124
|
+
timing: 'exit',
|
|
125
|
+
check: checkFn,
|
|
126
|
+
});
|
|
127
|
+
runner.registerExtendedGate(gate);
|
|
128
|
+
const context = createMockContext({
|
|
129
|
+
phase: 'implementation',
|
|
130
|
+
changedFiles: ['src/index.ts'],
|
|
131
|
+
});
|
|
132
|
+
await runner.runExtendedGates('implementation', 'exit', context);
|
|
133
|
+
expect(checkFn).toHaveBeenCalledWith(context);
|
|
134
|
+
});
|
|
135
|
+
it('should report failure when mandatory gate fails', async () => {
|
|
136
|
+
const gate = createExtendedGate({
|
|
137
|
+
id: 'gate-mandatory',
|
|
138
|
+
name: 'Mandatory Gate',
|
|
139
|
+
phase: 'design',
|
|
140
|
+
description: 'Test',
|
|
141
|
+
timing: 'exit',
|
|
142
|
+
mandatory: true,
|
|
143
|
+
check: async () => createFailureResult(),
|
|
144
|
+
});
|
|
145
|
+
runner.registerExtendedGate(gate);
|
|
146
|
+
const context = createMockContext({ phase: 'design' });
|
|
147
|
+
const result = await runner.runExtendedGates('design', 'exit', context);
|
|
148
|
+
expect(result.allPassed).toBe(false);
|
|
149
|
+
expect(result.mandatoryPassed).toBe(false);
|
|
150
|
+
});
|
|
151
|
+
it('should pass when optional gate fails but mandatory passes', async () => {
|
|
152
|
+
const mandatoryGate = createExtendedGate({
|
|
153
|
+
id: 'gate-mandatory',
|
|
154
|
+
name: 'Mandatory Gate',
|
|
155
|
+
phase: 'design',
|
|
156
|
+
description: 'Test',
|
|
157
|
+
timing: 'exit',
|
|
158
|
+
mandatory: true,
|
|
159
|
+
check: async () => createSuccessResult(),
|
|
160
|
+
});
|
|
161
|
+
const optionalGate = createExtendedGate({
|
|
162
|
+
id: 'gate-optional',
|
|
163
|
+
name: 'Optional Gate',
|
|
164
|
+
phase: 'design',
|
|
165
|
+
description: 'Test',
|
|
166
|
+
timing: 'exit',
|
|
167
|
+
mandatory: false,
|
|
168
|
+
check: async () => createFailureResult(),
|
|
169
|
+
});
|
|
170
|
+
runner.registerExtendedGate(mandatoryGate);
|
|
171
|
+
runner.registerExtendedGate(optionalGate);
|
|
172
|
+
const context = createMockContext({ phase: 'design' });
|
|
173
|
+
const result = await runner.runExtendedGates('design', 'exit', context);
|
|
174
|
+
expect(result.allPassed).toBe(false);
|
|
175
|
+
expect(result.mandatoryPassed).toBe(true);
|
|
176
|
+
});
|
|
177
|
+
it('should return empty result for phase with no gates', async () => {
|
|
178
|
+
const context = createMockContext({ phase: 'completion' });
|
|
179
|
+
const result = await runner.runExtendedGates('completion', 'exit', context);
|
|
180
|
+
expect(result.results).toHaveLength(0);
|
|
181
|
+
expect(result.allPassed).toBe(true);
|
|
182
|
+
expect(result.mandatoryPassed).toBe(true);
|
|
183
|
+
});
|
|
184
|
+
it('should handle gate execution errors', async () => {
|
|
185
|
+
const gate = createExtendedGate({
|
|
186
|
+
id: 'gate-error',
|
|
187
|
+
name: 'Error Gate',
|
|
188
|
+
phase: 'design',
|
|
189
|
+
description: 'Test',
|
|
190
|
+
timing: 'exit',
|
|
191
|
+
check: async () => {
|
|
192
|
+
throw new Error('Gate execution failed');
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
runner.registerExtendedGate(gate);
|
|
196
|
+
const context = createMockContext({ phase: 'design' });
|
|
197
|
+
const result = await runner.runExtendedGates('design', 'exit', context);
|
|
198
|
+
expect(result.allPassed).toBe(false);
|
|
199
|
+
expect(result.results[0].results[0].message).toContain('Gate execution failed');
|
|
200
|
+
});
|
|
201
|
+
it('should measure execution duration', async () => {
|
|
202
|
+
const gate = createExtendedGate({
|
|
203
|
+
id: 'gate-duration',
|
|
204
|
+
name: 'Duration Gate',
|
|
205
|
+
phase: 'design',
|
|
206
|
+
description: 'Test',
|
|
207
|
+
timing: 'exit',
|
|
208
|
+
check: async () => {
|
|
209
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
210
|
+
return createSuccessResult();
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
runner.registerExtendedGate(gate);
|
|
214
|
+
const context = createMockContext({ phase: 'design' });
|
|
215
|
+
const result = await runner.runExtendedGates('design', 'exit', context);
|
|
216
|
+
// Allow some variance in timing (async scheduling)
|
|
217
|
+
expect(result.duration).toBeGreaterThanOrEqual(5);
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
describe('registerToStandardRunner', () => {
|
|
221
|
+
it('should convert and register gates to standard runner', () => {
|
|
222
|
+
const gate = createExtendedGate({
|
|
223
|
+
id: 'gate-convert',
|
|
224
|
+
name: 'Convert Gate',
|
|
225
|
+
phase: 'design',
|
|
226
|
+
description: 'Test',
|
|
227
|
+
timing: 'exit',
|
|
228
|
+
check: async () => createSuccessResult(),
|
|
229
|
+
});
|
|
230
|
+
runner.registerExtendedGate(gate);
|
|
231
|
+
const mockStandardRunner = {
|
|
232
|
+
registerGate: vi.fn(),
|
|
233
|
+
};
|
|
234
|
+
const context = createMockContext({ phase: 'design' });
|
|
235
|
+
runner.registerToStandardRunner(mockStandardRunner, () => context);
|
|
236
|
+
expect(mockStandardRunner.registerGate).toHaveBeenCalled();
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
describe('getExtendedGates', () => {
|
|
240
|
+
it('should return empty array for phase with no gates', () => {
|
|
241
|
+
const gates = runner.getExtendedGates('completion');
|
|
242
|
+
expect(gates).toEqual([]);
|
|
243
|
+
});
|
|
244
|
+
it('should return registered gates for phase', () => {
|
|
245
|
+
const gate = createExtendedGate({
|
|
246
|
+
id: 'gate-get',
|
|
247
|
+
name: 'Get Gate',
|
|
248
|
+
phase: 'requirements',
|
|
249
|
+
description: 'Test',
|
|
250
|
+
timing: 'entry',
|
|
251
|
+
check: async () => createSuccessResult(),
|
|
252
|
+
});
|
|
253
|
+
runner.registerExtendedGate(gate);
|
|
254
|
+
const gates = runner.getExtendedGates('requirements');
|
|
255
|
+
expect(gates).toHaveLength(1);
|
|
256
|
+
expect(gates[0].id).toBe('gate-get');
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
//# sourceMappingURL=ExtendedQualityGateRunner.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendedQualityGateRunner.test.js","sourceRoot":"","sources":["../../../src/application/__tests__/ExtendedQualityGateRunner.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,5 @@
|
|
|
8
8
|
export { type PhaseControllerConfig, type PhaseControllerResult, PhaseController, createPhaseController, } from './PhaseController.js';
|
|
9
9
|
export { type StateSnapshot, type StateChangeEvent, type StateListener, StateTracker, createStateTracker, } from './StateTracker.js';
|
|
10
10
|
export { type QualityGateRunnerConfig, type GateRunResult, QualityGateRunner, createQualityGateRunner, } from './QualityGateRunner.js';
|
|
11
|
+
export { type ExtendedGateRunResult, type ExtendedQualityGateRunnerConfig, ExtendedQualityGateRunner, createExtendedQualityGateRunner, } from './ExtendedQualityGateRunner.js';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,EACpC,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,gCAAgC,CAAC"}
|
|
@@ -8,4 +8,6 @@
|
|
|
8
8
|
export { PhaseController, createPhaseController, } from './PhaseController.js';
|
|
9
9
|
export { StateTracker, createStateTracker, } from './StateTracker.js';
|
|
10
10
|
export { QualityGateRunner, createQualityGateRunner, } from './QualityGateRunner.js';
|
|
11
|
+
// FastRender Extended Quality Gate Runner (v3.6.0)
|
|
12
|
+
export { ExtendedQualityGateRunner, createExtendedQualityGateRunner, } from './ExtendedQualityGateRunner.js';
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAIL,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAGL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,eAAe,EACf,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAIL,YAAY,EACZ,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAGL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,mDAAmD;AACnD,OAAO,EAGL,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,gCAAgC,CAAC"}
|