@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.
Files changed (49) hide show
  1. package/dist/application/ExtendedQualityGateRunner.d.ts +122 -0
  2. package/dist/application/ExtendedQualityGateRunner.d.ts.map +1 -0
  3. package/dist/application/ExtendedQualityGateRunner.js +202 -0
  4. package/dist/application/ExtendedQualityGateRunner.js.map +1 -0
  5. package/dist/application/__tests__/ExtendedQualityGateRunner.test.d.ts +8 -0
  6. package/dist/application/__tests__/ExtendedQualityGateRunner.test.d.ts.map +1 -0
  7. package/dist/application/__tests__/ExtendedQualityGateRunner.test.js +260 -0
  8. package/dist/application/__tests__/ExtendedQualityGateRunner.test.js.map +1 -0
  9. package/dist/application/index.d.ts +1 -0
  10. package/dist/application/index.d.ts.map +1 -1
  11. package/dist/application/index.js +2 -0
  12. package/dist/application/index.js.map +1 -1
  13. package/dist/domain/entities/EvidenceLevelValidator.d.ts +81 -0
  14. package/dist/domain/entities/EvidenceLevelValidator.d.ts.map +1 -0
  15. package/dist/domain/entities/EvidenceLevelValidator.js +125 -0
  16. package/dist/domain/entities/EvidenceLevelValidator.js.map +1 -0
  17. package/dist/domain/entities/ExtendedQualityGate.d.ts +224 -0
  18. package/dist/domain/entities/ExtendedQualityGate.d.ts.map +1 -0
  19. package/dist/domain/entities/ExtendedQualityGate.js +130 -0
  20. package/dist/domain/entities/ExtendedQualityGate.js.map +1 -0
  21. package/dist/domain/entities/TriageEngine.d.ts +101 -0
  22. package/dist/domain/entities/TriageEngine.d.ts.map +1 -0
  23. package/dist/domain/entities/TriageEngine.js +221 -0
  24. package/dist/domain/entities/TriageEngine.js.map +1 -0
  25. package/dist/domain/entities/__tests__/EvidenceLevelValidator.test.d.ts +2 -0
  26. package/dist/domain/entities/__tests__/EvidenceLevelValidator.test.d.ts.map +1 -0
  27. package/dist/domain/entities/__tests__/EvidenceLevelValidator.test.js +271 -0
  28. package/dist/domain/entities/__tests__/EvidenceLevelValidator.test.js.map +1 -0
  29. package/dist/domain/entities/__tests__/ExtendedQualityGate.test.d.ts +11 -0
  30. package/dist/domain/entities/__tests__/ExtendedQualityGate.test.d.ts.map +1 -0
  31. package/dist/domain/entities/__tests__/ExtendedQualityGate.test.js +244 -0
  32. package/dist/domain/entities/__tests__/ExtendedQualityGate.test.js.map +1 -0
  33. package/dist/domain/entities/__tests__/TriageEngine.test.d.ts +2 -0
  34. package/dist/domain/entities/__tests__/TriageEngine.test.d.ts.map +1 -0
  35. package/dist/domain/entities/__tests__/TriageEngine.test.js +290 -0
  36. package/dist/domain/entities/__tests__/TriageEngine.test.js.map +1 -0
  37. package/dist/domain/entities/index.d.ts +1 -0
  38. package/dist/domain/entities/index.d.ts.map +1 -1
  39. package/dist/domain/entities/index.js +2 -0
  40. package/dist/domain/entities/index.js.map +1 -1
  41. package/dist/domain/value-objects/EvidenceLevel.d.ts +98 -0
  42. package/dist/domain/value-objects/EvidenceLevel.d.ts.map +1 -0
  43. package/dist/domain/value-objects/EvidenceLevel.js +157 -0
  44. package/dist/domain/value-objects/EvidenceLevel.js.map +1 -0
  45. package/dist/domain/value-objects/PriorityLevel.d.ts +126 -0
  46. package/dist/domain/value-objects/PriorityLevel.d.ts.map +1 -0
  47. package/dist/domain/value-objects/PriorityLevel.js +103 -0
  48. package/dist/domain/value-objects/PriorityLevel.js.map +1 -0
  49. 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,8 @@
1
+ /**
2
+ * ExtendedQualityGateRunner Unit Tests
3
+ *
4
+ * @see TSK-FR-055 - ExtendedQualityGateRunner
5
+ * @trace DES-MUSUBIX-FR-001 Section 3.3.3
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=ExtendedQualityGateRunner.test.d.ts.map
@@ -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"}